Как получить конкретное c действие для каждого InlineKeyboardButton в боте Telegram, используя Python? - PullRequest
0 голосов
/ 25 марта 2020

так что я действительно новичок в программировании и изучаю что-то каждый день.

Я нашел где-то здесь код InlineKeyboard и изменил его, чтобы он корректно работал с телеграммой (используя python -telegram-bot).

Теперь я пытаюсь понять, как сделать конкретное действие c, например, когда пользователь нажимает на кнопку «Подменю 1-1», он должен ответить текстовым сообщением или командой, и другое действие для «Подменю 1-2».

У меня есть попытался определить callback_data 'm1_1' с CallbackQueryHandler, но все еще безуспешно.

Пожалуйста, посмотрите код ниже:

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()

peace & love:] Решено ** Похоже, программа распознала 'm1 'и' m1_1 'в качестве одних и тех же данных обратного вызова, я думаю, они похожи, когда я изменил' m1_1 'на' p3 ', это сработало

...