使用Python与Telethon读取Telegram聊天消息无输出问题排查
问题排查与解决方案
1. 调整消息获取数量限制
Telethon的get_messages和iter_messages默认仅获取最近10条/100条消息,你的427条未读消息可能不在默认获取范围内。需要显式设置limit参数扩大获取范围:
- 第一段代码修改:
from telethon.sync import TelegramClient api_id = '#####991' api_hash = 'xxxxxxxxxxxxxxxxxxxxxxxee8df' chat_name = 'xxxxxxess_Bot' with TelegramClient('sync', api_id, api_hash) as client: # 设置limit=None获取全部消息,或设置足够大的数值如500 for message in client.iter_messages(chat_name, limit=None): if not message.read: # 只打印未读消息 print(message.sender_id, ':', message.text)
- 第二段代码修改:
from telethon.sync import TelegramClient api_id = '#####991' api_hash = 'xxxxxxxxxxxxxxxxxxxxxxxee8df' chat_name = 'xxxxxxess_Bot' phone_number = '+21#########03' client = TelegramClient(phone_number, api_id, api_hash) client.start() chat_entity = client.get_entity(chat_name) async def read_messages(): # 设置limit=500覆盖默认的10条,或limit=None获取全部 messages = await client.get_messages(chat_entity, limit=500) for message in messages: if not message.read: print(message.id, message.text) with client: client.loop.run_until_complete(read_messages()) client.disconnect()
2. 调整消息读取顺序
默认情况下,Telethon按从新到旧获取消息,若未读消息是较早的历史消息,可能被排在后面。可添加reverse=True改为从旧到新读取:
# 第一段代码修改 for message in client.iter_messages(chat_name, limit=None, reverse=True): if not message.read: print(message.sender_id, ':', message.text) # 第二段代码修改 messages = await client.get_messages(chat_entity, limit=500, reverse=True)
3. 同步客户端会话状态
Telethon客户端有时需要先同步对话信息,才能正确识别未读状态。在client.start()后添加client.get_dialogs()强制同步:
client.start() # 同步对话列表,确保未读状态正确 client.get_dialogs() chat_entity = client.get_entity(chat_name)
4. 验证聊天实体正确性
确认chat_name完全正确(区分大小写,检查是机器人的用户名而非昵称)。可先打印chat_entity确认是否指向目标对话:
chat_entity = client.get_entity(chat_name) print(chat_entity) # 输出实体信息,确认ID、用户名是否匹配
5. 检查登录账号一致性
确保Telethon登录的账号(phone_number)和手机端查看未读消息的账号为同一个,否则无法读取对应账号的未读消息。
内容的提问来源于stack exchange,提问作者Khof
相关产品推荐
相关产品推荐

