From 589b915206a0e5d59d4b6f308f4660c79cce6a8d Mon Sep 17 00:00:00 2001 From: Verum Date: Mon, 24 Feb 2025 04:02:12 +0700 Subject: [PATCH] =?UTF-8?q?0.7=20=D0=A2=D0=B5=D0=BF=D0=B5=D1=80=D1=8C=20?= =?UTF-8?q?=D0=BF=D0=BE=D1=8F=D0=B2=D0=B8=D0=BB=D1=81=D1=8F=20=D0=BB=D0=BE?= =?UTF-8?q?=D0=B3=D0=B3=D0=B5=D1=80=20=D0=BD=D0=B0=20=D1=81=D1=82=D0=B0?= =?UTF-8?q?=D1=80=D1=82=D1=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .gitignore | 2 + .idea/PRIMOWORLD.iml | 2 + .../routers/commands/cmd_class/__init__.py | 5 - .../commands/cmd_class/user_cmd_class.py | 54 -------- BotCode/routers/commands/user_cmd/help_cmd.py | 3 +- .../routers/commands/user_cmd/start_cmd.py | 4 +- BotLibrary/loggers/custom_loggers.py | 33 +++-- BotLibrary/loggers/logs.py | 65 +++++++--- BotLibrary/samples/__init__.py | 5 + BotLibrary/samples/user_cmd_class.py | 121 ++++++++++++++++++ BotLibrary/system/bots.py | 16 ++- BotLibrary/system/directory.py | 9 +- ProjectsFiles/configs/__init__.py | 2 + ProjectsFiles/configs/config.py | 85 ++---------- ProjectsFiles/configs/logs_config.py | 53 ++++++++ ProjectsFiles/configs/project_path.py | 40 ++++++ main.py | 2 +- 17 files changed, 332 insertions(+), 169 deletions(-) delete mode 100644 BotCode/routers/commands/cmd_class/__init__.py delete mode 100644 BotCode/routers/commands/cmd_class/user_cmd_class.py create mode 100644 BotLibrary/samples/__init__.py create mode 100644 BotLibrary/samples/user_cmd_class.py create mode 100644 ProjectsFiles/configs/logs_config.py create mode 100644 ProjectsFiles/configs/project_path.py diff --git a/.gitignore b/.gitignore index 64038af..fecc7e7 100644 --- a/.gitignore +++ b/.gitignore @@ -4,6 +4,7 @@ # Игнорирование локального окружения и пользовательских конфигураций IDE .* +.*/ .idea .venv/ *.iml @@ -19,6 +20,7 @@ Thumbs.db # Игнорирование файлов логов +BotLogs/ *.log *.logs diff --git a/.idea/PRIMOWORLD.iml b/.idea/PRIMOWORLD.iml index bd5aef4..f294d3e 100644 --- a/.idea/PRIMOWORLD.iml +++ b/.idea/PRIMOWORLD.iml @@ -13,6 +13,8 @@ + + diff --git a/BotCode/routers/commands/cmd_class/__init__.py b/BotCode/routers/commands/cmd_class/__init__.py deleted file mode 100644 index 3569dfb..0000000 --- a/BotCode/routers/commands/cmd_class/__init__.py +++ /dev/null @@ -1,5 +0,0 @@ -# BotCode/routers/commands/cmd_class/__init__.py -# Инициализация модуля cmd_class, для пользовательских классов команд - -# Экспортирование модулей во внешние слои проекта -from .user_cmd_class import * diff --git a/BotCode/routers/commands/cmd_class/user_cmd_class.py b/BotCode/routers/commands/cmd_class/user_cmd_class.py deleted file mode 100644 index 70efdd9..0000000 --- a/BotCode/routers/commands/cmd_class/user_cmd_class.py +++ /dev/null @@ -1,54 +0,0 @@ -# BotCode/routers/commands/user_cmd_class.py -# Класс-шаблон для создания новых команд - -from aiogram import Router, types -from aiogram.filters import Command -from BotLibrary import * - -# Класс-шаблон для команд -class CommandHandler: - def __init__(self, name: str, keywords : list, - description: str = "Описание команды", text_msg : str = "Сообщение", - keyboard = None, prefix = BotVar.prefix, callbackdata = None, - ignore_case : bool = True, activate_keywoards : bool = True, - activate_commands : bool = True, activate_callback : bool = True, - ): - """ - Универсальный обработчик команд для бота. - - :param name: Имя команды (например, "help"). - :param description: Описание команды. - :param keywords: Список ключевых слов, которые активируют команду. - :param text_msg: Текст сообщения, который отправляется пользователю. - :param keyboard: Клавиатура, если требуется. - """ - self.router = Router(name=f"{name}_router") - self.name = name - self.log_type = name.capitalize() - self.description = description - self.keywords = keywords - self.callbackdata = callbackdata - self.text_msg = text_msg - self.keyboard = keyboard - - # Привязываем хэндлер к роутеру - if activate_commands: - self.router.message(Command(*keywords, prefix=prefix, ignore_case=ignore_case))(self.handler) - if activate_keywoards: - self.router.message(F.text.lower().in_(keywords))(self.handler) - if activate_callback: - self.router.message(F.text.lower().in_(callbackdata))(self.handler) - - - async def handler(self, message: types.Message): - """Основной хэндлер команды.""" - try: - Logs.info(log_type=self.name.capitalize(), user=username(message), text=f"использовал(а) команду /{self.name}") - await message.reply( - text=self.text_msg, - reply_markup=self.keyboard() if self.keyboard else None, - ) - - # Проверка на ошибку - except Exception as e: - Logs.error(log_type=self.name.capitalize(), user=username(message), text=f"Ошибка команды: {e}") diff --git a/BotCode/routers/commands/user_cmd/help_cmd.py b/BotCode/routers/commands/user_cmd/help_cmd.py index 57cfb48..95bbe9e 100644 --- a/BotCode/routers/commands/user_cmd/help_cmd.py +++ b/BotCode/routers/commands/user_cmd/help_cmd.py @@ -1,12 +1,13 @@ # BotCode/routers/commands/user_cmd/help_cmd.py # Работа с командой /help, для вывода помощи пользователю -from ..cmd_class.user_cmd_class import CommandHandler +from BotLibrary.samples.user_cmd_class import CommandHandler # Создание команды /help с нужными параметрами help_cmd = CommandHandler( name="help", description="Получить помощь", keywords=["help", "info", "помощь", "инфо", "информация", "рудз", "штащ", "byaj", "gjvjom", "byajhvfwbz"], + callbackdata="keywords", text_msg="Привет! Это команда помощи. Тут ты можешь узнать, как пользоваться ботом.", ) diff --git a/BotCode/routers/commands/user_cmd/start_cmd.py b/BotCode/routers/commands/user_cmd/start_cmd.py index 5c53895..fddcf60 100644 --- a/BotCode/routers/commands/user_cmd/start_cmd.py +++ b/BotCode/routers/commands/user_cmd/start_cmd.py @@ -1,7 +1,7 @@ # BotCode/routers/commands/user_cmd/start_cmd.py # # Работа с командой /start, для запуска бота -from ..cmd_class.user_cmd_class import CommandHandler +from BotLibrary.samples.user_cmd_class import CommandHandler from BotCode.keyboards import get_start_kb # Создание команды /start с нужными параметрами @@ -10,6 +10,8 @@ start_cmd = CommandHandler( description="Добро пожаловать!", keywords=["start", "старт", "запуск", "пуск", "on", "вкл", "с", "s", "ы", "ыефке", "cnfhn", "pfgecr", "gecr", "щт", "drk", "restart", "куыефке"], + callbackdata="keywords", text_msg="Старт!", keyboard=get_start_kb, + chat_action=True ) diff --git a/BotLibrary/loggers/custom_loggers.py b/BotLibrary/loggers/custom_loggers.py index 7c95b96..4d6a3cb 100644 --- a/BotLibrary/loggers/custom_loggers.py +++ b/BotLibrary/loggers/custom_loggers.py @@ -13,7 +13,21 @@ class Logs: """Класс для логирования с разными уровнями через loguru.""" @staticmethod - def debug(text: str = "Логирование!", log_type: str = "Logs", user: str = "@Console", message: Message = None) -> None: + def start(text: str = "Логирование!", system: str = "PRIMO", + log_type: str = "AEP", user: str = "@Console", message: Message = None) -> None: + """ + Логирует сообщение на уровне DEBUG. + + :param text: Сообщение для логирования. + :param log_type: Тип лога (например, "Logs"). + :param user: Имя пользователя или источник вызова лога. + :param message: Сообщение от пользователя, если необходимо извлечь имя. + """ + logger.bind(system=system, user=user, log_type=log_type).log("START", text) + + @staticmethod + def debug(text: str = "Логирование!", system : str = "DEBUG", + log_type: str = "Logs", user: str = "@Console", message: Message = None) -> None: """ Логирует сообщение на уровне DEBUG. @@ -24,10 +38,11 @@ class Logs: """ if message: user = username(message) - logger.bind(log_type=log_type, user=user).debug(text) + logger.bind(system=system, log_type=log_type, user=user).debug(text) @staticmethod - def info(text: str = "Логирование!", log_type: str = "Logs", user: str = "@Console", message: Message = None) -> None: + def info(text: str = "Логирование!", system : str = "PRIMO", + log_type: str = "Logs", user: str = "@Console", message: Message = None) -> None: """ Логирует сообщение на уровне INFO. @@ -38,10 +53,11 @@ class Logs: """ if message: user = username(message) - logger.bind(log_type=log_type, user=user).info(text) + logger.bind(system=system, log_type=log_type, user=user).info(text) @staticmethod - def warning(text: str = "Логирование!", log_type: str = "Logs", user: str = "@Console", message: Message = None) -> None: + def warning(text: str = "Логирование!", system : str = "WARNING", + log_type: str = "Logs", user: str = "@Console", message: Message = None) -> None: """ Логирует сообщение на уровне WARNING. @@ -52,10 +68,11 @@ class Logs: """ if message: user = username(message) - logger.bind(log_type=log_type, user=user).warning(text) + logger.bind(system=system, log_type=log_type, user=user).warning(text) @staticmethod - def error(text: str = "Логирование!", log_type: str = "Logs", user: str = "@Console", message: Message = None) -> None: + def error(text: str = "Логирование!", system : str = "ERROR", + log_type: str = "Logs", user: str = "@Console", message: Message = None) -> None: """ Логирует сообщение на уровне ERROR. @@ -66,4 +83,4 @@ class Logs: """ if message: user = username(message) - logger.bind(log_type=log_type, user=user).error(text) + logger.bind(system=system, log_type=log_type, user=user).error(text) diff --git a/BotLibrary/loggers/logs.py b/BotLibrary/loggers/logs.py index 29454dd..f1d2f68 100644 --- a/BotLibrary/loggers/logs.py +++ b/BotLibrary/loggers/logs.py @@ -3,7 +3,7 @@ import sys from loguru import logger -from ProjectsFiles import BotLogs +from ProjectsFiles import BotLogs, ProjectPath # Создание обычного логгера + логгер в файл @@ -16,8 +16,18 @@ async def setup_logger() -> None: """ logger.remove() # Удаляем все логгеры + if BotLogs.permission or BotLogs.permission_to_file: + # Добавляем новый уровень START + logger.level("START", no=25, color="white", icon="🔸") + # Настройка логирования в консоль для каждого уровня if BotLogs.permission: + logger.add(sys.stderr, + colorize=True, + format=BotLogs.start_text, + level="START", + filter=lambda record: record["level"].name == "START" + ) logger.add(sys.stderr, colorize=True, format=BotLogs.debug_text, @@ -39,21 +49,40 @@ async def setup_logger() -> None: level="ERROR", filter=lambda record: record["level"].name == "ERROR") - # Добавление логгера для записи в файл (закомментированное, по необходимости активируется) + # Добавление логгера для записи в файл if BotLogs.permission_to_file: - # Uncomment and adjust if file logging is required - # logger.add(ProjectPath.log_file, - # rotation=BotLogs.max_size, - # format=BotLogs.info_text, - # backtrace=True, - # diagnose=True, - # level="INFO", - # filter=lambda record: record["level"].name == "INFO") - # logger.add(ProjectPath.log_error_file, - # rotation=BotLogs.max_size, - # format=BotLogs.error_text, - # backtrace=True, - # diagnose=True, - # level="ERROR", - # filter=lambda record: record["level"].name == "ERROR") - return + logger.add(ProjectPath.start_log_file, + rotation=BotLogs.max_size, + format=BotLogs.start_text, + backtrace=True, + diagnose=True, + level="START", + filter=lambda record: record["level"].name == "START") + logger.add(ProjectPath.debug_log_file, + rotation=BotLogs.max_size, + format=BotLogs.debug_text, + backtrace=True, + diagnose=True, + level="DEBUG", + filter=lambda record: record["level"].name == "DEBUG") + logger.add(ProjectPath.info_log_file, + rotation=BotLogs.max_size, + format=BotLogs.info_text, + backtrace=True, + diagnose=True, + level="INFO", + filter=lambda record: record["level"].name == "INFO") + logger.add(ProjectPath.warning_log_file, + rotation=BotLogs.max_size, + format=BotLogs.warning_text, + backtrace=True, + diagnose=True, + level="WARNING", + filter=lambda record: record["level"].name == "WARNING") + logger.add(ProjectPath.error_log_file, + rotation=BotLogs.max_size, + format=BotLogs.error_text, + backtrace=True, + diagnose=True, + level="ERROR", + filter=lambda record: record["level"].name == "ERROR") diff --git a/BotLibrary/samples/__init__.py b/BotLibrary/samples/__init__.py new file mode 100644 index 0000000..922f167 --- /dev/null +++ b/BotLibrary/samples/__init__.py @@ -0,0 +1,5 @@ +# BotLibrary/samples/__init__.py +# Инициализация пакета samples, для создания шаблонов + +# Экспортирование модулей во внешние слои проекта +from .user_cmd_class import * diff --git a/BotLibrary/samples/user_cmd_class.py b/BotLibrary/samples/user_cmd_class.py new file mode 100644 index 0000000..9561222 --- /dev/null +++ b/BotLibrary/samples/user_cmd_class.py @@ -0,0 +1,121 @@ +# BotCode/routers/commands/user_cmd_class.py +# Класс-шаблон для создания новых команд + +from aiogram import Router, types, F +from aiogram.enums import ChatAction +from aiogram.filters import Command + +from ProjectsFiles import BotVar +from BotLibrary.validators import username +from BotLibrary.loggers import Logs + +# Настройки экспорта в модули +__all__ = ("CommandHandler", ) + +# Класс-шаблон для команд +class CommandHandler: + def __init__(self, name: str, keywords : list, chat_action : bool = False, + description: str = "Описание команды", text_msg : str = "Сообщение", + keyboard = None, prefix = BotVar.prefix, callbackdata = None, + ignore_case : bool = True, activate_keywoards : bool = True, + activate_commands : bool = True, activate_callback : bool = True, + media : str = "message", path_to_media : str = None, parse_mode : str = BotVar.parse_mode, + disable_notification : bool = False, + ): + + self.router = Router(name=f"{name}_router") + self.name = name + self.log_type = name.capitalize() + self.description = description + + self.keywords = keywords + self.text_msg = text_msg + self.parse_mode = parse_mode + self.keyboard = keyboard + self.chat_action = chat_action + self.disable_notification = disable_notification + + self.media = media.lower() + self.path_to_media = path_to_media + if callbackdata == "keywords": + self.callbackdata = keywords + else: + self.callbackdata = callbackdata + + + # Привязываем хэндлер к роутеру + if activate_commands: + self.router.message(Command(*keywords, prefix=prefix, ignore_case=ignore_case))(self.handler) + if activate_keywoards: + self.router.message(F.text.lower().in_(keywords))(self.handler) + if activate_callback: + self.router.message(F.text.lower().in_(callbackdata))(self.handler) + + + async def handler(self, message: types.Message): + """Основной хэндлер команды.""" + try: + Logs.info(log_type=self.log_type, user=username(message), text=f"использовал(а) команду /{self.name}") + if self.media == "message": + await message.reply( + text=self.text_msg, + reply_markup=self.keyboard() if self.keyboard else None, + parse_mode=self.parse_mode, + disable_notification=self.disable_notification, + ) + if self.chat_action: + await message.bot.send_chat_action( + chat_id=message.chat.id, + action=ChatAction.TYPING, + ) + else: + if self.media == "photo": + await message.reply_photo( + photo="https://vos-mo.ru/upload/iblock/329/g0s939ge8o1n8xp7rcqnw9kkz9mcfrg2/risunok.jpg", + caption=self.text_msg) + if self.chat_action: + await message.bot.send_chat_action( + chat_id=message.chat.id, + action=ChatAction.UPLOAD_PHOTO, + ) + + if self.media == "gif": + await message.reply_animation( + animation="https://vos-mo.ru/upload/iblock/329/g0s939ge8o1n8xp7rcqnw9kkz9mcfrg2/risunok.jpg") + if self.chat_action: + await message.bot.send_chat_action( + chat_id=message.chat.id, + action=ChatAction.UPLOAD_VIDEO, + ) + + if self.media == "video": + if self.chat_action: + await message.bot.send_chat_action( + chat_id=message.chat.id, + action=ChatAction.UPLOAD_VIDEO, + ) + + if self.media == "videonote": + if self.chat_action: + await message.bot.send_chat_action( + chat_id=message.chat.id, + action=ChatAction.UPLOAD_VIDEO_NOTE, + ) + + if self.media == "audio": + if self.chat_action: + await message.bot.send_chat_action( + chat_id=message.chat.id, + action=ChatAction.UPLOAD_VOICE, + ) + + if self.media == "file": + if self.chat_action: + await message.bot.send_chat_action( + chat_id=message.chat.id, + action=ChatAction.UPLOAD_DOCUMENT, + ) + + # Проверка на ошибку + except Exception as e: + Logs.error(log_type=self.log_type, user=username(message), text=f"Ошибка команды: {e}") diff --git a/BotLibrary/system/bots.py b/BotLibrary/system/bots.py index b27ae88..104a2f4 100644 --- a/BotLibrary/system/bots.py +++ b/BotLibrary/system/bots.py @@ -2,7 +2,6 @@ # Создание и настройка бота в одном файле from aiogram import Dispatcher, Bot, F -from aiogram.enums import ParseMode from aiogram.client.default import DefaultBotProperties from aiogram.utils.keyboard import InlineKeyboardBuilder, ReplyKeyboardBuilder @@ -34,12 +33,15 @@ dp["database"] = None # Настройки для бота bot_properties = DefaultBotProperties( - parse_mode=ParseMode.HTML, # Устанавливаем формат HTML для всех сообщений - disable_notification=True, # Отключаем уведомления при отправке сообщений - protect_content=True, # Защищаем содержимое сообщений от копирования - allow_sending_without_reply=True, # Разрешаем отправлять сообщения без ответа на другое сообщение - link_preview_is_disabled=True, # Отключаем предварительный просмотр ссылок - show_caption_above_media=False, # Показываем подпись выше медиа + parse_mode=BotVar.parse_mode, # Устанавливаем формат HTML для всех сообщений + disable_notification=BotVar.disable_notification, # Отключаем уведомления при отправке сообщений + protect_content=BotVar.protect_content, # Защищаем содержимое сообщений от копирования + allow_sending_without_reply=BotVar.allow_sending_without_reply, # Разрешаем отправлять сообщения без ответа на другое сообщение + link_preview_is_disabled=BotVar.link_preview_is_disabled, # Отключаем предварительный просмотр ссылок + link_preview_prefer_small_media=BotVar.link_preview_prefer_small_media, + link_preview_prefer_large_media=BotVar.link_preview_prefer_large_media, + link_preview_show_above_text=BotVar.link_preview_show_above_text, + show_caption_above_media=BotVar.show_caption_above_media, # Показываем подпись выше медиа ) # Создание экземпляра бота diff --git a/BotLibrary/system/directory.py b/BotLibrary/system/directory.py index 5c40c88..6518b06 100644 --- a/BotLibrary/system/directory.py +++ b/BotLibrary/system/directory.py @@ -6,9 +6,15 @@ from ProjectsFiles import ProjectPath, TypeDirectory from typing import List # Настройка экспорта из модуля -__all__ = ("create_directories", "setup_directories") +__all__ = ("create_directories", "setup_directories", "create_directory") +# Функция создания директории +async def create_directory(directory : str) -> None: + os.makedirs(directory) + + +# Функция создания поддиректорий async def create_directories(base_directory: str, subdirectories: List[str]) -> None: """ Создает указанные поддиректории в указанной базовой директории, если они еще не существуют. @@ -26,6 +32,7 @@ async def create_directories(base_directory: str, subdirectories: List[str]) -> print(f"Создана директория: {directory_path}") +# Функция установки начальных директорий async def setup_directories() -> None: """ Настройка начальных пустых директорий для проекта. diff --git a/ProjectsFiles/configs/__init__.py b/ProjectsFiles/configs/__init__.py index 00427b3..af82c60 100644 --- a/ProjectsFiles/configs/__init__.py +++ b/ProjectsFiles/configs/__init__.py @@ -4,3 +4,5 @@ # Экспортирование модулей во внешние слои проекта from .config import * from .primoenv import * +from .logs_config import * +from .project_path import * diff --git a/ProjectsFiles/configs/config.py b/ProjectsFiles/configs/config.py index 033e173..19c5604 100644 --- a/ProjectsFiles/configs/config.py +++ b/ProjectsFiles/configs/config.py @@ -1,18 +1,18 @@ # ProjectsFiles/config.py # Файл-хранилище всех конфигов и настроек для бота -from typing import List, Tuple +from typing import Tuple # Список разрешений для бота class Permissions: """ Класс для хранения настроек разрешений бота. """ - bot_edit : bool = False # Разрешение на изменение имени, описания и виджета (True/False) + bot_edit : bool = True # Разрешение на изменение имени, описания и виджета (True/False) delete_webhook : bool = True # Разрешение на удаление веб-хука (True/False) logging : bool = True # Разрешение на вывод логов в консоль (True/False) - logging_to_file : bool = False # Разрешение на вывод логов в файл (True/False) + logging_to_file : bool = True # Разрешение на вывод логов в файл (True/False) msg_logging : bool = False # Логирование сообщений в консоль (В разработке) start_info_console : bool = True # Вывод информации о боте в начале (True/False) @@ -58,73 +58,12 @@ class BotVar: time_format : str = "%Y-%m-%d %H:%M:%S" prefix : Tuple[str, ...] = ('$', '!', '.', '%', '&', ':', '|', '+', '-', '/', '~', '?') - -# Класс для хранения типов директорий -class TypeDirectory: - """ - Класс для хранения типов сообщений и директорий, которые нужно создать. - """ - # Типы сообщений и список директорий для создания - private_msg : str = "Личные" - group_msg : str = "Группы" - - # Названия директорий-хранилищ - avatar : str = "Avatar" - photo : str = "Photo" - video : str = "Video" - videonote : str = "VideoNote" - gif : str = "GIF" - files : str = "Document" - voice : str = "Voice" - media_directories : List[str] = [avatar, photo, video, videonote, gif, files, voice] - - -# Класс создания директорий проекта -class ProjectPath: - """ - Класс для хранения путей к проектам и логам. - """ - BotLogs : str = "BotLogs" - personal_media : str = "ProjectsFiles/media" - - -# Настройки логирования бота -class BotLogs: - """ - Класс для хранения параметров логирования: шаблоны логов, разрешения, размеры файлов и т. д. - """ - # Разрешение на ведение логов - permission : bool = Permissions.logging - permission_to_file : bool = Permissions.logging_to_file - permission_msg : bool = Permissions.msg_logging - - # Максимальный размер лог-файла - max_size : str = "500 MB" - - # Шаблон логов для отладки - debug_text : str = ( - "{time:YYYY-MM-DD HH:mm:ss} | " - "DEBUG-{extra[log_type]} | " - "{extra[user]} | {message}" - ) - - # Шаблон логов для информации - info_text : str = ( - "{time:YYYY-MM-DD HH:mm:ss} | " - "PRIMO-{extra[log_type]} | " - "{extra[user]} | {message}" - ) - - # Шаблон логов для предупреждений - warning_text : str = ( - "{time:YYYY-MM-DD HH:mm:ss} | " - "WARNING-{extra[log_type]} | " - "{extra[user]} | {message}" - ) - - # Шаблон логов для ошибок - error_text : str = ( - "{time:YYYY-MM-DD HH:mm:ss} | " - "ERROR-{extra[log_type]} | " - "{extra[user]} | {message}" - ) + parse_mode : str = "HTML" # Устанавливаем формат HTML для всех сообщений + disable_notification : bool = False # Отключаем уведомления при отправке сообщений + protect_content : bool = False # Защищаем содержимое сообщений от копирования + allow_sending_without_reply : bool = True # Разрешаем отправлять сообщения без ответа на другое сообщение + link_preview_is_disabled : bool = False # Отключаем предварительный просмотр ссылок + link_preview_prefer_small_media : bool = False + link_preview_prefer_large_media : bool = True + link_preview_show_above_text : bool = False + show_caption_above_media : bool = False # Показываем подпись выше медиа diff --git a/ProjectsFiles/configs/logs_config.py b/ProjectsFiles/configs/logs_config.py new file mode 100644 index 0000000..d01ff60 --- /dev/null +++ b/ProjectsFiles/configs/logs_config.py @@ -0,0 +1,53 @@ +# ProjectsFiles/configs/logs_config.py +# Конфиги настройки логов + +from .config import Permissions + +# Настройки логирования бота +class BotLogs: + """ + Класс для хранения параметров логирования: шаблоны логов, разрешения, размеры файлов и т. д. + """ + # Разрешение на ведение логов + permission : bool = Permissions.logging + permission_to_file : bool = Permissions.logging_to_file + permission_msg : bool = Permissions.msg_logging + + # Максимальный размер лог-файла + max_size : str = "500 MB" + + + # Шаблон логов для старта + start_text: str = ( + "{time:YYYY-MM-DD HH:mm:ss} | " + "{extra[system]}-{extra[log_type]} | " + "{extra[user]} | {message}" + ) + + # Шаблон логов для отладки + debug_text : str = ( + "{time:YYYY-MM-DD HH:mm:ss} | " + "{extra[system]}-{extra[log_type]} | " + "{extra[user]} | {message}" + ) + + # Шаблон логов для информации + info_text : str = ( + "{time:YYYY-MM-DD HH:mm:ss} | " + "{extra[system]}-{extra[log_type]} | " + "{extra[user]} | {message}" + ) + + # Шаблон логов для предупреждений + warning_text : str = ( + "{time:YYYY-MM-DD HH:mm:ss} | " + "{extra[system]}-{extra[log_type]} | " + "{extra[user]} | {message}" + ) + + # Шаблон логов для ошибок + error_text : str = ( + "{time:YYYY-MM-DD HH:mm:ss} | " + "{extra[system]}-{extra[log_type]} | " + "{extra[user]} | {message}" + ) diff --git a/ProjectsFiles/configs/project_path.py b/ProjectsFiles/configs/project_path.py new file mode 100644 index 0000000..a6f6e6f --- /dev/null +++ b/ProjectsFiles/configs/project_path.py @@ -0,0 +1,40 @@ +# ProjectsFiles/configs/project_path.py +# Хранилище всех важных директорий + +from typing import List + +# Класс для хранения типов директорий +class TypeDirectory: + """ + Класс для хранения типов сообщений и директорий, которые нужно создать. + """ + # Типы сообщений и список директорий для создания + private_msg : str = "Личные" + group_msg : str = "Группы" + + # Названия директорий-хранилищ + avatar : str = "Avatar" + photo : str = "Photo" + video : str = "Video" + videonote : str = "VideoNote" + gif : str = "GIF" + files : str = "Document" + voice : str = "Voice" + media_directories : List[str] = [avatar, photo, video, videonote, gif, files, voice] + + +# Класс создания директорий проекта +class ProjectPath: + """ + Класс для хранения путей к проектам и логам. + """ + BotLogs : str = "BotLogs" + start_log_file: str = f"{BotLogs}/start.log" + debug_log_file: str = f"{BotLogs}/debug.log" + info_log_file : str = f"{BotLogs}/info.log" + warning_log_file: str = f"{BotLogs}/warning.log" + error_log_file: str = f"{BotLogs}/error.log" + logs_path : List[str] = [debug_log_file, info_log_file, warning_log_file, error_log_file] + + + personal_media : str = "ProjectsFiles/media" diff --git a/main.py b/main.py index aaf771d..0e485ab 100644 --- a/main.py +++ b/main.py @@ -11,7 +11,7 @@ async def main(): # Функция создания логеров и получения информации о боте await setup_logger() await bot_get_info() - logger.bind(log_type="AEP", user="@Console").info(f"Начало запуска бота @{BotInfo.username}...") + Logs.start(text=f"Начало запуска бота @{BotInfo.username}...") # Создание пустых директорий await setup_directories()