Версия 1.0
This commit is contained in:
3
BotCode/utils/__init__.py
Normal file
3
BotCode/utils/__init__.py
Normal file
@@ -0,0 +1,3 @@
|
||||
from .md2_escape import *
|
||||
from .usernames import *
|
||||
from .pagination import *
|
||||
36
BotCode/utils/md2_escape.py
Normal file
36
BotCode/utils/md2_escape.py
Normal 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'")
|
||||
22
BotCode/utils/pagination.py
Normal file
22
BotCode/utils/pagination.py
Normal 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
|
||||
22
BotCode/utils/usernames.py
Normal file
22
BotCode/utils/usernames.py
Normal 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 # Перебрасываем ошибку выше для дальнейшей обработки
|
||||
Reference in New Issue
Block a user