@Usenovich

Цикл для обработчика кнопок?

Доброго времени суток. Такой вопрос, я написал телеграмм бот (TELEBOT), проблема в том что есть 58 inline кнопок которые при нажатий на них каждый должны выводить соответствующую спарсенную инфу. Результаты парсера сохранены в txt фалах (58 файлов для каждой кнопки) надо написать цикл что бы не писать для каждого отдельно.
if call.data == '1':    
        markup = InlineKeyboardMarkup()
        bttn_contact = (InlineKeyboardButton(text = " Связаться с менеджером", callback_data = "contact")) 
        markup.add(bttn_contact)
        bttn_home = (InlineKeyboardButton(text = " Начало", callback_data = "home"))
        markup.add(bttn_home)

        with open('data/0_info.txt', 'r', encoding = "utf-8") as file:
           content = file.read()
        if len(content) > 4095:
            for x in range(0, len(content), 4095):
                bot.send_message(call.message.chat.id,content[x:x+4095],reply_markup=markup)
        else:
             bot.send_message(call.message.chat.id,content,reply_markup=markup)

Вот, это мой обработчик для первой кнопки (да таких еще 57, да это го*но код) у меня вариантов просто не осталось попробовал много чего но не сработало. Я мог написать весь код но до этого обработчика там еще таких обработчиков и кнопок очень много (помимо этих 58) думал много воды будет. Если написал слишком много или что то еще СОРИ это мой первый вопрос и опыта у меня не так много)))
  • Вопрос задан
  • 100 просмотров
Решения вопроса 1
Vindicar
@Vindicar
RTFM!
def handle_button(call_data: str):
        try:
            fileid = int(call_data) - 1  # определяем id файла по значению call_data
        except ValueError:
            return
        markup = InlineKeyboardMarkup()
        bttn_contact = (InlineKeyboardButton(text = " Связаться с менеджером", callback_data = "contact")) 
        markup.add(bttn_contact)
        bttn_home = (InlineKeyboardButton(text = " Начало", callback_data = "home"))
        markup.add(bttn_home)
        with open(f'data/{fileid}_info.txt', 'r', encoding = "utf-8") as file:
           content = file.read()
        # if тут не нужен, сработает и без него.
        for x in range(0, len(content), 4095):
            bot.send_message(call.message.chat.id,content[x:x+4095],reply_markup=markup)

Ну а в обработчике просто дергаешь handle_button(call.data).
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы
30 апр. 2024, в 15:24
3000 руб./за проект
30 апр. 2024, в 15:11
500 руб./в час
30 апр. 2024, в 15:11
5000 руб./за проект