Задача: формировать 270 кнопок в боте.
Число любит меняться, поэтому есть отдельная часть кода определяющая их кол-во при старте бота, называется главная принимающая число переменная = row_lengthO1.
Так же я генерирую разные названия для функций кнопок = function_names(список функций 270шт).
Мне нужно в обработчике создавать elifы 270 штук. Мой код для этого:
x = 0
markup = types.ReplyKeyboardMarkup(resize_keyboard=True)
while x < row_lengthO1:
x = x + 1
elif message.text == str(fsadf):
# exec(f"elif message.text == str({function_names}):")
markup = types.ReplyKeyboardMarkup(resize_keyboard=True)
button1 = types.KeyboardButton(' Оформить заказ')
button2 = types.KeyboardButton('↩️ Назад')
markup.row(button1, button2)
bot.send_message(message.chat.id, 'Информация о первом товаре...', reply_markup=markup)
# Если пользователь написал свое сообщение, то бот рандомно генерирует один из возможных вариантов ответа
# Добавлять и редактировать варианты ответов можно в списке answers
Мне нужно создавать после обработчиков сами кнопки(270шт) для юзеров:
def goodsChapter(message):
# Кнопки для товаров
x = 0
markup = types.ReplyKeyboardMarkup(resize_keyboard=True)
while x < row_lengthO1-3:
x = x + 1
exec(f"{function_names} = types.KeyboardButton(' '+str({massivT}))")
markup.row(exec(f"{function_names},"))
# Отправляем сообщение с прикрепленными к нему кнопками товаров
bot.send_message(message.chat.id, 'Товар в наличии на складе:', reply_markup=markup)
Я пытаюсь делать автоматическое создание кнопок возможно очень кастыльно и поэтому не работает,
(в моём случае формирую циклом while = он не работает правильно). Буду очень рад, если кто-нибудь даст пару советов.
Вот большая часть кода, с которой нужно работать:
# добавляем имена функций в массив 274 строк в Х
x = 0
function_names = []
while x < row_lengthO1-3:
x = x + 1
function_names.append(generate_function_name())
print(x)
# def cyrgaf():
# print('def cyrgaf вызван')
# cyrgaf()
exec(f"def {function_names[5]}():\n print('def {function_names[5]} вызван')\n")
exec(f"{function_names[5]}()")
# Обработка фото. Если пользователь пришлет фото, то бот отреагирует на него. Можно реализовать свой функционал
@bot.message_handler(content_types='photo')
def get_photo(message):
bot.send_message(message.chat.id, 'У меня нет возможности просматривать фото :(')
@bot.message_handler(content_types='video')
def get_video(message):
bot.send_message(message.chat.id, 'У меня нет возможности просматривать видео :(')
# Обработка обычных текстовых команд, описанных в кнопках
@bot.message_handler()
def info(message):
message.text == 'Товар':
goodsChapter(message)
message.text == 'Товар 2':
goodsChapter2(message)
message.text == 'Товар 3':
goodsChapter3(message)
message.text == 'Товар 4':
goodsChapter4(message)
message.text == ' Товар и прочее':
goodsChapter5(message)
message.text == str(function_names):
markup = types.ReplyKeyboardMarkup(resize_keyboard=True)
button1 = types.KeyboardButton(' Оформить заказ')
button2 = types.KeyboardButton('↩️ Назад')
markup.row(button1, button2)
bot.send_message(message.chat.id, 'Информация о первом товаре...', reply_markup=markup)
elif message.text == ' Товар #1':
markup = types.ReplyKeyboardMarkup(resize_keyboard=True)
button1 = types.KeyboardButton(' Оформить заказ')
button2 = types.KeyboardButton('↩️ Назад')
markup.row(button1, button2)
bot.send_message(message.chat.id, 'Информация о первом товаре...', reply_markup=markup)
elif message.text == ' Товар #2':
markup = types.ReplyKeyboardMarkup(resize_keyboard=True)
button1 = types.KeyboardButton(' Оформить заказ')
button2 = types.KeyboardButton('↩️ Назад')
markup.row(button1, button2)
bot.send_message(message.chat.id, 'Информация о втором товаре...', reply_markup=markup)
elif message.text == ' Товар #3':
markup = types.ReplyKeyboardMarkup(resize_keyboard=True)
button1 = types.KeyboardButton(' Оформить заказ')
button2 = types.KeyboardButton('↩️ Назад')
markup.row(button1, button2)
bot.send_message(message.chat.id, 'Информация о третьем товаре...', reply_markup=markup)
elif message.text == ' Товар #4':
markup = types.ReplyKeyboardMarkup(resize_keyboard=True)
button1 = types.KeyboardButton(' Оформить заказ')
button2 = types.KeyboardButton('↩️ Назад')
markup.row(button1, button2)
bot.send_message(message.chat.id, 'Информация о четвертом товаре...', reply_markup=markup)
elif message.text == ' Оформить заказ':
# Сюда можете ввести свою ссылку на Телеграмм, тогда пользователя будет перекидывать к вам в личку
webbrowser.open('https://t.me/с12сс')
elif message.text == '↩️ Назад':
goodsChapter(message)
elif message.text == '↩️ Назад в меню':
welcome(message)
x = 0
markup = types.ReplyKeyboardMarkup(resize_keyboard=True)
while x < row_lengthO1:
x = x + 1
elif message.text == str(fsadf):
# exec(f"elif message.text == str({function_names}):")
markup = types.ReplyKeyboardMarkup(resize_keyboard=True)
button1 = types.KeyboardButton(' Оформить заказ')
button2 = types.KeyboardButton('↩️ Назад')
markup.row(button1, button2)
bot.send_message(message.chat.id, 'Информация о первом товаре...', reply_markup=markup)
# Если пользователь написал свое сообщение, то бот рандомно генерирует один из возможных вариантов ответа
# Добавлять и редактировать варианты ответов можно в списке answers
else:
bot.send_message(message.chat.id, answers[random.randint(0, 3)])
# x = 0
# function_names = []
# while x < row_lengthO1:
# x = x + 1
# function_names.append(generate_function_name())
# Функция, отвечающая за раздел Товар
def goodsChapter(message):
# Кнопки для товаров
x = 0
markup = types.ReplyKeyboardMarkup(resize_keyboard=True)
while x < row_lengthO1-3:
x = x + 1
exec(f"{function_names} = types.KeyboardButton(' '+str({massivT}))")
markup.row(exec(f"{function_names},"))
# Отправляем сообщение с прикрепленными к нему кнопками товаров
bot.send_message(message.chat.id, 'Товар в наличии на складе:', reply_markup=markup)
# Функция, отвечающая за Товар
def goodsChapter2(message):
# Кнопки для товаров
markup = types.ReplyKeyboardMarkup(resize_keyboard=True)
button1 = types.KeyboardButton(' Товар #1')
button2 = types.KeyboardButton(' Товар #2')
button3 = types.KeyboardButton(' Товар #3')
button4 = types.KeyboardButton(' Товар #4')
button5 = types.KeyboardButton('↩️ Назад в меню')
markup.row(button1, button2)
markup.row(button3, button4)
markup.row(button5)
# Отправляем сообщение с прикрепленными к нему кнопками товаров
bot.send_message(message.chat.id, 'Товар в наличии на складе:', reply_markup=markup)
# Функция, отвечающая за Товар
def goodsChapter3(message):
# Кнопки для товаров
markup = types.ReplyKeyboardMarkup(resize_keyboard=True)
button1 = types.KeyboardButton(' Товар #1')
button2 = types.KeyboardButton(' Товар #2')
button3 = types.KeyboardButton(' Товар #3')
button4 = types.KeyboardButton(' Товар #4')
button5 = types.KeyboardButton('↩️ Назад в меню')
markup.row(button1, button2)
markup.row(button3, button4)
markup.row(button5)
# Отправляем сообщение с прикрепленными к нему кнопками товаров
bot.send_message(message.chat.id, 'Товар в наличии на складе:', reply_markup=markup)
# Функция, отвечающая за Товар
def goodsChapter4(message):
# Кнопки для товаров
markup = types.ReplyKeyboardMarkup(resize_keyboard=True)
button1 = types.KeyboardButton(' Товар #1')
button2 = types.KeyboardButton(' Товар #2')
button3 = types.KeyboardButton(' Товар #3')
button4 = types.KeyboardButton(' Товар #4')
button5 = types.KeyboardButton('↩️ Назад в меню')
markup.row(button1, button2)
markup.row(button3, button4)
markup.row(button5)
# Отправляем сообщение с прикрепленными к нему кнопками товаров
bot.send_message(message.chat.id, 'Товар в наличии на складе:', reply_markup=markup)
# Функция, отвечающая за Товар и прочее
def goodsChapter5(message):
# Кнопки для товаров
markup = types.ReplyKeyboardMarkup(resize_keyboard=True)
button1 = types.KeyboardButton(' Товар #1')
button2 = types.KeyboardButton(' Товар #2')
button3 = types.KeyboardButton(' Товар #3')
button4 = types.KeyboardButton(' Товар #4')
button5 = types.KeyboardButton('↩️ Назад в меню')
markup.row(button1, button2)
markup.row(button3, button4)
markup.row(button5)
# Отправляем сообщение с прикрепленными к нему кнопками товаров
bot.send_message(message.chat.id, 'Товар и прочее в наличии на складе:', reply_markup=markup)