Telegram-бот для автоматической пересылки сообщений из нескольких каналов-источников в один целевой канал с опциональной премодерацией.
- Автоматическая пересылка сообщений из множества каналов в один целевой канал
- Премодерация - все сообщения сначала отправляются администратору для одобрения/отклонения
- Поддержка медиа - фото, видео, альбомы (media groups)
- Админ-панель - удобное управление через Telegram
- Отказоустойчивость - автоматическое восстановление при сбоях
- Логирование - полная история работы бота
Бот использует две библиотеки для работы с Telegram:
- Telethon (клиент пользователя) - мониторит каналы-источники и пересылает сообщения
- Aiogram (бот API) - предоставляет админ-панель и кнопки модерации
Такая архитектура позволяет обойти ограничение Bot API на чтение сообщений из каналов.
- Python 3.11+
- Docker & Docker Compose (опционально, но рекомендуется)
- Telegram аккаунт для Telethon
- Telegram Bot Token от @BotFather
- Telegram API ID и API Hash от my.telegram.org
API ID и API Hash:
- Зайдите на my.telegram.org
- Войдите со своим номером телефона
- Перейдите в "API development tools"
- Создайте приложение и скопируйте
api_idиapi_hash
Bot Token:
- Напишите @BotFather
- Создайте нового бота командой
/newbot - Скопируйте полученный токен
Admin IDs:
- Напишите @userinfobot
- Скопируйте ваш ID
Создайте файл .env в корне проекта:
BOT_TOKEN=1234567890:ABCdefGHIjklMNOpqrsTUVwxyz
API_ID=12345678
API_HASH=1234567890abcdef1234567890abcdef
ADMIN_IDS=123456789,987654321
PHONE_NUMBER=+79991234567BOT_TOKEN- токен от BotFather (обязательно)API_ID- ID от my.telegram.org (обязательно)API_HASH- Hash от my.telegram.org (обязательно)ADMIN_IDS- ID администраторов через запятую (обязательно)PHONE_NUMBER- номер телефона для Telethon (опционально, можно ввести при первом запуске)
# Сборка и запуск
docker-compose up -d
# Просмотр логов
docker-compose logs -f
# Остановка
docker-compose down
# Перезапуск
docker-compose restart# Создать виртуальное окружение
python -m venv venv
# Активировать (Windows)
venv\Scripts\activate
# Активировать (Linux/Mac)
source venv/bin/activate
# Установить зависимости
pip install -r requirements.txt
# Запустить бота
python main.pyПри первом запуске Telethon попросит:
- Ввести номер телефона (если не указан в
.env) - Ввести код из SMS/Telegram
- Ввести пароль 2FA (если включен)
После этого сессия сохранится в data/telegrabber_user_session и повторный ввод не потребуется.
- Напишите боту
/admin - Откроется панель управления:
Админ-панель
Текущие настройки:
Целевой канал: @mychannel
Источников: 3
Премодерация: ВКЛ
- Нажмите "Добавить источник"
- Отправьте:
- Ссылку:
https://t.me/channelname - Username:
@channelname - ID:
-1001234567890
- Ссылку:
Бот автоматически подпишется на публичный канал и добавит его в источники.
Возможные сообщения:
Автоматически подписались на канал- успешная подпискаУже подписаны на канал- вы уже были подписаныПриватный канал - подпишитесь вручную- требуется invite linkЭто чат (группа)- для групп нужно быть участником
- Нажмите "Установить целевой канал"
- Отправьте username или ID канала
- Бот должен быть администратором в этом канале!
Включена (по умолчанию):
- Все сообщения сначала приходят вам для одобрения
- Нажмите "Одобрить" - сообщение опубликуется
- Нажмите "Отклонить" - сообщение удалится
Выключена:
- Сообщения автоматически публикуются в целевом канале
- Подходит если вы доверяете источникам
Нажмите "Список источников" чтобы увидеть все добавленные каналы. Можно удалить любой источник одним нажатием.
TGgrabber/
├── main.py # Точка входа, инициализация
├── config.py # Конфигурация и настройки
├── requirements.txt # Зависимости Python
├── .env # Переменные окружения (создать вручную)
├── Dockerfile # Образ Docker
├── docker-compose.yml # Оркестрация Docker
├── .gitignore # Исключения для Git
├── README.md # Этот файл
│
├── app/
│ ├── handlers/ # Обработчики команд и событий
│ │ ├── common.py # /start, /help, /admin
│ │ ├── admin.py # Настройка каналов
│ │ └── moderation.py # Одобрение/отклонение
│ │
│ ├── keyboards/ # Inline-клавиатуры
│ │ └── inline.py # Кнопки админ-панели
│ │
│ ├── states/ # FSM состояния
│ │ └── admin_states.py # Состояния админских диалогов
│ │
│ ├── telethon_client/ # Telethon listener
│ │ └── listener.py # Мониторинг каналов-источников
│ │
│ └── utils/ # Вспомогательные функции
│ └── tools.py # Проверка админов, резолв сущностей
│
└── data/ # Данные (создается автоматически)
├── settings.json # Настройки бота
├── moderation_queue.json # Очередь модерации
├── bot.log # Логи (с ротацией)
└── telegrabber_user_session # Сессия Telethon
# Docker
docker-compose logs -f
# Локально - в реальном времени
tail -f data/bot.log
# Последние 100 строк
tail -100 data/bot.log
# Только ошибки
grep ERROR data/bot.logБот запущен:
docker-compose ps
# Должно быть "Up"Telethon подключен:
tail -50 data/bot.log | grep "LISTENER:"
# Если есть строки - значит получает сообщенияПричина 1: Автоподписка не сработала (приватный канал)
Решение:
- Получите invite link от администратора канала
- Зайдите с вашего аккаунта (номер из
PHONE_NUMBER) - Подпишитесь по ссылке вручную
- Канал уже добавлен в источники - просто подождите новые сообщения
Причина 2: Канал добавлен, но сообщений еще не было
Решение:
- Бот видит только новые сообщения после добавления источника
- Подождите, пока в канале появится новый пост
Это нормально. Telegram ограничивает активность. Бот автоматически подождет и повторит.
Причина: Бот не админ в целевом канале
Решение:
- Добавьте бота в канал как администратора
- Дайте права на публикацию сообщений
- Установите канал заново через
/admin
Причина: Сессия не сохраняется
Решение: Проверьте, что volume смонтирован (Docker) и папка data/ доступна для записи.
Причина: Запущено 2 экземпляра бота
Решение:
# Остановите все экземпляры
docker-compose down
pkill -f main.py
# Запустите только один
docker-compose up -dQ: Можно ли добавить приватный канал? A: Да! Для публичных каналов бот подпишется автоматически. Для приватных нужно подписаться вручную по invite link, затем добавить канал в бот.
Q: Бот автоматически подписывается на каналы? A: Да, на публичные каналы бот подписывается автоматически при добавлении в источники.
Q: Можно ли пересылать в несколько целевых каналов? A: Нет, текущая версия поддерживает только один целевой канал.
Q: Как отключить премодерацию?
A: /admin → переключатель "Премодерация: ВКЛ/ВЫКЛ"
Q: Бот видит старые сообщения? A: Нет, только новые сообщения после запуска listener.
MIT License
magerko — Telegram-канал