Telegram bot ConversationHandler 忽略回退
Telegram bot ConversationHandler ignores fallbacks
我的 Telegram 机器人 (python-telegram-bot) 有问题。我已经制作了 ConversationHandler,但“回退”不起作用。 Bot 只是忽略了“/stop”命令。当我发送“/stop”时,机器人会向我发送“First handler”而不是“GoodBye”。怎么了?
import os
import telegram
from telegram.ext import (ConversationHandler,
CommandHandler,
MessageHandler,
Filters,
Updater
)
from dotenv import load_dotenv
load_dotenv()
TELEGRAM_TOKEN = os.environ['TELEGRAM_TOKEN']
USER_ID = os.environ['USER_ID']
bot = telegram.Bot(token=TELEGRAM_TOKEN)
updater = Updater(token=TELEGRAM_TOKEN)
def start(update, context):
context.bot.send_message(chat_id=update.effective_chat.id,
text='hi')
return 1
def stop(update, context):
context.bot.send_message('Good Bye')
return ConversationHandler.END
def first_handler(update, context):
context.bot.send_message(chat_id=update.effective_chat.id,
text='First handler')
return 1
conv_handler = ConversationHandler(
entry_points=[CommandHandler('Start', start)],
states={
1: [MessageHandler(Filters.text, first_handler,
pass_user_data=True)],
},
fallbacks=[CommandHandler('stop', stop)]
)
dispatcher = updater.dispatcher
dispatcher.add_handler(conv_handler)
updater.start_polling()
updater.idle()
根据 documentation,MessageHandler(Filters.text, ...)
正在处理 所有 条短信,包括 /stop 命令。但是,仅当上述处理程序中的 none 能够处理消息时才会触发回退。
您可以从 MessageHandler 中排除命令:
MessageHandler(
Filters.text & (~ Filters.command),
first_handler,
)
记录了组合过滤器的语法 here。
我的 Telegram 机器人 (python-telegram-bot) 有问题。我已经制作了 ConversationHandler,但“回退”不起作用。 Bot 只是忽略了“/stop”命令。当我发送“/stop”时,机器人会向我发送“First handler”而不是“GoodBye”。怎么了?
import os
import telegram
from telegram.ext import (ConversationHandler,
CommandHandler,
MessageHandler,
Filters,
Updater
)
from dotenv import load_dotenv
load_dotenv()
TELEGRAM_TOKEN = os.environ['TELEGRAM_TOKEN']
USER_ID = os.environ['USER_ID']
bot = telegram.Bot(token=TELEGRAM_TOKEN)
updater = Updater(token=TELEGRAM_TOKEN)
def start(update, context):
context.bot.send_message(chat_id=update.effective_chat.id,
text='hi')
return 1
def stop(update, context):
context.bot.send_message('Good Bye')
return ConversationHandler.END
def first_handler(update, context):
context.bot.send_message(chat_id=update.effective_chat.id,
text='First handler')
return 1
conv_handler = ConversationHandler(
entry_points=[CommandHandler('Start', start)],
states={
1: [MessageHandler(Filters.text, first_handler,
pass_user_data=True)],
},
fallbacks=[CommandHandler('stop', stop)]
)
dispatcher = updater.dispatcher
dispatcher.add_handler(conv_handler)
updater.start_polling()
updater.idle()
根据 documentation,MessageHandler(Filters.text, ...)
正在处理 所有 条短信,包括 /stop 命令。但是,仅当上述处理程序中的 none 能够处理消息时才会触发回退。
您可以从 MessageHandler 中排除命令:
MessageHandler(
Filters.text & (~ Filters.command),
first_handler,
)
记录了组合过滤器的语法 here。