Пишу телеграм бот на Python. Библиотека Telebot. Уже создал меню с большим количеством кнопок, функционал которого заключается в том, что при нажатии на конкретную кнопку её текст изменяется на тот же текст с галочкой. При повторном нажатии всё работает с точностью до наоборот, то есть галочка с текста убирается. Так же когда на какой то из кнопок есть смайлик галочки, появляется кнопка далее которая сохраняет выбор и в дальнейшем будет переводить в следующее меню. Кнопка назад отвечает за возврат к стартовому меню. Так же присутствуют ещё две кнопки которые ни к чему пока что не привязаны. Это Четные и Нечетные числа. Нужно сделать так что бы при нажатии на четные числа галочки появлялись на всех четных числах, при повторном нажатии галочки со всех кнопок должны убираться. Так же не мало важно отметить что кнопки должны сохранить свой функционал, то есть если человек нажал на кнопку четные числа что бы он потом мог вручную убирать галочки с нужных кнопок. То же самое нужно сделать с нечетными числами. Так же необходимо сделать так что бы все кнопки с галочками сохранялись в множество Number_selection. Может кто то сможет помочь
import telebot
from telebot import types
from telegram import InlineKeyboardButton, InlineKeyboardMarkup
bot = telebot.TeleBot("Token")
number_selection = set()
@bot.callback_query_handler(func=lambda call: True)
def callback_query(call):
if call.data == 'done1':
save_selection(call.message.chat.id, number_selection)
markup=types.InlineKeyboardMarkup()
btn1=(types.InlineKeyboardButton('1', callback_data='1'))
btn2=(types.InlineKeyboardButton('2', callback_data='2'))
btn3=(types.InlineKeyboardButton('3', callback_data='3'))
markup.row(btn1, btn2, btn3)
btn4=(types.InlineKeyboardButton('4', callback_data='4'))
btn5=(types.InlineKeyboardButton('5', callback_data='5'))
btn6=(types.InlineKeyboardButton('6', callback_data='6'))
markup.row(btn4, btn5, btn6)
btn7=(types.InlineKeyboardButton('7', callback_data='7'))
btn8=(types.InlineKeyboardButton('8', callback_data='8'))
btn9=(types.InlineKeyboardButton('9', callback_data='9'))
markup.row(btn7, btn8, btn9)
btn10=(types.InlineKeyboardButton('10', callback_data='10'))
btn11=(types.InlineKeyboardButton('11', callback_data='11'))
btn12=(types.InlineKeyboardButton('12', callback_data='12'))
markup.row(btn10, btn11, btn12)
btn13=(types.InlineKeyboardButton('13', callback_data='13'))
btn14=(types.InlineKeyboardButton('14', callback_data='14'))
btn15=(types.InlineKeyboardButton('15', callback_data='15'))
markup.row(btn13, btn14, btn15)
btn16=(types.InlineKeyboardButton('16', callback_data='16'))
btn17=(types.InlineKeyboardButton('17', callback_data='17'))
btn18=(types.InlineKeyboardButton('18', callback_data='18'))
markup.row(btn16, btn17, btn18)
btn19=(types.InlineKeyboardButton('19', callback_data='19'))
btn20=(types.InlineKeyboardButton('20', callback_data='20'))
btn21=(types.InlineKeyboardButton('21', callback_data='21'))
markup.row(btn19, btn20, btn21)
btn22=(types.InlineKeyboardButton('22', callback_data='22'))
btn23=(types.InlineKeyboardButton('23', callback_data='23'))
btn24=(types.InlineKeyboardButton('24', callback_data='24'))
markup.row(btn22, btn23, btn24)
btn25=(types.InlineKeyboardButton('25', callback_data='25'))
btn26=(types.InlineKeyboardButton('26', callback_data='26'))
btn27=(types.InlineKeyboardButton('27', callback_data='27'))
markup.row(btn25, btn26, btn27)
btn28=(types.InlineKeyboardButton('28', callback_data='28'))
btn29=(types.InlineKeyboardButton('29', callback_data='29'))
btn30=(types.InlineKeyboardButton('30', callback_data='30'))
markup.row(btn28, btn29, btn30)
btn31=(types.InlineKeyboardButton('31', callback_data='31'))
btn32=(types.InlineKeyboardButton('32', callback_data= '32' ))
btn33=(types.InlineKeyboardButton('33', callback_data='33'))
markup.row(btn31, btn32, btn33)
markup.add(types.InlineKeyboardButton('Четные числа', callback_data='Четные числа'))
markup.add(types.InlineKeyboardButton('Нечетные числа', callback_data='Нечетные числа'))
markup.add(types.InlineKeyboardButton('⬅️ Назад', callback_data= 'back1' ))
bot.send_message(call.message.chat.id, "Выберите число", reply_markup=markup)
elif call.data == 'back':
start(call.message)
number_selection.clear()
elif call.data in ['1', '2', '3', '4', '5', '6', '7', '8',
'9', '10', '11', '12', '13', '14', '15', '16', '17',
'18', '19', '20', '21', '22', '23', '24', '25',
'26', '27', '28', '29', '30', '31', '32', '33', ]:
if call.data in number_selection:
number_selection.remove(call.data)
else:
number_selection.add(call.data)
markup = types.InlineKeyboardMarkup(row_width=3)
buttons = []
for btn_text in ['1', '2', '3', '4', '5', '6', '7', '8',
'9', '10', '11', '12', '13', '14', '15', '16', '17',
'18', '19', '20', '21', '22', '23', '24', '25',
'26', '27', '28', '29', '30', '31', '32', '33', ]:
if btn_text in number_selection:
button = types.InlineKeyboardButton(f"\U00002705 {btn_text}", callback_data=btn_text)
else:
button = types.InlineKeyboardButton(btn_text, callback_data=btn_text)
buttons.append(button) # Добавляем кнопку в текущий ряд
for i in range(0, len(buttons), 3): #Разбиваем список на сегменты длинной в 3 кнопки
markup.row(*buttons[i:i+3]) #Для каждого сегмента создается новый ряд в который добавляется отдельно каждый сегмента
markup.add(types.InlineKeyboardButton('Четные числа', callback_data='Четные числа'))
markup.add(types.InlineKeyboardButton('Нечетные числа', callback_data='Нечетные числа'))
if any(number in number_selection for number in ['1', '2', '3', '4', '5', '6', '7', '8',
'9', '10', '11', '12', '13', '14', '15', '16', '17',
'18', '19', '20', '21', '22і', '23', '24', '25',
'26', '27', '28', '29', '30', '31', '32', '33',]):
markup.add(types.InlineKeyboardButton('✅ Далее', callback_data='done2'))
markup.add(types.InlineKeyboardButton('⬅️ Назад', callback_data='back3'))
bot.edit_message_text(chat_id=call.message.chat.id, message_id=call.message.message_id, text="Выберите число", reply_markup=markup)
elif call.data == 'done2':
# Сохраняем выбор пользователя
save_selection(call.message.chat.id, number_selection)
elif call.data == 'back3':
start(call.message)
number_selection.clear()
def save_selection(chat_id, selection):
# Здесь можно сохранить выбор пользователя в базе данных или еще где-то
print(f"User {chat_id} selected: {selection}")
bot.polling(non_stop=True)