Python编写的Telegram Bot inline模式无法正常响应问题求助
问题排查与修复
核心问题
当前代码仅注册了普通命令处理器与普通文本消息处理器,未配置inline模式对应的事件处理器,无法捕获inline查询请求,因此不会产生响应。
修复步骤
- 新增
uuid模块导入,用于生成inline查询结果的唯一ID - 新增inline查询处理函数
- 在调度器中注册InlineQueryHandler
修改后完整代码
from telegram.ext import * from datetime import datetime import uuid weekdays = [0, 1, 2, 3, 4] API_KEY = '********************************' # 抽离公共回复逻辑,减少冗余 def get_daily_reply(): name_of_day = datetime.today().weekday() if name_of_day in weekdays: return f"\U00002712 Its a weekday today" else: return f"💎 <b>Its holiday</b>." def start_command(update, context): reply = get_daily_reply() update.message.reply_text(reply, parse_mode='html') def handle_message(update, context): reply = get_daily_reply() update.message.reply_text(reply, parse_mode='html') def inline_query_handler(update, context): # 接收inline查询内容,当前示例不需要用到查询文本可直接忽略 query = update.inline_query.query reply = get_daily_reply() # 构造返回结果 results = [ InlineQueryResultArticle( id=str(uuid.uuid4()), title="今日状态查询", input_message_content=InputTextMessageContent(reply, parse_mode='html') ) ] # 回复inline查询,cache_time设置为0表示不缓存结果,每次查询都实时生成 update.inline_query.answer(results, cache_time=0) def main(): updater = Updater(API_KEY) dp = updater.dispatcher dp.add_handler(CommandHandler('start', start_command)) dp.add_handler(MessageHandler(Filters.text, handle_message)) # 注册inline查询处理器 dp.add_handler(InlineQueryHandler(inline_query_handler)) updater.start_polling() updater.idle() if __name__ == '__main__': main()
补充说明
- 开启inline模式后如果仍无响应,可等待几分钟让BotFather的配置生效
- inline模式的交互逻辑为:输入
@机器人名 关键词后会弹出结果列表,点击结果才会发送到聊天窗口
内容的提问来源于stack exchange,提问作者KawaiKx
相关产品推荐
相关产品推荐

