Версия 1.0

This commit is contained in:
Whyverum
2025-05-20 09:12:05 +07:00
commit 0b3b957c0a
34 changed files with 1964 additions and 0 deletions

View File

@@ -0,0 +1,3 @@
from .md2_escape import *
from .usernames import *
from .pagination import *

View File

@@ -0,0 +1,36 @@
# BotCode/utils/md2_escape.py
from BotCode.config import PARSE_MODE
# Настройка экспорта в модули
__all__ = ("textmd2",)
def textmd2(msg: str,
parse_mode: str = PARSE_MODE,
special_chars: str = r"_*[]()~`>#+-=|{}.!") -> str:
"""
Экранирует специальные символы MarkdownV2 в переданном тексте.
:param msg: Входной текст в виде строки.
:param parse_mode: Формат форматирования ('MarkdownV2' или 'HTML').
:param special_chars: Символы, которые необходимо экранировать.
:return: Экранированный текст или исходный текст, если формат HTML.
:raises TypeError: Если передан не строковый тип данных.
:raises ValueError: Если parse_mode задан некорректно.
"""
from re import sub, escape
if not isinstance(msg, str):
raise TypeError(f"Ожидается строка, но получено {type(msg).__name__}")
if not isinstance(parse_mode, str):
raise TypeError(f"parse_mode должен быть строкой, но получено {type(parse_mode).__name__}")
if parse_mode.strip().lower() == "html":
return msg
elif parse_mode in {"markdownv2", "markdown"}:
return sub(rf"([{escape(special_chars)}])", r"\\\1", msg)
else:
raise ValueError(f"Недопустимое значение parse_mode: '{parse_mode}'. Ожидалось 'HTML' или 'MarkdownV2'")

View File

@@ -0,0 +1,22 @@
# BotCode/utils/pagination.py
from typing import List
from aiogram.types import InlineKeyboardButton
# Настройка экспорта в модули
__all__ = ('create_pagination_buttons',)
def create_pagination_buttons(action: str,
page: int = 0,
total_posts: int = 0,
bt_page: int = 5) -> List[InlineKeyboardButton]:
"""Создает кнопки для пагинации."""
navigation_buttons = []
if page > 0:
navigation_buttons.append(InlineKeyboardButton(
text="", callback_data=f"{action}_page_{page - 1}"
))
if (page + 1) * bt_page < total_posts:
navigation_buttons.append(InlineKeyboardButton(
text="", callback_data=f"{action}_page_{page + 1}"
))
return navigation_buttons

View File

@@ -0,0 +1,22 @@
# BotCode/utils/username.py
from aiogram.types import Message
# Настройка экспорта в модули
__all__ = ('username', )
# Функция получения юзера или ID пользователя
def username(message: Message) -> str:
"""
Возвращает юзернейм пользователя из сообщения, или ID, если юзернейм не указан.
:param message: Объект сообщения из aiogram.
:return: Строка с юзернеймом пользователя или его ID.
:raises ValueError: Если в сообщении отсутствует информация о пользователе.
"""
try:
if message.from_user:
return f"@{message.from_user.username}" if message.from_user.username else f"@{message.from_user.id}"
raise ValueError("Информация о пользователе отсутствует в сообщении.")
except ValueError as e:
raise e # Перебрасываем ошибку выше для дальнейшей обработки