Вынесение создания кнопок KeyboardButton
Пишу бота в телеграмме используя библеотеку pyTelegramBotAPI. Есть несколько функции, в которых создаются одни и те же кнопки.
@bot.message_handler(regexp="Настройки")
def settings(message):
button01_settings = types.KeyboardButton("Кнопка1")
button02_settings = types.KeyboardButton("Кнопка2")
button03_settings = types.KeyboardButton("Кнопка3")
button04_settings = types.KeyboardButton("Кнопка4")
button05_settings = types.KeyboardButton("Назад")
markup_settings = types.ReplyKeyboardMarkup(resize_keyboard=True).add(button01_settings,button02_settings)
markup_settings.add(button03_settings,button04_settings)
markup_settings.add(button05_settings)
bot.send_message(message.chat.id, "Вы перешли в настройки",reply_markup=markup_settings)
@bot.message_handler(content_types=['text'])
def main_start(message):
if message.text in list_commands:
...
else:
button01_settings = types.KeyboardButton("Кнопка1")
button02_settings = types.KeyboardButton("Кнопка2")
button03_settings = types.KeyboardButton("Кнопка3")
button04_settings = types.KeyboardButton("Кнопка4")
button05_settings = types.KeyboardButton("Назад")
markup_settings = types.ReplyKeyboardMarkup(resize_keyboard=True).add(button01_settings,button02_settings)
markup_settings.add(button03_settings,button04_settings)
markup_settings.add(button05_settings)
bot.send_message(message.chat.id, "Вы перешли в настройки",reply_markup=markup_settings)
Есть ли смысл выносить создание кнопок из функции? Будет ли это более оптимизирование? Типо так:
button01_settings = types.KeyboardButton("Кнопка1")
button02_settings = types.KeyboardButton("Кнопка2")
button03_settings = types.KeyboardButton("Кнопка3")
button04_settings = types.KeyboardButton("Кнопка4")
button05_settings = types.KeyboardButton("Назад")
markup_settings = types.ReplyKeyboardMarkup(resize_keyboard=True).add(button01_settings,button02_settings)
markup_settings.add(button03_settings,button04_settings)
markup_settings.add(button05_settings)
@bot.message_handler(regexp="Настройки")
def settings(message):
bot.send_message(message.chat.id, "Вы перешли в настройки",reply_markup=markup_settings)
@bot.message_handler(content_types=['text'])
def main_start(message):
if message.text in list_commands:
...
else:
bot.send_message(message.chat.id, "Вы перешли в настройки",reply_markup=markup_settings)
Ответы (1 шт):
Автор решения: Mark Liman
→ Ссылка
мне кажется в вашем случае есть смысл не столько в отдельную функцию их выводить, сколько создать кнопки в меню и просто возвращать после события в методе обратно в меню без кнопки назад на пример:
@bot.message_handler(content_types=['start'])
def menu(message):
button01 = types.KeyboardButton("Кнопка1")
button02 = types.KeyboardButton("Кнопка2")
markup.add(button01, button02)
bot.send_message(message.chat.id, text="Привет, {0.first_name}! добро пожаловать в меню".format(message.from_user), reply_markup=markup)
@bot.message_handler(content_types=['text'])
def func(message):
if message.text in list_commands:
bot.register_next_step_handler(message, primer_sobitia)
def primer_sobitia(message):
# сюда функционал
bot.register_next_step_handler(message, menu) # вернет вас в меню
при желании если должно произойти несколько событий, то пользуйтесь
bot.register_next_step_handler(message, следующая функция)
так-же если так будет удобнее, то добавить кнопку back.