@violpeople

Как менять значение переменной по нажатию кнопки в боте?

Есть кортеж, в котором данные:
items = [
    'Атомик 60|70|80 см', 
    'Болевар 60|70|80 см',
]

Ниже есть функция обработки запроса от категории:
current_item = items[0]
@dp.callback_query_handler(text= 'Ecuador')
async def ecuador(call:types.CallbackQuery):
    kb = InlineKeyboardMarkup(row_width=2)
    
    next = InlineKeyboardButton(text= 'Следующий',callback_data= 'next')

    kb.add(next)

    await bot.send_photo(
    chat_id,
    photo = current_photo,
    caption='Название: '+ current_item,
    reply_markup=kb)

Затем идет обработка запроса "Следующий", в котором надо вызвать следующий пункт из кортежа(это еще и должно постоянно повторяться циклично до конца кортежа!)
@dp.callback_query_handler(text= 'next')
async def row(call:types.CallbackQuery):
    kb = InlineKeyboardMarkup(row_width=2)
    
    next =InlineKeyboardButton(text= 'Следующий',callback_data= 'next')

    kb.add(next)
    await bot.send_photo(
        chat_id,
        photo = current_photo[+1],
        caption ='Название: '+ current_item[+1],
        reply_markup= kb)

caption ='Название: '+ current_item[+1]
Думал сделать так, но не вышло. Помогите пожайлуста, как это сделать и зациклить эту штуку
  • Вопрос задан
  • 118 просмотров
Решения вопроса 1
SoreMix
@SoreMix Куратор тега Python
yellow
Сделать индекс и передавать его в callback_data, это параметр для этого и нужен.

@dp.callback_query_handler(text= 'Ecuador')
async def ecuador(call:types.CallbackQuery):
    kb = InlineKeyboardMarkup(row_width=2)
    
    next = InlineKeyboardButton(text= 'Следующий',callback_data= 'next_1')

    kb.add(next)

    await bot.send_photo(
    chat_id,
    photo = current_photo,
    caption='Название: '+ current_item,
    reply_markup=kb)


@dp.callback_query_handler(lambda c: c.data.startswith('next_'))
async def send_next_item(call: types.CallbackQuery):
    next_index = int(call.data.split('_')[-1])
    kb = InlineKeyboardMarkup(row_width=2)
    next = InlineKeyboardButton(text = 'Следующий',  callback_data = f'next_{next_index+1}')
    kb.add(next)
    await bot.send_photo(
        chat_id,
        photo = items[next_index],
        caption ='Название: '+ items[next_index],
        reply_markup= kb)


Плюс, не забыть проверять соответствует ли индекс длине списка, ну и все же это список, а не кортеж.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы