You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何通过消息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

火山引擎 最新活动