Telegram 在电报命令中使用正则表达式

Telegram 在电报命令中使用正则表达式,telegram,telegram-bot,python-telegram-bot,Telegram,Telegram Bot,Python Telegram Bot,下面的代码为/start命令添加了一个命令处理程序: dp = updater.dispatcher dp.add_handler(CommandHandler('start', start)) 我想添加一个处理程序,它可以在一个处理程序中处理诸如/download\u video、/download\u music等命令 我想到的是: dp.add_handler(CommandHandler(r'^download', download)) 但它并不像想象的那样工作!相反,当我发送非命令

下面的代码为
/start
命令添加了一个命令处理程序:

dp = updater.dispatcher
dp.add_handler(CommandHandler('start', start))
我想添加一个处理程序,它可以在一个处理程序中处理诸如
/download\u video
/download\u music
等命令

我想到的是:

dp.add_handler(CommandHandler(r'^download', download))
但它并不像想象的那样工作!相反,当我发送非命令字符串
/^download

我应该怎么做?

根据,只能将字符串作为
CommandHandler
参数传递


我建议您将所有命令调用为
/download
,这对用户很友好。

CommandHandler
接受元组/字符串列表作为输入,因此您可以执行以下操作:

dp.add\u handler(CommandHandler('download\u video','download\u music'),download))


dp.add\u处理程序(CommandHandler(['download\u video','download\u music',download])
您可以使用regexp创建自定义处理程序。例如,创建名为regexp_command handler.py的新文件。然后把下面写的代码复制进去。现在可以使用regexp作为处理程序参数。例如,
dispatcher.add_处理程序(RegexpCommandHandler(r'start\u[\ d]+',start))


迟交的答复。一种简单的方法是解析所有文本消息并检查它们是否以匹配的单词开头,即:

from telegram.ext import Updater, CommandHandler, MessageHandler, Filters
import re

def parse_msg(update, context):
    if re.search("^(/test|/something_else)$", update.message.text, re.IGNORECASE | re.DOTALL):
       update.message.reply_text("send your content")

def main():
    updater = Updater("your_token", use_context=True)
    dp = updater.dispatcher
    dp.add_handler(MessageHandler(Filters.text, parse_msg)) # parses all text messages
    updater.start_polling()
    updater.idle()

if __name__ == '__main__':
    main()

  • 通过发送以
    /Test
    /something\u other
    开头的消息进行测试
  • 如果计划在频道中使用此选项,请确保bot具有读取邮件的权限:
    • @Botfater>
      /setprivacy
      ->
      @bot\u name
      ->
      禁用
from telegram.ext import Updater, CommandHandler, MessageHandler, Filters
import re

def parse_msg(update, context):
    if re.search("^(/test|/something_else)$", update.message.text, re.IGNORECASE | re.DOTALL):
       update.message.reply_text("send your content")

def main():
    updater = Updater("your_token", use_context=True)
    dp = updater.dispatcher
    dp.add_handler(MessageHandler(Filters.text, parse_msg)) # parses all text messages
    updater.start_polling()
    updater.idle()

if __name__ == '__main__':
    main()