python - python电报机器人中的回调查询处理程序问题

标签 python python-telegram-bot

在我的代码中,我遇到了 callbackquery 的问题处理程序,当我被击中时 /start命令 下一个 按钮出现,当我点击该按钮时,它会给我回复 您好 ,直到这个输出是正确的。然后当我点击另一个命令时 /help然后 帮助 按钮出现,当我点击 帮助 按钮然后它给了我同样的答复下一个按钮是 您好 .

结论:有没有办法杀老callbackquery处理程序。我找到的方法是返回 Conversationhandler.END来自 callbackquery处理程序函数,但它限制了我的功能,但没有找到预期的输出。

这是我的代码:

 from telegram import InlineKeyboardButton, InlineKeyboardMarkup
 from telegram.ext import Updater, CommandHandler, CallbackQueryHandler, ConversationHandler

 TELEGRAM_HTTP_API_TOKEN = 'token'

 FIRST, SECOND, HELP = range(3)

 def start(bot, update):
        keyboard = [
            [InlineKeyboardButton(u"Next", callback_data=str(FIRST))]
        ]
        reply_markup = InlineKeyboardMarkup(keyboard)
        update.message.reply_text(
            u"Start handler, Press next",
            reply_markup=reply_markup
        )
        return FIRST

 def first(bot, update):
        query = update.callback_query
        #reply_markup = InlineKeyboardMarkup(keyboard)
        bot.send_message(chat_id=query.message.chat_id,
                         text='hi')

 def help(bot,update):
        keyboard = [
            [InlineKeyboardButton(u"HELP", callback_data=str(HELP))]
        ]
        reply_markup = InlineKeyboardMarkup(keyboard)
        update.message.reply_text(
            u"Help handler, Press button",
            reply_markup=reply_markup
        )

        return HELP

 def myhelp(bot,update):
        query = update.callback_query
        bot.send_message(chat_id=query.message.chat_id,
                         text='help')

 updater = Updater(TELEGRAM_HTTP_API_TOKEN)

 conv_handler = ConversationHandler(
        entry_points=[CommandHandler('start', start)],
        states={
            FIRST: [CallbackQueryHandler(first)]
        },
        fallbacks=[CommandHandler('start', start)]
    )
 conv_handler1=ConversationHandler(
        entry_points=[CommandHandler('help',help)],
        states={
            HELP: [CallbackQueryHandler(myhelp)]
        },
        fallbacks=[CommandHandler('help',help)]
    )

 updater.dispatcher.add_handler(conv_handler)
 updater.dispatcher.add_handler(conv_handler1)

 updater.start_polling()

 updater.idle()

This is code screenshot output for more detail

欢迎任何形式的帮助。

最佳答案

您需要make your bot persistent (所以状态不要迷路),add error handler (要知道是否失败)和回退路由(如果没有路由匹配)。
在这种情况下,您将知道出了什么问题以及出在哪里。

关于python - python电报机器人中的回调查询处理程序问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48766265/

相关文章:

python - 如何通过电报机器人发送 PIL 图像而不将其保存到文件中

python-telegram-bot错误 'CallbackContext'对象没有属性 'message'

python - Telegram 机器人在回复一次后不执行任何操作

python - 如何在特定时间之间以固定间隔在 python 中运行任务?

python - “CityListViewSet”应包含 `serializer_class` 属性,或覆盖 `get_serializer_class()` 方法

bots - 假装 Telegram Bot 正在打字?

python - 带有 SSL 的 Telegram bot api 和 Webhook

python - 使用等高线在三个平面上绘制 3D 图的投影

python - 用该组中的第一个非空值填充该组中的所有值

python - 如何使用OCR提取指定位置的文本信息?