如何修改Telegram内联机器人已发送消息实现定时内容更新
可行实现方案
核心前提
拿不到编辑消息所需ID的核心原因是:默认情况下Bot不会接收用户选中内联结果的事件推送,需要先手动开启权限:
- 找@BotFather发送
/setinlinefeedback,选中你的目标bot,将反馈接收比例设置为100%,开启后用户选择你返回的内联结果时,Bot就能收到带消息标识的chosen_inline_result事件。
所需ID的获取逻辑
bot.edit_message_text()编辑内联消息不需要凑齐chat_id、message_id,直接用事件里带的inline_message_id即可,这个ID是Telegram为每条内联发送的消息生成的唯一标识,不需要Bot在消息所在的群/私聊里也能完成编辑,是内联场景下最方便的传参方式。
定时逻辑不要直接用time.sleep(),会阻塞Bot的其他请求处理,用内置的threading.Timer做延迟任务即可。
修改后可直接运行的代码
import threading from telebot import types # 原有内联查询处理器 @bot.inline_handler(lambda query: query.query == 'text') def query_text(inline_query): try: r = types.InlineQueryResultArticle('1', 'text', types.InputTextMessageContent('2')) bot.answer_inline_query(inline_query.id, [r]) except Exception as e: print(e) # 新增:监听用户选中内联结果的事件 @bot.chosen_inline_handler(func=lambda chosen: chosen.result_id == '1') def handle_chosen_result(chosen): inline_msg_id = chosen.inline_message_id # 定义延迟执行的编辑逻辑 def edit_after_delay(): try: bot.edit_message_text( inline_message_id=inline_msg_id, text="3" ) except Exception as e: print(f"编辑消息失败: {e}") # 启动2秒定时任务 threading.Timer(2, edit_after_delay).start()
注意事项
- 上述代码通过
result_id == '1'匹配你之前设置的ID为1的内联结果,如果后续新增其他内联项,对应调整匹配规则即可 - 如果出现编辑失败的情况,优先排查三点:是否成功开启inline feedback权限、Bot是否被会话限制/封禁、目标内联消息是否已被用户删除
- 如果必须使用
chat_id+message_id的传参方式,需要Bot在消息所在会话拥有读取消息权限,在消息发送后的new_message更新事件中即可拿到这两个参数,但内联场景下优先使用inline_message_id,适配性更强
内容的提问来源于stack exchange,提问作者Kitecy
相关产品推荐
相关产品推荐

