我尝试使用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)都不会让我获得所需的功能。
答案 0 :(得分:0)
只执行任何可以执行的组的第一个处理程序,同一组的其他处理程序不是。
在你的情况下,commandHandler和conversationHandler在同一个组中,当用户键入命令时,只执行commandHandler而不执行conversationHandler(按照你编写的顺序,每个组只执行一个处理程序(如果它们被触发)它们)。
如果你想同时运行它们,你可以将它们拆分成两个不同的组:
dispatcher.add_handler(whiteboard_handler, -1)
添加' -1'作为参数,你说它属于前一组处理程序。
或者如果您不想在两组中拆分它们,您可以使用flow control,但它应该仅在主分支中合并到目前为止。使用它你必须提高" DispatcherHandlerContinue"例外