CryptBomj
@CryptBomj
Web(full-stack, больше front)

Как сделать добавление кнопок в бота через цикл?

Задача: формировать 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)
  • Вопрос задан
  • 122 просмотра
Пригласить эксперта
Ваш ответ на вопрос

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

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