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())