我如何让我的Bot回应参数?

Mav*_*ave 9 telegram telegram-bot

所以我构建了一个Telegram bot,它可以接收以下命令:

  • /list
  • /info 123

这很好用,因为我可以捕获/info并传递其他参数作为int.但是,遗憾的是,电报客户并不认为这/info 123是一个完整的命令,而只是/info部分.有没有办法让它将整个命令识别为命令?

我试过Markdown-it:[/info 123](/info 123)但是没有快乐.这可能吗?

Mav*_*ave 10

我已经用同样的问题联系了@BotSupport,他/他/它迅速回答了以下答案:

嗨,目前无法突出显示命令的参数.无论如何,如果您使用正确的自定义键盘,您可以找到解决方法;) - @BotSupport

自定义键盘可能是某人的选择,但不适合我.我所采用的解决方案是将命令作为/info123.当机器人收到所有/命令时,我会检查收到的命令info是否以,如果是,我将删除该info部分.我将剩余的字符串/ int转换为参数,并将其传递给相关命令.

  • @ortonomy 不,你没有。向 BotFather 注册命令只会在有人键入“/”时使它们在用户界面上显示为列表,但您可以实现未列出的命令 - 只是不要在 BotFather 中注册它们。不管怎样,你的机器人都会回答命令。 (2认同)

Moe*_* MH 7

如果您打算将123用作命令的参数,info并且您碰巧使用了python-telegram-bot,那么您可以这样做:

dispatcher.add_handler(CommandHandler('hello', SayHello, pass_args=True))
Run Code Online (Sandbox Code Playgroud)

根据文档:pass_args确定是否应将传递给命令的参数作为关键字参数传递给处理程序args。它将包含一个字符串列表,它是在单个或连续空白字符上拆分命令之后的文本。默认值为假。

  • 我明白你的意思 - 但是如果你向用户提供反馈,并提供命令列表,则无法突出显示或使完整的 `/info 123` 可点击。它只是被突出显示并因此发送的`/info`。 (2认同)

Sum*_*ran 6

您可以使用RegexHandler()来执行此操作。

这是一个例子

def info(bot, update):
  id = update.message.text.replace('/info_', '')
  update.message.reply_text(id, parse_mode='Markdown')


def main():
  updater = Updater(TOKEN)
  updater.dispatcher.add_handler(RegexHandler('^(/info_[\d]+)$', info))
  updater.start_polling()
Run Code Online (Sandbox Code Playgroud)

用法

命令/info_120将返回120
并将/info_007返回007

对于新版本的更新
,您可以改用此方法!

MessageHandler(filters.Regex(r'^(/info_[\d]+)$'), info)
Run Code Online (Sandbox Code Playgroud)