首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >CommandHandler在电报机器人库中不起作用

CommandHandler在电报机器人库中不起作用
EN

Stack Overflow用户
提问于 2017-08-02 23:06:56
回答 1查看 1.6K关注 0票数 1

我尝试在python-telegram-bot==7.0.1中使用CommandHandler,但是,它没有做我期望的任何事情。

实际上,我无法获得任何状态:

代码语言:javascript
复制
# -*- coding: utf-8 -*-

from __future__ import unicode_literals, division, print_function
import logging
import telegram
from telegram.ext import CommandHandler, CallbackQueryHandler, MessageHandler, ConversationHandler, RegexHandler
from telegram.ext import Updater, Filters

# Set up Updater and Dispatcher

updater = Updater(TOKEN)
updater.stop()
dispatcher = updater.dispatcher

# Add logging

logging.basicConfig(format="%(asctime)s - %(name)s - %(levelname)s - %(message)s", level=logging.WARNING)

TIME, NOTIME = range(2)


def whiteboard(bot, update):
    print(1)
    bot.sendMessage(text="Send update", chat_id=update.message.chat.id)
    bot.sendMessage(text=update.message.text, chat_id=update.message.chat.id)
    print(type(TIME))
    return TIME


def whiteboard_update(bot, update):
    print(2)
    bot.sendMessage(text=update.message.text, chat_id=update.message.chat.id)
    return TIME


def cancel(bot, update):
    print(3)
    bot.sendMessage(text=update.message.text, chat_id=update.message.chat.id)
    bot.sendMessage(text="Это не время, а что то еще...", chat_id=update.message.chat.id)
    return NOTIME


def error(bot, update, error):
    logging.critical('Update "%s" caused error "%s"' % (update, error))


def main():

    whiteboard_handler = CommandHandler("whiteboard", whiteboard)
    dispatcher.add_handler(whiteboard_handler)

    conv_handler = ConversationHandler(
        entry_points=[CommandHandler("whiteboard", whiteboard)],
        states={
            TIME: [RegexHandler('^[0-9]+:[0-5][0-9]$', whiteboard_update), CommandHandler('cancel', cancel)],
            NOTIME: [MessageHandler(Filters.text, cancel), CommandHandler('cancel', cancel)]
        },
        fallbacks=[CommandHandler('cancel', cancel)],
        )
    dispatcher.add_handler(conv_handler)

    # log all errors
    updater.dispatcher.add_error_handler(error)

    # Poll user actions

    updater.start_polling()
    updater.idle()


if __name__ == '__main__':
    main()

因此,/whiteboard返回它必须返回的内容,但是任何文本和/或时间(例如1:11)都不能使我获得所需的函数。

EN

回答 1

Stack Overflow用户

发布于 2017-08-03 02:54:45

只执行可以执行的任何组的第一个处理程序,而同一组的其他处理程序则不执行。

在您的示例中,commandHandler和conversationHandler在同一个组中,当用户键入命令时,只执行commandHandler,而不执行conversationHandler (每个组中只有一个处理程序按照您编写的顺序执行(如果它们被触发))。

如果你想同时运行它们,你可以将它们分成两个不同的组,这样做:

代码语言:javascript
复制
 dispatcher.add_handler(whiteboard_handler, -1)

添加'-1‘作为参数,你是说它属于上一组处理程序。

或者,如果您不想将它们拆分到两个组中,您可以使用flow control,但到目前为止,它应该只在主分支中合并。要使用它,您必须引发"DispatcherHandlerContinue“异常

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45464536

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档