@Digering

Как очистить callback_query в aiogram 3?

я создаю телеграмм бота и мне приходится использовать огромное количество кнопок в телеграмме, и по нажатию кнопок, они должны заменяться другими кнопками, но по всей видимости callback_query переполняется и выскакивает ошибка
Cause exception while process update id=XXX by bot id=XXX
TelegramBadRequest: Telegram server says - Bad Request: BUTTON_DATA_INVALID


def creat_builder(new_text_ing):
    builder = []
    if new_text_ing:
        text_ing = new_text_ing
        text_ing.append("Назад")
    else:
        text_ing = select_database() # получаю массив текста с базы данных
        text_ing.append("Закончить")

    print(text_ing)

    for i in text_ing:
        if i == "Закончить":
            builder.append([(types.InlineKeyboardButton(text=i,callback_data="end"))])
        elif i == "Назад":
            builder.append([(types.InlineKeyboardButton(text=i,callback_data="close"))])
        else:
            if int(i[1]) == 1:
                builder.append([(types.InlineKeyboardButton(text='✅ ' +i[0], callback_data=f"category_{i[0]}_{i[1]}"))])
            else:
                builder.append([(types.InlineKeyboardButton(text=i[0],callback_data=f"category_{i[0]}_{i[1]}"))])
    return builder

def get_keyboard(new_text_ing = None):
    keyboard = types.InlineKeyboardMarkup(inline_keyboard=creat_builder(new_text_ing))
    return keyboard

@dp.message(Command("category"))
async def cmd_category(message: types.Message):

    await message.answer("Выберете нужную вам категорию",
        reply_markup=get_keyboard())
    global x
    x = message.message_id

@dp.callback_query(F.data.startswith("category_"))
async def send_random_value(callback_query: types.CallbackQuery):
    action = callback_query.data.split("_")[1]
    action_2 = int(callback_query.data.split("_")[2])

    link =[]
    text_ing = select_database()
    for i in text_ing:
        if i[0] == action:
            link = i[2]

    text_ing = select_database(link)# получаю массив текста с базы данных
    print(text_ing)

    await bot.edit_message_reply_markup( # тут возникает ошибка
        callback_query.message.chat.id,
        callback_query.message.message_id,
        reply_markup=get_keyboard(text_ing)
        )
  • Вопрос задан
  • 273 просмотра
Решения вопроса 1
@chemdev
Data to be sent in a callback query to the bot when button is pressed, 1-64 bytes

Из документации

Вероятно, ты переложил на callback_data функцию хранения состояния, для этого в aiogram есть FSM (Вот ссылка на хороший, на мой взгляд, гайд)
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
Wispik
@Wispik
Просто где-то callback_data не валидная. Добавь printы в функцию creat_builder и посмотри значения callback_data
global x
x = message.message_id

Ты же понимаешь, если ботом будут пользоваться больше одного человека, то в x будет записываться категория последнего юзера, кто ее выбрал.
UPD: Ну да, как уже ответили, это скорее всего из-за размера строки callback_data
Ответ написан
Ваш ответ на вопрос

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

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