如何为Python电报Bot使用处理程序

时间:2019-08-17 00:39:31

标签: python python-3.x telegram python-telegram-bot

这是我第一次制作电报机器人,尽管文档内容非常丰富,但是使用Updater / Dispatcher机制使我无法正常工作。

我尝试遵循在网上找到的多个教程,但是由于某种原因,我不明白为什么从未真正调用过我的处理程序。

我发现让Dispatcher实际调用我的函数的唯一方法是在add_handler_call中添加一个参数,该参数在我发现的各种教程中均未使用: dispatcher.add_handler(CommandHandler("my", bot.handle_my_cmd))不起作用,但dispatcher.add_handler(CommandHandler("my", Filters.all, bot.handle_my_cmd))起作用,但仅适用于命令,不适用于常规消息。

class MyBot(Bot):

    def __init__(self, token):
        super(MyBot, self).__init__(token)

    def handle_message(self, update):
        print(f"Update: {update}")

    def handle_my_cmd(self, update):
        chat = update['chat']['id']
        self.send_message(chat, f"My bot")

def register_handlers(bot, dispatcher):
    dispatcher.add_handler(CommandHandler("my", bot.handle_my_cmd))
    dispatcher.add_handler(MessageHandler(Filters.all, bot.handle_message))


def main():
    mybot = MyBot(config['telegram_token']) # config is created elsewhere
    updater = Updater(bot=mybot)
    dispatcher = updater.dispatcher
    register_handlers(mybot, dispatcher)
    updater.start_polling(clean=True)
    updater.idle()


if __name__ == "__main__":
    main()

我在做什么错而导致我的函数无法调用?

为什么添加此过滤器参数只能解决命令问题?

预先感谢

0 个答案:

没有答案