Код бота на Python (aiogram): Как добавить модератора по его Telegram ID с использованием HTML-разметки для создания активной ссылки на профиль?
При разработке Telegram-ботов на Python с использованием библиотеки aiogram часто возникает необходимость реализовать систему модерации. Одна из базовых задач — добавить пользователя в список модераторов по его Telegram ID и уведомить об этом с активной ссылкой на профиль.
**Принцип работы HTML-ссылки на профиль в Telegram**
Telegram поддерживает HTML-разметку в сообщениях. Для создания активной ссылки на профиль пользователя используется конструкция:
Эта ссылка работает даже если у пользователя нет username, так как опирается на числовой ID.
**Пример реализации на aiogram 3.x**
python
from aiogram import Bot, Dispatcher, Router
from aiogram.types import Message
from aiogram.filters import Command
from aiogram.enums import ParseMode
bot = Bot(token=»YOUR_BOT_TOKEN», parse_mode=ParseMode.HTML)
dp = Dispatcher()
router = Router()
# Список модераторов (можно хранить в БД)
moderators = set()
# ID администратора, который может добавлять модераторов
ADMIN_ID = 123456789
@router.message(Command(«add_moderator»))
async def add_moderator(message: Message):
# Проверяем, что команду выполняет администратор
if message.from_user.id != ADMIN_ID:
await message.answer(«У вас нет прав для выполнения этой команды.»)
return
# Получаем аргумент команды (Telegram ID)
args = message.text.split()
if len(args) < 2:
await message.answer("Использование: /add_moderator «)
return
try:
moderator_id = int(args[1])
except ValueError:
await message.answer(«Telegram ID должен быть числом.»)
return
if moderator_id in moderators:
await message.answer(
f»Пользователь {moderator_id} »
f»уже является модератором.»
)
return
# Добавляем в список модераторов
moderators.add(moderator_id)
await message.answer(
f»✅ Пользователь {moderator_id} »
f»успешно добавлен в список модераторов!»
)
dp.include_router(router)
if __name__ == «__main__»:
import asyncio
asyncio.run(dp.start_polling(bot))
**Как это работает**
1. Команда `/add_moderator 987654321` принимает Telegram ID как аргумент.
2. Проверяется, является ли отправитель администратором.
3. ID добавляется в множество `moderators`.
4. Бот отправляет подтверждение с кликабельной ссылкой на профиль через `tg://user?id=`.
**Важные замечания**
— Всегда устанавливайте `parse_mode=ParseMode.HTML` при инициализации бота или передавайте его в конкретный вызов `answer()`.
— Для продакшн-решения рекомендуется хранить список модераторов в базе данных (SQLite, PostgreSQL).
— Ссылка `tg://user?id=` отображает имя пользователя только если бот ранее взаимодействовал с ним или пользователь состоит в общем чате.
— В aiogram 2.x синтаксис немного отличается: используется `Dispatcher(bot)` и декораторы `@dp.message_handler`.
