CommandHandler无法在Telegram bot库中工作

时间:2017-08-02 15:06:56

标签: python telegram telegram-bot python-telegram-bot

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

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

# -*- 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)都不会让我获得所需的功能。

1 个答案:

答案 0 :(得分:0)

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

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

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

 dispatcher.add_handler(whiteboard_handler, -1)

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

或者如果您不想在两组中拆分它们,您可以使用flow control,但它应该仅在主分支中合并到目前为止。使用它你必须提高" DispatcherHandlerContinue"例外