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()