Python 脚本在收到保存的消息时停止响应
Python script stops responding when receiving saved messages
我正在编写一个脚本,使用 Telethon 库从 Telegram 下载我保存的所有消息,以与 Telegram 进行交互 API。
但是一旦调用库中的任何方法,脚本就会陷入某种循环或等待响应。
知道可能是什么问题吗?
这是我 运行:
的代码片段
from telethon import TelegramClient
import asyncio
api_id = 12345678
api_hash = '' #hash value
client = TelegramClient('name', api_id, api_hash)
client.start()
async def main():
saved = open('saved_messages.txt', 'a')
me = await client.get_me()
async for message in client.get_messages('me'):
saved.write(f'{message.text}\n')
print(message.id, message.text)
saved.close()
asyncio.run(main())
所有代码来自quick-start.
我做错了什么?请帮忙。
我尝试查找问题,看看是否有人遇到过它,但一无所获。
有 2 个问题,要开始:
async for message in client.get_messages('me'):
无效。您将需要 await
client.get_messages
,所以做到:
me = await client.get_me()
messages = await client.get_messages('me', limit=100)
for message in messages:
....
注意 limit=100
,否则你只会收到最新保存的消息
其次,您需要使用 asyncio 中的 event_loop:
loop = asyncio.get_event_loop()
loop.run_until_complete(main())
通过这种方式,我得到了具有预期内容的 saved_messages.txt
。
完整代码:
from telethon import TelegramClient
import asyncio
saved = open('saved_messages.txt', 'a')
client = TelegramClient('anon', '1', '2')
client.start()
async def main():
me = await client.get_me()
messages = await client.get_messages('me', limit=100)
for message in messages:
saved.write(f'{message.text}\n')
print(message.id, message.text)
saved.close()
loop = asyncio.get_event_loop()
loop.run_until_complete(main())
我正在编写一个脚本,使用 Telethon 库从 Telegram 下载我保存的所有消息,以与 Telegram 进行交互 API。
但是一旦调用库中的任何方法,脚本就会陷入某种循环或等待响应。
知道可能是什么问题吗?
这是我 运行:
的代码片段from telethon import TelegramClient
import asyncio
api_id = 12345678
api_hash = '' #hash value
client = TelegramClient('name', api_id, api_hash)
client.start()
async def main():
saved = open('saved_messages.txt', 'a')
me = await client.get_me()
async for message in client.get_messages('me'):
saved.write(f'{message.text}\n')
print(message.id, message.text)
saved.close()
asyncio.run(main())
所有代码来自quick-start.
我做错了什么?请帮忙。
我尝试查找问题,看看是否有人遇到过它,但一无所获。
有 2 个问题,要开始:
async for message in client.get_messages('me'):
无效。您将需要 await
client.get_messages
,所以做到:
me = await client.get_me()
messages = await client.get_messages('me', limit=100)
for message in messages:
....
注意 limit=100
,否则你只会收到最新保存的消息
其次,您需要使用 asyncio 中的 event_loop:
loop = asyncio.get_event_loop()
loop.run_until_complete(main())
通过这种方式,我得到了具有预期内容的 saved_messages.txt
。
完整代码:
from telethon import TelegramClient
import asyncio
saved = open('saved_messages.txt', 'a')
client = TelegramClient('anon', '1', '2')
client.start()
async def main():
me = await client.get_me()
messages = await client.get_messages('me', limit=100)
for message in messages:
saved.write(f'{message.text}\n')
print(message.id, message.text)
saved.close()
loop = asyncio.get_event_loop()
loop.run_until_complete(main())