Код бота на 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`.


Задайте вопрос нейросети

Не нашли ответ? Спросите ИИ — он подготовит развёрнутую статью.