Big-Joe-Peach / kandinsky_telegram_bot_client

Telegram bot client for kandinnsky text to image model made with python.
2 stars 0 forks source link

Улучшение кода #19

Open kimixiro opened 1 year ago

kimixiro commented 1 year ago

import telebot
from telebot.types import Message
from kandinsky import generate_img
from telebot import types
from dependencies import TELEGRAM_BOT_API
from telebot import types //Дублирование кода

bot = telebot.TeleBot(TELEGRAM_BOT_API)

//  send_welcom обрабатывает 2 команды это нарушения принципа SRP. Лучше разделить.

@bot.message_handler(commands=["help", "start"])
def send_welcome(message):
    bot.reply_to(
        message,
        text='Для того, чтобы сгенерировать изображение, отправьте в следующем сообщении ключевые слова через запятую.'.format(
            message.from_user // текст сообщения лучше хранить отдельно что бы он не разрывал код. мб засунь ее в какой нибудь welcome_text .
        ),
    )

// название func не несет смысла, нужно его сделать осмысленным. мб что то типа handle_text_message

@bot.message_handler(content_types=["text"])
def func(message: Message):
    """
    Main action function
    :param message: telebot.types.Message
    :return:
    """
    new_message = bot.send_message(chat_id=message.chat.id, text='Идет генерация изображения...') // опять текст захардкожен лучше его вынести в переменную.
    text_prompt: str = message.text // не вижу в чем ее смысл можно сразу передать message.text в generate_img
    generated_image = generate_img(text_prompt)
    bot.delete_message(chat_id=new_message.chat.id, message_id=new_message.message_id) // этот код не читаемый без пробелов
    bot.send_photo(chat_id=message.chat.id, photo=generated_image[0])

// нет обработки исключений

if __name__ == '__main__':
    bot.infinity_polling(timeout=99999, skip_pending=True) // хардкод timeout_
Ar4ikov commented 1 year ago
  1. Я бы не назвал обработку двух команд нарушением принципа. Это легко объясняется тем, что в твоей бизнес-логике нет разделения между командой /help и /start.
  2. О каких пробелах идет речь? Код читаемый, читай PEP8

Здесь вполне приемлем данный вариант, поскольку он согласован с стайлгайдом, именных аргументов передано малое количество, а общая длина строки соответствует принятым нормам. Другой вариант, который мог быть описан, выглядит следующим образом:

Снимок экрана 2023-10-13 в 22 48 21

или

bot.delete_message(
    chat_id=new_message.chat.id, 
    message_id=new_message.message_id
)

Однако, эта вариативность остается уже не на плечах разработчика, а на линтерах, в данном случае использовался Black, который не увидел здесь необходимости сносить именованные аргументы на последующие строки.

  1. Хардкода таймаута никакого нет, это костыль, который, к сожалению, является hotfixом из-за WontFix от разработчика pytelegrambotapi

Задача со звездочкой: листинг кода под конкретный язык описан в Markdown (см. документацию Markdown для Github)