small refactor

This commit is contained in:
kasperarts 2024-06-09 15:35:14 +03:00
parent c3699e0766
commit 2ff6ae92ae
4 changed files with 23 additions and 63 deletions

View File

@ -2,6 +2,5 @@
- Организовать корректную проверку введенных данных. - Организовать корректную проверку введенных данных.
- Написать функцию по составлению SQL-запроса для БД - Написать функцию по составлению SQL-запроса для БД
- Сформировать БД из данной exel-таблицы - Сформировать БД из данной exel-таблицы
- Написать функцию для рассылки WatsApp и Email - Написать функцию для рассылки WatsApp
- Вынести кнопки в отдельные класс.
- Переписать обработчики сообщений, вынести отдельными функциями из __init__ - Переписать обработчики сообщений, вынести отдельными функциями из __init__

14
modules/keyboards.py Normal file
View File

@ -0,0 +1,14 @@
from telebot.types import KeyboardButton, ReplyKeyboardMarkup
class Keyboards:
def __init__(self) -> None:
self.markup = ReplyKeyboardMarkup()
def create_buttons(self, data: tuple, row_width: int = 3) -> ReplyKeyboardMarkup:
self.markup = ReplyKeyboardMarkup()
self.markup.row_width = row_width
for item in data:
self.markup.add(KeyboardButton(item))
return self.markup

View File

@ -7,6 +7,7 @@ import telebot
from telebot.types import BotCommand, KeyboardButton, ReplyKeyboardMarkup from telebot.types import BotCommand, KeyboardButton, ReplyKeyboardMarkup
from modules.configuration import Configuration from modules.configuration import Configuration
from modules.keyboards import Keyboards
class TGSenderBot: class TGSenderBot:
@ -18,6 +19,7 @@ class TGSenderBot:
self.bot = telebot.TeleBot(self.config.token) self.bot = telebot.TeleBot(self.config.token)
self.start_cmd = BotCommand(command="start", description="Start bot") self.start_cmd = BotCommand(command="start", description="Start bot")
self.start_mailing = BotCommand(command="mailing", description="Prepare to mailing") self.start_mailing = BotCommand(command="mailing", description="Prepare to mailing")
self.keyboards = Keyboards()
self.company = None self.company = None
self.template_msg_path = Path() self.template_msg_path = Path()
self.mailing_method = None self.mailing_method = None
@ -37,7 +39,7 @@ class TGSenderBot:
message.chat.id, message.chat.id,
"Привет! Давай начнем подготовку к рассылке.\n\n" "Привет! Давай начнем подготовку к рассылке.\n\n"
"Для начала - нужно выбрать компанию, от имени которой ты будешь делать рассылку.", "Для начала - нужно выбрать компанию, от имени которой ты будешь делать рассылку.",
reply_markup=self.__company_buttons(), reply_markup=self.keyboards.create_buttons(("COZY COTTON", "MixFix", "chic chick", "Ky Ky", "WOLF&OWL", "NOW")),
) )
# Messages # Messages
@ -55,7 +57,7 @@ class TGSenderBot:
self.bot.send_message( self.bot.send_message(
message.chat.id, message.chat.id,
"Отлично! Шаблон сохранен. Осталось лишь проверить все данные, для рассылки.", "Отлично! Шаблон сохранен. Осталось лишь проверить все данные, для рассылки.",
reply_markup= self.__enter_check(), reply_markup=self.keyboards.create_buttons(("Проверить данные",)),
) )
else: else:
self.bot.send_message( self.bot.send_message(
@ -72,7 +74,7 @@ class TGSenderBot:
f'Выбрана компания "{self.company}"\n\nТеперь необходимо выбрать метод,' f'Выбрана компания "{self.company}"\n\nТеперь необходимо выбрать метод,'
"которым будут рассылаться сообщения.\n" "которым будут рассылаться сообщения.\n"
"Пожалуйста, выбери формат шаблона.", "Пожалуйста, выбери формат шаблона.",
reply_markup=self.__mailing_methods(), reply_markup=self.keyboards.create_buttons(("E-Mail", "WatsApp"))
) )
case "E-Mail" | "WatsApp": case "E-Mail" | "WatsApp":
self.mailing_method = "mail" if message.text == "E-Mail" else "whatsapp" self.mailing_method = "mail" if message.text == "E-Mail" else "whatsapp"
@ -82,7 +84,7 @@ class TGSenderBot:
message.chat.id, message.chat.id,
f"Рассылка будет произведена методом {msg}.\n\n" f"Рассылка будет произведена методом {msg}.\n\n"
"Далее мы с тобой напишем шаблон сообщения для рассылки.", "Далее мы с тобой напишем шаблон сообщения для рассылки.",
reply_markup=self.__types_template_message(), reply_markup=self.keyboards.create_buttons(("Текст", "HTML"))
) )
case "Текст" | "HTML": case "Текст" | "HTML":
self.template_type = "plain" if message.text == "Текст" else "html" self.template_type = "plain" if message.text == "Текст" else "html"
@ -101,12 +103,12 @@ class TGSenderBot:
f"Метод: {self.mailing_method}\n" f"Метод: {self.mailing_method}\n"
f"Текст:\n\n{txt}", f"Текст:\n\n{txt}",
) )
self.bot.send_message(message.chat.id, msg,reply_markup=self.__finish_menu()) self.bot.send_message(message.chat.id, msg,reply_markup=self.keyboards.create_buttons(("Изменить компанию", "Изменить метод", "Изменить шаблон", "Начать")))
case "Изменить компанию": case "Изменить компанию":
self.bot.send_message( self.bot.send_message(
message.chat.id, message.chat.id,
"Выбери компанию, от имени которой ты будешь делать рассылку.", "Выбери компанию, от имени которой ты будешь делать рассылку.",
reply_markup=self.__company_buttons() reply_markup=self.keyboards.create_buttons(("COZY COTTON", "MixFix", "chic chick", "Ky Ky", "WOLF&OWL", "NOW"))
) )
case "Начать": case "Начать":
self.bot.send_message( self.bot.send_message(
@ -120,58 +122,3 @@ class TGSenderBot:
self.mailing_method = None self.mailing_method = None
self.waiting_template = bool self.waiting_template = bool
self.template_type = None self.template_type = None
def __enter_check(self) -> ReplyKeyboardMarkup:
markup = ReplyKeyboardMarkup()
markup.row_width = 3
markup.add(KeyboardButton("Проверить данные"))
return markup
def __enter_company(self) -> ReplyKeyboardMarkup:
markup = ReplyKeyboardMarkup()
markup.row_width = 3
markup.add(KeyboardButton("Выбрать компанию"))
return markup
def __types_template_message(self) -> ReplyKeyboardMarkup:
markup = ReplyKeyboardMarkup()
markup.row_width = 2
for method in ("Текст", "HTML"):
markup.add(KeyboardButton(method))
return markup
def __genetare_message_button(self) -> ReplyKeyboardMarkup:
markup = ReplyKeyboardMarkup()
markup.row_width = 3
markup.add(
KeyboardButton("Send Number", request_contact=True),
)
return markup
def __company_buttons(self) -> ReplyKeyboardMarkup:
markup = ReplyKeyboardMarkup()
markup.row_width = 3
for company in ("COZY COTTON", "MixFix", "chic chick", "Ky Ky", "WOLF&OWL", "NOW"):
markup.add(KeyboardButton(company))
return markup
def __mailing_methods(self) -> ReplyKeyboardMarkup:
markup = ReplyKeyboardMarkup()
markup.row_width = 2
for method in ("E-Mail", "WatsApp"):
markup.add(KeyboardButton(method))
return markup
def __finish_menu(self) -> ReplyKeyboardMarkup:
markup = ReplyKeyboardMarkup()
markup.row_width = 3
for state in ("Изменить компанию", "Изменить метод", "Изменить шаблон", "Начать"):
markup.add(KeyboardButton(state))
return markup