@DRooX
Моё имя Даниил, но друзья зовут меня говнокодить

Как сделать многослойное меню из inline кнопок в PyTelegramBotApi?

Здравствуйте. При разработке бота столкнулся с проблемой. Дело в том что я не знаю каким образом можно взаимодействовать с callback.data из двух разных меню.
У меня есть keyboard('cypher') с разметкой выбора шрифта, и keyboard('action') с выбором действия. После получения данных с клавиатур, их нужно единожды применить. Каким образом можно это сделать?

@bot.message_handler(content_types=['text'])
def aaa(message):
    mtext = message.text
    chatid = message.chat.id
    global user
    user = User(chatid, mtext)
    bot.send_message(chatid, mtext, reply_markup=keyboard('cypher'))

@bot.callback_query_handler(func=lambda call: True)
def callback(call):
    cypher = Cypher()
    if call.data in ('caesar', 'affine', 'base64', 'atbash'):
        cypher.set_cypher(call.data)
        print("set cypher " + cypher.get_cypher())
    else:
        cypher.set_action(call.data)
        print("set action " + cypher.get_action())

    try:
        bot.edit_message_reply_markup(user.chatid, call.message.message_id, reply_markup=keyboard('action'))
        print('changed')
    except:
        pass

    try:
        if cypher.get_cypher() == 'base64':
            text = base64.encrypt(user.mtext) if cypher.get_action() == 'encode' else base64.decrypt(user.mtext)
        elif cypher.get_cypher() == 'atbash' and (cypher.get_action() == 'encode' or cypher.get_action() == 'decode'):
            text = atbash.do_atbash(user.mtext)
        bot.edit_message_text(chat_id=user.chatid, message_id=call.message.message_id, text=text)
    except:
        pass


Как видите, я пытаюсь использовать классы, но проблем стало ещё больше.
Заранее спасибо за ответ
  • Вопрос задан
  • 342 просмотра
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы