如何通过消息ID获取Telegram消息信息?(基于Telethon库)
如何通过消息ID用Telethon获取消息信息?
当然可以!Telethon完全支持通过消息ID获取对应消息的完整信息,包括你最关心的消息文本,下面我给你具体说怎么实现:
核心方法:get_messages
Telethon的客户端类提供了get_messages方法,你只需要传入消息所在的聊天ID和目标消息ID,就能拿到完整的消息对象,进而提取文本、发送者、时间等所有信息。
代码示例
假设你已经完成了Telethon客户端的初始化(有api_id、api_hash,并且登录成功),可以用这段异步函数来获取消息:
from telethon import TelegramClient # 这里替换成你的客户端初始化信息 client = TelegramClient('my_session', YOUR_API_ID, YOUR_API_HASH) async def fetch_message(chat_id, target_msg_id): try: # 传入聊天ID和消息ID,获取消息对象 message = await client.get_messages(chat_id, ids=target_msg_id) if message: # 提取消息文本 print(f"消息内容:{message.text}") # 还能获取其他常用信息 print(f"发送者ID:{message.sender_id}") print(f"发送时间:{message.date}") # 如果是带说明的媒体消息,用caption获取文字 if message.media: print(f"媒体说明:{message.caption}") return message else: print("没找到对应的消息,可能已经被删除啦") return None except Exception as e: print(f"获取消息时出错:{str(e)}") return None # 调用示例(必须在异步上下文里执行) # await fetch_message(-1001234567890, 12345)
关键注意事项
- 聊天ID是必需的:Telegram的消息ID是「每个聊天内唯一」的,不同聊天(比如两个不同的群组)可能有相同的消息ID,所以必须指定消息所属的聊天ID才能准确定位。
- 处理删除的消息:如果目标消息已经被删除,
get_messages会返回None,所以一定要做判空处理,避免报错。 - 媒体消息的文字:如果是图片、视频这类媒体消息,
message.text会是空的,这时候要通过message.caption获取媒体附带的说明文字。
额外场景:获取被回复的原消息
如果你的需求是在回复消息时获取被回复的原消息(比如拿到reply_to_msg_id),也可以用同样的方法:
# 假设msg是你收到的回复消息对象 if msg.reply_to_msg_id: original_msg = await client.get_messages(msg.chat_id, ids=msg.reply_to_msg_id) if original_msg: print(f"被回复的原消息内容:{original_msg.text}")
内容的提问来源于stack exchange,提问作者Danial




