Telegram-бот, который собирает и хранит события из раздела «Недавние действия» админ-панели канала: вступления, выходы, баны, правки сообщений и др.
Bot API не отдаёт admin log. Для чтения «Недавних действий» используется Telethon (MTProto) с user-сессией аккаунта-админа канала. Сам бот (aiogram) нужен для команд просмотра и push-уведомлений админам.
- Python 3.11+
- Аккаунт Telegram с правами администратора в целевом канале
api_id/api_hashс my.telegram.org- Токен бота от @BotFather
cd channel_admin_log_bot
python -m venv .venv
.venv\Scripts\activate # Windows
pip install -r requirements.txt
copy .env.example .env # заполните переменные- Скопируйте
.env.example→.envи заполнитеBOT_TOKEN,TELEGRAM_API_ID,TELEGRAM_API_HASH,CHANNEL_USERNAME,ADMIN_IDS. - Создайте Telethon-сессию (один раз):
python scripts/create_session.pyСкопируйте выведенный TELEGRAM_SESSION в .env.
Если create_session.py выдаёт TimeoutError — это блокировка MTProto в сети (Bot API при этом может работать). Включите VPN и укажите прокси в .env:
TELEGRAM_PROXY_TYPE=socks5
TELEGRAM_PROXY_HOST=127.0.0.1
TELEGRAM_PROXY_PORT=1080Порт и тип смотрите в настройках вашего VPN-клиента (Clash, V2Ray, Hiddify и т.д.).
- Убедитесь, что user-аккаунт сессии — админ канала (достаточно права просмотра admin log).
- Запустите бота и напишите ему
/startиз аккаунта, чей ID указан вADMIN_IDS.
python -m appПри первом запуске загружаются последние INITIAL_BACKFILL_LIMIT (по умолчанию 500) событий без уведомлений. Далее каждые POLL_INTERVAL_SECONDS секунд подтягиваются новые события; по настраиваемым типам отправляются уведомления в личку админам.
На VPS MTProto обычно работает без прокси — create_session.py удобнее запускать прямо на сервере.
# с вашего ПК (пример)
scp -r channel_admin_log_bot user@your-server:~/Или через git:
ssh user@your-server
git clone <url> ~/channel_admin_log_bot
cd ~/channel_admin_log_botcp .env.example .env
nano .envЗаполните BOT_TOKEN, TELEGRAM_API_ID, TELEGRAM_API_HASH, CHANNEL_USERNAME, ADMIN_IDS.
chmod +x scripts/setup_server.sh scripts/deploy.sh
./scripts/setup_server.sh # venv + systemd unit
venv/bin/python scripts/create_session.py
nano .env # вставьте TELEGRAM_SESSIONsudo systemctl start channel-admin-log-bot
sudo systemctl status channel-admin-log-bot
sudo journalctl -u channel-admin-log-bot -f./scripts/deploy.shПеременные для setup_server.sh:
| Переменная | По умолчанию | Описание |
|---|---|---|
SERVICE_USER |
текущий пользователь | User в systemd |
APP_DIR |
корень репозитория | Путь к проекту |
SYSTEMD_SERVICE |
channel-admin-log-bot.service |
Имя unit-файла |
| Команда | Описание |
|---|---|
/start, /help |
Справка |
/recent [N] |
Последние N событий (20 по умолчанию, макс. 50) |
/joins [N] |
Только вступления |
/leaves [N] |
Только выходы |
/stats |
Сводка за сегодня и 7 дней |
/user <id|@username> |
События, связанные с пользователем |
| Переменная | Описание |
|---|---|
BOT_TOKEN |
Токен aiogram-бота |
TELEGRAM_API_ID |
API ID с my.telegram.org |
TELEGRAM_API_HASH |
API Hash |
TELEGRAM_SESSION |
StringSession после create_session.py |
CHANNEL_USERNAME |
@channel или channel |
ADMIN_IDS |
ID админов бота через запятую |
ADMIN_NOTIFY_IDS |
Кому слать уведомления (по умолчанию = ADMIN_IDS) |
NOTIFY_EVENT_TYPES |
Типы для push: join,leave,ban,kick,unban |
POLL_INTERVAL_SECONDS |
Интервал опроса admin log (30) |
INITIAL_BACKFILL_LIMIT |
Сколько событий загрузить при первом запуске (500) |
DATABASE_PATH |
Путь к SQLite (data/bot.db) |
TELEGRAM_PROXY_TYPE |
socks5, http или mtproxy (если MTProto заблокирован) |
TELEGRAM_PROXY_HOST |
Хост прокси, часто 127.0.0.1 |
TELEGRAM_PROXY_PORT |
Порт прокси |
TELEGRAM_MTPROXY_SECRET |
Секрет для MTProxy |
TELEGRAM_CONNECT_TIMEOUT |
Таймаут подключения Telethon в секундах (30) |
app/
main.py # Telethon sync + aiogram polling
collectors/admin_log.py # сбор событий
handlers/log.py # команды бота
services/ # форматирование и уведомления
db.py # SQLite
scripts/create_session.py
Данные хранятся локально в SQLite. Дубликаты отсекаются по event_id из Telegram.