如何通过Telegram Python API获取消息的message_id
获取指定聊天/频道消息message_id的几种常用方法
针对你用pyTelegramBotAPI开发的场景,常用的获取方式分三类:
1. 实时监听新消息自动获取
这是最常用的场景,如果你需要转发刚产生的新消息,直接在对应的消息处理函数中从消息对象的message_id属性取值即可:
# 示例:自动转发源频道@from的所有新消息到目标频道@send_to @bot.channel_post_handler(chat_id='@from') def auto_forward(post): # post就是源频道刚产生的消息对象,直接拿message_id bot.forward_message('@send_to', '@from', post.message_id)
如果是监听普通群聊/私人聊天的消息,把channel_post_handler换成message_handler即可。
2. 手动获取单条历史消息的ID
如果你需要转发已经发送过的旧消息,可以用两种方式拿ID:
- 手动查询:打开Telegram桌面端,找到目标消息,右键选择「复制消息链接」,链接末尾的数字就是该消息的message_id。比如链接格式为
t.me/频道名/123,对应的message_id就是123 - 代码批量查询:调用
get_chat_history拉取历史消息列表,筛选你需要的消息对应的ID:
# 拉取@from频道最近20条消息,输出每条的ID和内容 recent_msgs = bot.get_chat_history(chat_id='@from', limit=20) for msg in recent_msgs: print(f"ID: {msg.message_id} | 内容:{msg.text if msg.text else '[非文本消息]'}")
3. 命令触发时动态获取ID
针对你写的/forward命令场景,常用的交互逻辑是让用户回复要转发的消息后再触发命令,直接取被回复消息的ID即可:
@bot.message_handler(commands=['forward']) def forward_handler(message): # 校验用户是否回复了消息 if not message.reply_to_message: bot.reply_to(message, "请先回复要转发的消息,再执行/forward命令") return # 取被回复消息的ID target_msg_id = message.reply_to_message.message_id bot.forward_message(chat_id='@send_to', from_chat_id='@from', message_id=target_msg_id)
注意:机器人必须拥有源聊天/频道的管理员权限,且开启读取消息的权限,才能正常获取消息ID和转发消息。
内容的提问来源于stack exchange,提问作者Constant
相关产品推荐
相关产品推荐

