Telegram Python机器人能否通过InlineKeyboardButton传参调用带参命令
实现方案
你当前的写法已经拿到了按钮携带的参数,只需要把参数传递给_command方法即可,有两种常用实现方式:
方案1:给_command增加可选参数
按钮部分代码不需要修改,直接调整回调处理函数和_command方法即可:
- 回调处理函数修改为:
def callback_query_handler(update, context): input = update.callback_query.data if input in ('1', '2'): # 直接将callback_data作为参数传入命令方法 self._command(update, context, arg=input)
- 调整
_command方法适配两种触发场景:
def _command(self, update, context, arg=None): # 优先使用传入的参数,没有传入则从消息指令中提取参数 if not arg: arg = context.args[0] if context.args else None if not arg: update.effective_message.reply_text("缺少执行参数") return # 原有业务逻辑不变,根据arg判断执行对应任务 if arg == '1': # 执行任务1 pass elif arg == '2': # 执行任务2 pass
方案2:模拟命令触发的参数结构(无需修改原有_command)
如果不想改动原有_command的逻辑,可以直接在回调函数中模拟消息触发时的参数结构:
def callback_query_handler(update, context): input = update.callback_query.data if input in ('1', '2'): # 给context.args赋值,和用户发送/command 1时的参数结构完全一致 context.args = [input] self._command(update, context)
内容的提问来源于stack exchange,提问作者jamreg
相关产品推荐
相关产品推荐

