Как сделать бесконечную цепочку callback ответов в telebot?
У нас есть глобальный словарь, в котором содержится объект и его количество. По команде /list все что есть в словаре выводится в списке инлайн кнопок с выбором объекта. Выбрав кнопку появляется объект и его количество, которое меняется посредством кнопок 'Добавить' и 'Убавить'. Все существующие кнопки меняются через edit_message_text.
Как зациклить все это? Как только я в callback_data ввожу функции, они при каждом выводе кнопок 'Добавить' и 'Убавить' инициализируются, хотя должны только после нажатия одной из кнопок
Код:
def plus(key):
global dct
dct[key] += 1
return f'{key} | кол-во: {dct[key]}'
def minus(key):
global dct
if dct[key] == 1:
return 'Нельзя выставить число меньше нуля'
dct[key] -= 1
return f'{key} | кол-во: {dct[key]}'
@bot.message_handler(commands=['list'])
def get_list(message):
keyboard = types.InlineKeyboardMarkup()
for key, value in dct.items():
keyboard.add(types.InlineKeyboardButton(f'{key} | кол-во: {value}', callback_data=f'{key} | кол-во: {value}'))
bot.send_message(message.chat.id, 'Список объектов:', reply_markup=keyboard)
@bot.callback_query_handler(func=lambda call: True)
def edit_message(call):
key = call.data.split()
if call.message:
new_keyboard = types.InlineKeyboardMarkup()
plus_button = types.InlineKeyboardButton('Добавить', callback_data=plus(key[0]))
minus_button = types.InlineKeyboardButton('Убавить', callback_data=minus(key[0]))
new_keyboard.row(plus_button, minus_button)
bot.edit_message_text(chat_id=call.message.chat.id, message_id=call.message.message_id, text=call.data, reply_markup=new_keyboard)