- Python 83.2%
- JavaScript 10.4%
- CSS 3.8%
- HTML 2.6%
|
|
||
|---|---|---|
| make_streams | ||
| web | ||
| .env.example | ||
| .gitignore | ||
| bot3.py | ||
| channel_monitor.py | ||
| env_config.py | ||
| ip-check-formatted.txt | ||
| README.md | ||
| test_channel_monitor.py | ||
| vpndetect.txt | ||
Telegram File Upload Bot (bot3.py)
Актуальная версия бота находится в файле bot3.py.
Логика мониторинга Telegram-каналов и веб-панели вынесена в channel_monitor.py.
Что умеет bot3.py
- Навигация по папкам на сервере из Telegram
- Создание папок
- Загрузка файлов из Telegram в выбранную директорию
- Загрузка файлов по URL
- Добавление торрентов в TorrServer:
- по magnet-ссылке (
/torr) - по
.torrentфайлу (/torr_file)
- по magnet-ссылке (
- Запуск генерации
.strmчерез команду/parse_streams
Команды бота
/start— открыть меню навигации/check— проверка доступности/torr— добавить magnet (или перейти в режим ожидания magnet-ссылки)/torr_file— добавить.torrentфайл/cancel_torr— отменить ожидание magnet/файла/parse_streams— запустить локальный скрипт генерации.strm/check_release_diff— вручную проверить latest release GitHub и сравнить с локальными файлами/monitor— показать адрес веб-панели мониторинга Telegram-каналов
Скрипт для генерации стримов расположен в проекте:
make_streams/make_strm_from_torrserver3.py
Запуск генератора через веб страницу
make_streams/app.py — небольшая Flask-панель с кнопкой запуска генератора .strm. Она используется как отдельная веб интеграция.
Перед запуском проверьте константу SCRIPT в make_streams/app.py: она должна указывать на фактический путь к make_strm_from_torrserver3.py.
pip install flask
python3 make_streams/app.py
Панель доступна на http://<server>:8088.
Зависимости
Python 3.10+ (рекомендуется 3.12) и пакеты:
telethonrequestsflask— только для панели запуска через Homarr
Пример установки:
python3.12 -m venv venv
source venv/bin/activate
pip install telethon requests
Настройка
Все чувствительные данные вынесены в .env.
Создайте .env на основе шаблона:
cp .env.example .env
Обязательные переменные для bot3.py:
API_ID,API_HASH,BOT_TOKENALLOWED_USER_IDSTORRSERVER_URLBASE_DIR— список корневых папок через запятую (например:/mnt/disk/Plex/Library,/mnt/disk2/Library)BASE_DIR_LABELS(опционально) — подписи кнопок дляBASE_DIRв том же порядке (например:Library,Library2)
Дополнительно бот теперь умеет раз в день проверять последний GitHub Release и сравнивать его файлы с локальными файлами с теми же именами, например ip-check-formatted.txt и vpndetect.txt. Для этого доступны переменные:
GITHUB_RELEASE_REPO— репозиторий в форматеowner/repo(по умолчаниюfatyzzz/max-list)GITHUB_RELEASE_ASSETS— имена файлов из latest release через запятуюLOCAL_RELEASE_FILES_DIR— директория, где лежат локальные файлы для сравненияDAILY_RELEASE_CHECK_HOUR— час ежедневной проверкиDAILY_RELEASE_CHECK_MINUTE— минута ежедневной проверки
Для мониторинга Telegram-каналов доступны переменные:
WEB_HOST— host веб-панели (по умолчанию0.0.0.0)WEB_PORT— порт веб-панели (по умолчанию8089)CHANNEL_MONITOR_INTERVAL_SECONDS— период проверки новых сообщений (по умолчанию300)CHANNEL_MONITOR_CLIENT— клиент для чтения каналов:botилиuser(по умолчаниюbot)CHANNEL_MONITOR_USER_SESSION— имя.sessionфайла для пользовательской Telethon-сессииCHANNEL_MONITOR_PHONE— телефон аккаунта для первого интерактивного входа user-сессииCHANNEL_MONITOR_DIALOG_SEARCH_LIMIT— сколько ваших диалогов просматривать для подсказок каналов;0означает все диалогиCHANNEL_MONITOR_RULES_FILE— JSON-файл правил мониторингаCHANNEL_MONITOR_DOWNLOADED_FILE— JSON-файл message id, из которых контент уже скачан
Мониторинг каналов
После запуска откройте веб-панель на http://<server>:8089 или отправьте боту /monitor.
В панели можно:
- выбрать канал через автодополнение или вручную ввести
@username - задать ключевые слова для поиска в тексте/подписи сообщения
- ограничить поиск датой начала через календарь
- выбрать директорию сохранения внутри
BASE_DIR - выбрать стратегию именования файлов:
- оригинальное имя из Telegram
- канал + дата + id сообщения
- начало подписи + дата
- первое найденное ключевое слово + дата
- только id сообщения
- порядковый номер от последнего имени (
s01e02.mp4→s01e03.mp4) - регулярное выражение по оригинальному имени файла
При добавлении правила бот сразу проходит по доступной истории канала и скачивает найденные видео. Затем он периодически проверяет новые сообщения и докачивает новые совпадения. Чтобы не скачивать повторно, бот хранит message id в CHANNEL_MONITOR_DOWNLOADED_FILE. Об успешной или неудачной загрузке бот отправляет уведомление всем пользователям из ALLOWED_USER_IDS.
Для стратегии "Регулярное выражение" панель показывает оригинальное имя первого найденного видео по выбранному каналу и ключевым словам. В поле замены поддерживаются группы вида $1, $2, например Yomi no Tsugai - ([0-9]{2}) TG(\.mp4) и s01e$1$2.
Сканирование правил и скачивание медиа выполняются последовательно: одновременно обрабатывается только одно правило, а видео ставятся в общую очередь и скачиваются по одному файлу за раз.
Ограничение Telegram: если CHANNEL_MONITOR_CLIENT=bot, мониторинг работает от bot user и Telegram запрещает ему часть методов: глобальный поиск каналов, полноценный список ваших диалогов и доступ к вашим личным подпискам. Чтобы читать всё, что доступно вашему Telegram-аккаунту, включите пользовательскую сессию:
CHANNEL_MONITOR_CLIENT=user
CHANNEL_MONITOR_USER_SESSION=file_uploader_monitor_user
CHANNEL_MONITOR_PHONE=+79990000000
CHANNEL_MONITOR_DIALOG_SEARCH_LIMIT=0
Первый запуск с CHANNEL_MONITOR_CLIENT=user выполните вручную в терминале:
source venv/bin/activate
python3.12 bot3.py
Telethon попросит код входа из Telegram и, если включена, 2FA-пароль. После успешного входа рядом с проектом появится file_uploader_monitor_user.session; дальше сервис можно запускать как обычно. BOT_TOKEN при этом всё ещё используется для команд и уведомлений, а user-сессия используется только для поиска каналов, чтения истории и скачивания медиа.
Минимум проверьте перед запуском bot3.py:
- все пути из
BASE_DIRсуществуют и доступны пользователю процесса - в
LOCAL_RELEASE_FILES_DIRлежат локальные файлы с теми же именами, что и вGITHUB_RELEASE_ASSETS TORRSERVER_URLдоступен с сервера- GitHub доступен с сервера, чтобы бот мог читать latest release и скачивать assets
- в
ALLOWED_USER_IDSуказан ваш Telegram user id - порт
WEB_PORTдоступен с вашего компьютера, если веб-панель открывается не локально на сервере
Запуск
source venv/bin/activate
python3.12 bot3.py
Пример systemd unit
Создайте файл /etc/systemd/system/telegram_bot.service:
[Unit]
Description=Telegram File Upload Bot
After=network.target
[Service]
User=botuser
Group=botuser
WorkingDirectory=/opt/file-uploader-bot
ExecStart=/opt/file-uploader-bot/venv/bin/python3.12 /opt/file-uploader-bot/bot3.py
Restart=always
RestartSec=5
Environment=PATH=/usr/bin:/usr/local/bin
EnvironmentFile=/opt/file-uploader-bot/.env
[Install]
WantedBy=multi-user.target
Дальше:
sudo systemctl daemon-reload
sudo systemctl enable --now telegram_bot.service
sudo systemctl status telegram_bot.service