Telethon Telegram session_name 错误
Telethon Telegram session_name errror
这是对此处提出的问题的跟进:how to get messages of the public channels from Telegram
这里使用的代码是:
import asyncio
from telethon import TelegramClient
from telethon.tl import functions, types
client = TelegramClient('YOUR_SESSION_NAME', 'YOUR_API_ID', 'YOUR_API_HASH')
client.start()
async def main():
channel = await client.get_entity('CHANNEL USERNAME')
messages = await client.get_messages(channel, limit= None) #pass your own args
#then if you want to get all the messages text
for x in messages:
print(x.text) #return message.text
在此代码中使用了 YOUR_SESSION_NAME
,但我不确定那是什么。我已经阅读了此处的文档:https://docs.telethon.dev/en/latest/concepts/sessions.html 但是由于我对 python 很陌生,所以我被困在这里。我有 'YOUR_API_ID'
和 'YOUR_API_HASH'
.
截至目前,当我 运行 此代码时,我收到以下错误:下面的完整错误
---------------------------------------------------------------------------
OperationalError Traceback (most recent call last)
<ipython-input-2-de73a24697a1> in <module>
3 from telethon.tl import functions, types
4
----> 5 client = TelegramClient('anon', '[code]', '[code]')
6 client.start()
7
C:\ProgramData\Anaconda3\lib\site-packages\telethon\client\telegrambaseclient.py in __init__(self, session, api_id, api_hash, connection, use_ipv6, proxy, local_addr, timeout, request_retries, connection_retries, retry_delay, auto_reconnect, sequential_updates, flood_sleep_threshold, raise_last_call_error, device_model, system_version, app_version, lang_code, system_lang_code, loop, base_logger)
279 if (not session.server_address or
280 (':' in session.server_address) != use_ipv6):
--> 281 session.set_dc(
282 DEFAULT_DC_ID,
283 DEFAULT_IPV6_IP if self._use_ipv6 else DEFAULT_IPV4_IP,
C:\ProgramData\Anaconda3\lib\site-packages\telethon\sessions\sqlite.py in set_dc(self, dc_id, server_address, port)
166 def set_dc(self, dc_id, server_address, port):
167 super().set_dc(dc_id, server_address, port)
--> 168 self._update_session_table()
169
170 # Fetch the auth_key corresponding to this data center
C:\ProgramData\Anaconda3\lib\site-packages\telethon\sessions\sqlite.py in _update_session_table(self)
192 # some more work before being able to save auth_key's for
193 # multiple DCs. Probably done differently.
--> 194 c.execute('delete from sessions')
195 c.execute('insert or replace into sessions values (?,?,?,?,?)', (
196 self._dc_id,
OperationalError: database is locked
你能给我一些关于我做错了什么的指示吗?我的 objective 是在所有聊天进入时打印文本日志,这样我就可以 运行 一个关键字的搜索文件管理器 运行 一个警报。
您可以使用您想到的任何会话名称。例如,您可以这样写:
...
session_name = "Test Session"
client = TelegramClient(session_name, 'YOUR_API_ID', 'YOUR_API_HASH')
client.start()
...
然后 Telegram 会要求您通过向您的 TG 客户端 (web/mobile) 发送代码来确认这是您本人。如果您将再次使用此会话名称 - 确认将不会出现。否则你要重新命名这个,你需要再次确认。
顺便说一句,您可以使用 input() 函数来创建您的会话名称,诸如此类:
...
session_name = input("Enter your session name: ")
client = TelegramClient(session_name, 'YOUR_API_ID', 'YOUR_API_HASH')
client.start()
...
然后您必须进行确认。请注意,如果您将使用 input() - 不要忘记每次都输入相同的名称;如果您至少会在一个符号上出错 - 您必须再次确认。
这是对此处提出的问题的跟进:how to get messages of the public channels from Telegram
这里使用的代码是:
import asyncio
from telethon import TelegramClient
from telethon.tl import functions, types
client = TelegramClient('YOUR_SESSION_NAME', 'YOUR_API_ID', 'YOUR_API_HASH')
client.start()
async def main():
channel = await client.get_entity('CHANNEL USERNAME')
messages = await client.get_messages(channel, limit= None) #pass your own args
#then if you want to get all the messages text
for x in messages:
print(x.text) #return message.text
在此代码中使用了 YOUR_SESSION_NAME
,但我不确定那是什么。我已经阅读了此处的文档:https://docs.telethon.dev/en/latest/concepts/sessions.html 但是由于我对 python 很陌生,所以我被困在这里。我有 'YOUR_API_ID'
和 'YOUR_API_HASH'
.
截至目前,当我 运行 此代码时,我收到以下错误:下面的完整错误
---------------------------------------------------------------------------
OperationalError Traceback (most recent call last)
<ipython-input-2-de73a24697a1> in <module>
3 from telethon.tl import functions, types
4
----> 5 client = TelegramClient('anon', '[code]', '[code]')
6 client.start()
7
C:\ProgramData\Anaconda3\lib\site-packages\telethon\client\telegrambaseclient.py in __init__(self, session, api_id, api_hash, connection, use_ipv6, proxy, local_addr, timeout, request_retries, connection_retries, retry_delay, auto_reconnect, sequential_updates, flood_sleep_threshold, raise_last_call_error, device_model, system_version, app_version, lang_code, system_lang_code, loop, base_logger)
279 if (not session.server_address or
280 (':' in session.server_address) != use_ipv6):
--> 281 session.set_dc(
282 DEFAULT_DC_ID,
283 DEFAULT_IPV6_IP if self._use_ipv6 else DEFAULT_IPV4_IP,
C:\ProgramData\Anaconda3\lib\site-packages\telethon\sessions\sqlite.py in set_dc(self, dc_id, server_address, port)
166 def set_dc(self, dc_id, server_address, port):
167 super().set_dc(dc_id, server_address, port)
--> 168 self._update_session_table()
169
170 # Fetch the auth_key corresponding to this data center
C:\ProgramData\Anaconda3\lib\site-packages\telethon\sessions\sqlite.py in _update_session_table(self)
192 # some more work before being able to save auth_key's for
193 # multiple DCs. Probably done differently.
--> 194 c.execute('delete from sessions')
195 c.execute('insert or replace into sessions values (?,?,?,?,?)', (
196 self._dc_id,
OperationalError: database is locked
你能给我一些关于我做错了什么的指示吗?我的 objective 是在所有聊天进入时打印文本日志,这样我就可以 运行 一个关键字的搜索文件管理器 运行 一个警报。
您可以使用您想到的任何会话名称。例如,您可以这样写:
...
session_name = "Test Session"
client = TelegramClient(session_name, 'YOUR_API_ID', 'YOUR_API_HASH')
client.start()
...
然后 Telegram 会要求您通过向您的 TG 客户端 (web/mobile) 发送代码来确认这是您本人。如果您将再次使用此会话名称 - 确认将不会出现。否则你要重新命名这个,你需要再次确认。
顺便说一句,您可以使用 input() 函数来创建您的会话名称,诸如此类:
...
session_name = input("Enter your session name: ")
client = TelegramClient(session_name, 'YOUR_API_ID', 'YOUR_API_HASH')
client.start()
...
然后您必须进行确认。请注意,如果您将使用 input() - 不要忘记每次都输入相同的名称;如果您至少会在一个符号上出错 - 您必须再次确认。