python - 如何使用 Python 为 Telegram 机器人中的每个 InlineKeyboardButton 获取特定操作?
问题描述
所以我对编程和每天学习的东西真的很陌生。
我在这里某处找到了一个 InlineKeyboard 代码并对其进行了更改,以便它可以在电报上正常工作(使用 python-telegram-bot)。
现在我正在尝试了解如何进行特定操作,例如,当用户按下“子菜单 1-1”按钮时,它应该回复短信或命令,以及“子菜单 1-2”的不同操作。
我试图用 CallbackQueryHandler 定义'm1_1' callback_data 但仍然没有成功。
请看下面的代码:
import logging
from telegram.ext import Updater
from telegram.ext import CommandHandler, CallbackQueryHandler
from telegram import InlineKeyboardButton, InlineKeyboardMarkup
logging.basicConfig(format='%(asctime)s - %(name)s - %(levelname)s - %(message)s',
level=logging.INFO)
logger = logging.getLogger(__name__)
def start(update, context):
update.message.reply_text(main_menu_message(),
reply_markup=main_menu_keyboard())
def main_menu(update, context):
query = update.callback_query
context.bot.edit_message_text(chat_id=query.message.chat_id,
message_id=query.message.message_id,
text=main_menu_message(),
reply_markup=main_menu_keyboard())
def first_menu(update, context):
query = update.callback_query
context.bot.edit_message_text(chat_id=query.message.chat_id,
message_id=query.message.message_id,
text=first_menu_message(),
reply_markup=first_menu_keyboard())
def second_menu(update, context):
query = update.callback_query
context.bot.edit_message_text(chat_id=query.message.chat_id,
message_id=query.message.message_id,
text=second_menu_message(),
reply_markup=second_menu_keyboard())
def third_menu(update, context):
query = update.callback_query
context.bot.edit_message_text(chat_id=query.message.chat_id,
message_id=query.message.message_id,
text=third_menu_message(),
reply_markup=third_menu_keyboard())
def first_submenu(update, context):
pass
def second_submenu(update, context):
pass
def third_submenu(update, context):
pass
def main_menu_keyboard():
keyboard = [[InlineKeyboardButton('Option 1', callback_data='m1')],
[InlineKeyboardButton('Option 2', callback_data='m2')],
[InlineKeyboardButton('Option 3', callback_data='m3')]]
return InlineKeyboardMarkup(keyboard)
def first_menu_keyboard():
keyboard = [[InlineKeyboardButton('Submenu 1-1', callback_data='m1_1')],
[InlineKeyboardButton('Submenu 1-2', callback_data='m1_2')],
[InlineKeyboardButton('Main menu', callback_data='main')]]
return InlineKeyboardMarkup(keyboard)
def second_menu_keyboard():
keyboard = [[InlineKeyboardButton('Submenu 2-1', callback_data='m2_1')],
[InlineKeyboardButton('Submenu 2-2', callback_data='m2_2')],
[InlineKeyboardButton('Main menu', callback_data='main')]]
return InlineKeyboardMarkup(keyboard)
def third_menu_keyboard():
keyboard = [[InlineKeyboardButton('Submenu 3-1', callback_data='m3_1')],
[InlineKeyboardButton('Submenu 3-2', callback_data='m3_2')],
[InlineKeyboardButton('Main menu', callback_data='main')]]
return InlineKeyboardMarkup(keyboard)
def main_menu_message():
return 'Choose the option in main menu:'
def first_menu_message():
return 'Choose the submenu in first menu:'
def second_menu_message():
return 'Choose the submenu in second menu:'
def third_menu_message():
return 'Choose the submenu in third menu:'
def main():
updater = Updater('TOKEN', use_context=True)
ud = updater.dispatcher
ud.add_handler(CommandHandler('start', start))
ud.add_handler(CallbackQueryHandler(main_menu, pattern='main'))
ud.add_handler(CallbackQueryHandler(first_menu, pattern='m1'))
ud.add_handler(CallbackQueryHandler(second_menu, pattern='m2'))
ud.add_handler(CallbackQueryHandler(third_menu, pattern='m3'))
ud.add_handler(CallbackQueryHandler(first_submenu,
pattern='m1_1'))
ud.add_handler(CallbackQueryHandler(second_submenu,
pattern='m2_1'))
ud.add_handler(CallbackQueryHandler(third_submenu,
pattern='m3_1'))
updater.start_polling()
updater.idle()
if __name__ == '__main__':
main()
和平与爱 :] 已解决** 看起来程序将“m1”和“m1_1”识别为相同的回调数据,我想它是相似的,当我将“m1_1”更改为“p3”时它起作用了
解决方案
推荐阅读
- macos - 如何在 JXA 中获取(地址 id 包含 addressId 的人)?
- scala - 递归函数的优化
- python - beautifulsoup 错过了网页的其余部分
- python - 如何从两个现有的单索引数据帧创建多索引数据帧?
- javascript - Uncaught Invariant Violation:重新渲染太多。React 限制渲染次数以防止无限循环
- java - Java Bresenham 线到圆周上的点
- model - 添加状态“待批准”Odoo 12
- r - R中组的每变化增加一
- python - 单个数据框单元格中系列的最大值
- swing - 如何删除 Swing 的 JTextPane 中链接标记内的图像周围的边框?