@DarkLight_723

Как сократить данный код?

from requests import get
import telebot 
from telebot import types # для создания конопок!

bot = telebot.TeleBot(token='') 



@bot.message_handler(commands=['start', 'старт', 'Старт', 'Start']) # отслеживаем команды (/start, /старт)
def start_message(message):
    markup = types.ReplyKeyboardMarkup(resize_keyboard=True)
    btn1 = types.KeyboardButton('Записаться')
    markup.add(btn1)

    mess = f' Здравствуйте <b>{message.from_user.first_name}</b>, нажмите на кнопку "Записаться" для продолжения' 
    bot.send_message(message.chat.id, mess, parse_mode= 'html', reply_markup = markup) #


@bot.message_handler(content_types=['text'])
def bot_message(message):

    if message.text == 'Записаться':
        markup = types.ReplyKeyboardMarkup(resize_keyboard=True)
        bn1 = types.KeyboardButton('26.01')
        bn2 = types.KeyboardButton('27.01')
        bn3 = types.KeyboardButton('28.01')
        bn4 = types.KeyboardButton('29.01')
        bn5 = types.KeyboardButton('30.01')
        bn6 = types.KeyboardButton('31.01')
        back1 = types.KeyboardButton('Назад')
        markup.add(bn1, bn2, bn3, bn4, bn5, bn6, back1)
        bot.send_message(message.chat.id, text='Выберите удобную вам дату для записи', reply_markup = markup)


    if message.text == '26.01':
        markup = types.ReplyKeyboardMarkup(resize_keyboard=True)
        bt1 = types.KeyboardButton('8:00')
        bt2 = types.KeyboardButton('9:00')
        bt3 = types.KeyboardButton('10:00')
        bt4 = types.KeyboardButton('11:00')
        bt5 = types.KeyboardButton('12:00')
        bt6 = types.KeyboardButton('13:00')
        bt7 = types.KeyboardButton('14:00')
        bt8 = types.KeyboardButton('15:00')
        bt9 = types.KeyboardButton('16:00')
        bt10 = types.KeyboardButton('17:00')
        bt11 = types.KeyboardButton('18:00')
        bt12 = types.KeyboardButton('19:00')
        bt13 = types.KeyboardButton('20:00')
        bt14 = types.KeyboardButton('21:00')
        back11 = types.KeyboardButton('Назад')
        markup.add(bt1, bt2, bt3, bt4, bt5, bt6, bt7, bt8, bt9, bt10, bt11, bt12, bt13, bt14, back11)
        bot.send_message(message.chat.id, text='Выберите удобную вам дату для записи', reply_markup = markup)

    if message.text == '27.01':
        markup = types.ReplyKeyboardMarkup(resize_keyboard=True)
        bt1 = types.KeyboardButton('8:00')
        bt2 = types.KeyboardButton('9:00')
        bt3 = types.KeyboardButton('10:00')
        bt4 = types.KeyboardButton('11:00')
        bt5 = types.KeyboardButton('12:00')
        bt6 = types.KeyboardButton('13:00')
        bt7 = types.KeyboardButton('14:00')
        bt8 = types.KeyboardButton('15:00')
        bt9 = types.KeyboardButton('16:00')
        bt10 = types.KeyboardButton('17:00')
        bt11 = types.KeyboardButton('18:00')
        bt12 = types.KeyboardButton('19:00')
        bt13 = types.KeyboardButton('20:00')
        bt14 = types.KeyboardButton('21:00')
        back11 = types.KeyboardButton('Назад')
        markup.add(bt1, bt2, bt3, bt4, bt5, bt6, bt7, bt8, bt9, bt10, bt11, bt12, bt13, bt14, back11)
        bot.send_message(message.chat.id, text='Выберите удобную вам дату для записи', reply_markup = markup)
    
    if message.text == '28.01':
        markup = types.ReplyKeyboardMarkup(resize_keyboard=True)
        bt1 = types.KeyboardButton('8:00')
        bt2 = types.KeyboardButton('9:00')
        bt3 = types.KeyboardButton('10:00')
        bt4 = types.KeyboardButton('11:00')
        bt5 = types.KeyboardButton('12:00')
        bt6 = types.KeyboardButton('13:00')
        bt7 = types.KeyboardButton('14:00')
        bt8 = types.KeyboardButton('15:00')
        bt9 = types.KeyboardButton('16:00')
        bt10 = types.KeyboardButton('17:00')
        bt11 = types.KeyboardButton('18:00')
        bt12 = types.KeyboardButton('19:00')
        bt13 = types.KeyboardButton('20:00')
        bt14 = types.KeyboardButton('21:00')
        back11 = types.KeyboardButton('Назад')
        markup.add(bt1, bt2, bt3, bt4, bt5, bt6, bt7, bt8, bt9, bt10, bt11, bt12, bt13, bt14, back11)
        bot.send_message(message.chat.id, text='Выберите удобную вам дату для записи', reply_markup = markup)

    if message.text == '29.01':
        markup = types.ReplyKeyboardMarkup(resize_keyboard=True)
        bt1 = types.KeyboardButton('8:00')
        bt2 = types.KeyboardButton('9:00')
        bt3 = types.KeyboardButton('10:00')
        bt4 = types.KeyboardButton('11:00')
        bt5 = types.KeyboardButton('12:00')
        bt6 = types.KeyboardButton('13:00')
        bt7 = types.KeyboardButton('14:00')
        bt8 = types.KeyboardButton('15:00')
        bt9 = types.KeyboardButton('16:00')
        bt10 = types.KeyboardButton('17:00')
        bt11 = types.KeyboardButton('18:00')
        bt12 = types.KeyboardButton('19:00')
        bt13 = types.KeyboardButton('20:00')
        bt14 = types.KeyboardButton('21:00')
        back11 = types.KeyboardButton('Назад')
        markup.add(bt1, bt2, bt3, bt4, bt5, bt6, bt7, bt8, bt9, bt10, bt11, bt12, bt13, bt14, back11)
        bot.send_message(message.chat.id, text='Выберите удобную вам дату для записи', reply_markup = markup)

    if message.text == '30.01':
        markup = types.ReplyKeyboardMarkup(resize_keyboard=True)
        bt1 = types.KeyboardButton('8:00')
        bt2 = types.KeyboardButton('9:00')
        bt3 = types.KeyboardButton('10:00')
        bt4 = types.KeyboardButton('11:00')
        bt5 = types.KeyboardButton('12:00')
        bt6 = types.KeyboardButton('13:00')
        bt7 = types.KeyboardButton('14:00')
        bt8 = types.KeyboardButton('15:00')
        bt9 = types.KeyboardButton('16:00')
        bt10 = types.KeyboardButton('17:00')
        bt11 = types.KeyboardButton('18:00')
        bt12 = types.KeyboardButton('19:00')
        bt13 = types.KeyboardButton('20:00')
        bt14 = types.KeyboardButton('21:00')
        back11 = types.KeyboardButton('Назад')
        markup.add(bt1, bt2, bt3, bt4, bt5, bt6, bt7, bt8, bt9, bt10, bt11, bt12, bt13, bt14, back11)
        bot.send_message(message.chat.id, text='Выберите удобную вам дату для записи', reply_markup = markup)

    if message.text == '31.01':
        markup = types.ReplyKeyboardMarkup(resize_keyboard=True)
        bt1 = types.KeyboardButton('8:00')
        bt2 = types.KeyboardButton('9:00')
        bt3 = types.KeyboardButton('10:00')
        bt4 = types.KeyboardButton('11:00')
        bt5 = types.KeyboardButton('12:00')
        bt6 = types.KeyboardButton('13:00')
        bt7 = types.KeyboardButton('14:00')
        bt8 = types.KeyboardButton('15:00')
        bt9 = types.KeyboardButton('16:00')
        bt10 = types.KeyboardButton('17:00')
        bt11 = types.KeyboardButton('18:00')
        bt12 = types.KeyboardButton('19:00')
        bt13 = types.KeyboardButton('20:00')
        bt14 = types.KeyboardButton('21:00')
        back11 = types.KeyboardButton('Назад')
        markup.add(bt1, bt2, bt3, bt4, bt5, bt6, bt7, bt8, bt9, bt10, bt11, bt12, bt13, bt14, back11)
        bot.send_message(message.chat.id, text='Выберите удобную вам дату для записи', reply_markup = markup)


    

    elif message.text == 'Назад':
        markup = types.ReplyKeyboardMarkup(resize_keyboard=True)
        btn1 = types.KeyboardButton('Записаться')
        markup.add(btn1)
        bot.send_message(message.chat.id, text='Выход в главное меню', parse_mode= 'html', reply_markup = markup) #отправка сообещния: в данный чат/текст/что отлеживаем (в моём случае html)

     
bot.polling(none_stop=True)
  • Вопрос задан
  • 299 просмотров
Пригласить эксперта
Ответы на вопрос 3
phaggi
@phaggi Куратор тега Python
лужу, паяю, ЭВМы починяю
Тут много путей уменьшить код.
Можно начать с того, что у вас многократно повторяется.
К примеру,
if message.text == '26.01':
        markup = types.ReplyKeyboardMarkup(resize_keyboard=True)
        bt1 = types.KeyboardButton('8:00')
        bt2 = types.KeyboardButton('9:00')
        bt3 = types.KeyboardButton('10:00')
        bt4 = types.KeyboardButton('11:00')
        bt5 = types.KeyboardButton('12:00')
        bt6 = types.KeyboardButton('13:00')
        bt7 = types.KeyboardButton('14:00')
        bt8 = types.KeyboardButton('15:00')
        bt9 = types.KeyboardButton('16:00')
        bt10 = types.KeyboardButton('17:00')
        bt11 = types.KeyboardButton('18:00')
        bt12 = types.KeyboardButton('19:00')
        bt13 = types.KeyboardButton('20:00')
        bt14 = types.KeyboardButton('21:00')
        back11 = types.KeyboardButton('Назад')
        markup.add(bt1, bt2, bt3, bt4, bt5, bt6, bt7, bt8, bt9, bt10, bt11, bt12, bt13, bt14, back11)
        bot.send_message(message.chat.id, text='Выберите удобную вам дату для записи', reply_markup = markup)

повторяется несколько раз. Значит, этот фрагмент можно записать один раз и затем многократно вызывать, подставляя только меняющиеся элементы.

Но и внутри видно многократное повторение нумерованной переменной, это явный признак плохого кода.
Эту проблему можно решить разными способами. В данном случае, когда значения идут равномерно (час за часом), можно их просто сгенерировать, рассчитать, и поместить в список.
Например:
first_hour = 8
last_hour = first_hour + 14
buttons = [f'{current}:00' for current in range(first_hour, last_hour)]
print(buttons)
print(buttons[0])

И этот список и передавать в нужное место вместо bt1, bt2, bt3, bt4, bt5, …

И не надо его всякий раз генерировать, один раз достаточно, потом в нужных случаях вызывать.

Следует отметить, что вам пока рано заниматься ботами. Сделайте что-то попроще, калькулятор например, игру «быки-коровы»… я не шучу.
Ответ написан
Комментировать
@Daniil_8_5
нечего было делать, вот помог хоть
from requests import get
import telebot
from telebot import types # для создания конопок!

bot = telebot.TeleBot('Token')
def button(name):
    return types.KeyboardButton(name)


@bot.message_handler(commands=['start', 'старт', 'Старт', 'Start']) # отслеживаем команды (/start, /старт)
def start_message(message):
    markup = types.ReplyKeyboardMarkup(resize_keyboard=True)
    markup.add(button('Записаться'))

    mess = f' Здравствуйте {message.from_user.first_name}, нажмите на кнопку "Записаться" для продолжения'
    bot.send_message(message.chat.id, mess, parse_mode= 'html', reply_markup = markup) #


@bot.message_handler(content_types=['text'])
def bot_message(message):
    first_hour = 8
    last_hour = first_hour + 14
    buttons = [f'{current}:00' for current in range(first_hour, last_hour)]
    if message.text == 'Записаться':
        markup = types.ReplyKeyboardMarkup(resize_keyboard=True)
        for add in buttons:
            markup.add(button(add), button('Назад'))
        bot.send_message(message.chat.id, text='Выберите удобную вам дату для записи', reply_markup = markup)

    if message.text == '26.01':
        markup = types.ReplyKeyboardMarkup(resize_keyboard=True)
        for add in buttons:
            markup.add(button(add), button('Назад'))
        bot.send_message(message.chat.id, text='Выберите удобную вам дату для записи', reply_markup = markup)

    if message.text == '27.01':
        markup = types.ReplyKeyboardMarkup(resize_keyboard=True)
        for add in buttons:
            markup.add(button(add), button('Назад'))
        bot.send_message(message.chat.id, text='Выберите удобную вам дату для записи', reply_markup = markup)

    if message.text == '28.01':
        markup = types.ReplyKeyboardMarkup(resize_keyboard=True)
        for add in buttons:
            markup.add(button(add), button('Назад'))
        bot.send_message(message.chat.id, text='Выберите удобную вам дату для записи', reply_markup = markup)

    if message.text == '29.01':
        markup = types.ReplyKeyboardMarkup(resize_keyboard=True)
        for add in buttons:
            markup.add(button(add), button('Назад'))
        bot.send_message(message.chat.id, text='Выберите удобную вам дату для записи', reply_markup = markup)

    if message.text == '30.01':
        markup = types.ReplyKeyboardMarkup(resize_keyboard=True)
        for add in buttons:
            markup.add(button(add), button('Назад'))
        bot.send_message(message.chat.id, text='Выберите удобную вам дату для записи', reply_markup = markup)

    if message.text == '31.01':
        markup = types.ReplyKeyboardMarkup(resize_keyboard=True)
        for add in buttons:
            markup.add(button(add), button('Назад'))
        bot.send_message(message.chat.id, text='Выберите удобную вам дату для записи', reply_markup = markup)

    elif message.text == 'Назад':
        markup = types.ReplyKeyboardMarkup(resize_keyboard=True)
        markup.add(button('Записаться'))
        bot.send_message(message.chat.id, text='Выход в главное меню', parse_mode= 'html', reply_markup = markup)         #отправка
bot.polling(none_stop=True)
Ответ написан
mayton2019
@mayton2019
Bigdata Engineer
Тут нужна одна функция. На вход получает месседж-текст. И объекты markup и bot.
Вот и все. Остально зарефакторится и схлопнется.
Ответ написан
Комментировать
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы