Skip to content

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

1 Commit
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

TGgrabber

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

Быстрый старт

1. Получите необходимые данные

API ID и API Hash:

  1. Зайдите на my.telegram.org
  2. Войдите со своим номером телефона
  3. Перейдите в "API development tools"
  4. Создайте приложение и скопируйте api_id и api_hash

Bot Token:

  1. Напишите @BotFather
  2. Создайте нового бота командой /newbot
  3. Скопируйте полученный токен

Admin IDs:

  1. Напишите @userinfobot
  2. Скопируйте ваш ID

2. Настройте окружение

Создайте файл .env в корне проекта:

BOT_TOKEN=1234567890:ABCdefGHIjklMNOpqrsTUVwxyz
API_ID=12345678
API_HASH=1234567890abcdef1234567890abcdef
ADMIN_IDS=123456789,987654321
PHONE_NUMBER=+79991234567
  • BOT_TOKEN - токен от BotFather (обязательно)
  • API_ID - ID от my.telegram.org (обязательно)
  • API_HASH - Hash от my.telegram.org (обязательно)
  • ADMIN_IDS - ID администраторов через запятую (обязательно)
  • PHONE_NUMBER - номер телефона для Telethon (опционально, можно ввести при первом запуске)

3. Запуск

Вариант A: Docker (рекомендуется)

# Сборка и запуск
docker-compose up -d

# Просмотр логов
docker-compose logs -f

# Остановка
docker-compose down

# Перезапуск
docker-compose restart

Вариант B: Локальный Python

# Создать виртуальное окружение
python -m venv venv

# Активировать (Windows)
venv\Scripts\activate

# Активировать (Linux/Mac)
source venv/bin/activate

# Установить зависимости
pip install -r requirements.txt

# Запустить бота
python main.py

4. Первоначальная настройка

При первом запуске Telethon попросит:

  1. Ввести номер телефона (если не указан в .env)
  2. Ввести код из SMS/Telegram
  3. Ввести пароль 2FA (если включен)

После этого сессия сохранится в data/telegrabber_user_session и повторный ввод не потребуется.

Использование

Админ-панель

  1. Напишите боту /admin
  2. Откроется панель управления:
Админ-панель

Текущие настройки:
Целевой канал: @mychannel
Источников: 3
Премодерация: ВКЛ

Добавление канала-источника

  1. Нажмите "Добавить источник"
  2. Отправьте:
    • Ссылку: https://t.me/channelname
    • Username: @channelname
    • ID: -1001234567890

Бот автоматически подпишется на публичный канал и добавит его в источники.

Возможные сообщения:

  • Автоматически подписались на канал - успешная подписка
  • Уже подписаны на канал - вы уже были подписаны
  • Приватный канал - подпишитесь вручную - требуется invite link
  • Это чат (группа) - для групп нужно быть участником

Установка целевого канала

  1. Нажмите "Установить целевой канал"
  2. Отправьте username или ID канала
  3. Бот должен быть администратором в этом канале!

Премодерация

Включена (по умолчанию):

  • Все сообщения сначала приходят вам для одобрения
  • Нажмите "Одобрить" - сообщение опубликуется
  • Нажмите "Отклонить" - сообщение удалится

Выключена:

  • Сообщения автоматически публикуются в целевом канале
  • Подходит если вы доверяете источникам

Список источников

Нажмите "Список источников" чтобы увидеть все добавленные каналы. Можно удалить любой источник одним нажатием.

Структура проекта

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:"
# Если есть строки - значит получает сообщения

Troubleshooting

Бот не получает сообщения из каналов

Причина 1: Автоподписка не сработала (приватный канал)

Решение:

  1. Получите invite link от администратора канала
  2. Зайдите с вашего аккаунта (номер из PHONE_NUMBER)
  3. Подпишитесь по ссылке вручную
  4. Канал уже добавлен в источники - просто подождите новые сообщения

Причина 2: Канал добавлен, но сообщений еще не было

Решение:

  • Бот видит только новые сообщения после добавления источника
  • Подождите, пока в канале появится новый пост

"FloodWait" ошибки

Это нормально. Telegram ограничивает активность. Бот автоматически подождет и повторит.

Бот не отправляет в целевой канал

Причина: Бот не админ в целевом канале

Решение:

  1. Добавьте бота в канал как администратора
  2. Дайте права на публикацию сообщений
  3. Установите канал заново через /admin

Telethon просит код при каждом запуске

Причина: Сессия не сохраняется

Решение: Проверьте, что volume смонтирован (Docker) и папка data/ доступна для записи.

Сообщения дублируются

Причина: Запущено 2 экземпляра бота

Решение:

# Остановите все экземпляры
docker-compose down
pkill -f main.py

# Запустите только один
docker-compose up -d

FAQ

Q: Можно ли добавить приватный канал? A: Да! Для публичных каналов бот подпишется автоматически. Для приватных нужно подписаться вручную по invite link, затем добавить канал в бот.

Q: Бот автоматически подписывается на каналы? A: Да, на публичные каналы бот подписывается автоматически при добавлении в источники.

Q: Можно ли пересылать в несколько целевых каналов? A: Нет, текущая версия поддерживает только один целевой канал.

Q: Как отключить премодерацию? A: /admin → переключатель "Премодерация: ВКЛ/ВЫКЛ"

Q: Бот видит старые сообщения? A: Нет, только новые сообщения после запуска listener.

Лицензия

MIT License

Автор

magerkoTelegram-канал

About

A Telegram bot for automatically forwarding messages from multiple source channels to a single target channel with optional pre-moderation.

Resources

Stars

31 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages