Python开发Telegram机器人如何实现点击按钮触发对应操作?
实现方案
你的代码存在两个核心问题:
- Inline按钮点击后返回的是
CallbackQuery类型的更新,不会触发你写的普通消息处理函数,你把回调判断逻辑写在消息处理函数里根本不会执行 - 你写的
if(callback_data='press')存在语法错误,单等号是赋值操作,判断相等需要用双等号,且你没有正确获取回调数据的变量
修正实现(以pyTelegramBotAPI库为例)
你需要单独注册回调查询处理函数,分开处理普通消息和按钮点击事件:
import telebot from telebot.types import InlineKeyboardMarkup, InlineKeyboardButton # 替换为你自己的机器人Token BOT_TOKEN = "你的机器人TOKEN" telegram_bot = telebot.TeleBot(BOT_TOKEN) # 处理普通文本消息,发送带按钮的提示 @telegram_bot.message_handler(func=lambda msg: True) def action(msg): chat_id = msg.chat.id keyboard = InlineKeyboardMarkup(inline_keyboard=[ [InlineKeyboardButton(text='Off', callback_data='press')], ]) telegram_bot.send_message(chat_id, 'Click to stop looping', reply_markup=keyboard) # 专门处理Inline按钮的回调事件 @telegram_bot.callback_query_handler(func=lambda call: True) def handle_button_click(call): chat_id = call.message.chat.id # 判断回调数据 if call.data == 'press': # 必须先响应回调,否则客户端按钮会一直处于加载状态 telegram_bot.answer_callback_query(call.id) # 发送对应反馈消息 telegram_bot.send_message(chat_id, 'loop end') if __name__ == '__main__': telegram_bot.infinity_polling()
注意事项
- 回调数据存放在回调对象的
data属性中,不要直接写callback_data取变量 - 收到回调后必须调用
answer_callback_query接口回应用户的点击操作,否则Telegram客户端的按钮会持续显示加载动画,超时后还会弹出报错提示 - 如果用的是python-telegram-bot v13+版本,逻辑一致,只是回调注册和方法名有少量差异,调整对应API调用即可
内容的提问来源于stack exchange,提问作者LatteCat
相关产品推荐
相关产品推荐

