Skip to content
ReNothinggPublic

About

Telegram-бот для скачивания видео и медиаконтента.

Topics

Resources

Stars

10 stars

Watchers

0 watching

Forks

Repository files navigation

ReSave

ReSave

Видео, музыка и фото — по ссылке в Telegram.

Открыть @ReSafeBot

Python 3.11+ aiogram 3 Apache 2.0

Возможности · Запуск · Настройки


Ссылка → формат → файл

Пришлите ссылку на публикацию, выберите качество или формат и получите файл в том же чате.

Возможности

Формат Возможности
Видео Выбор разрешения или лучшего качества
Аудио Извлечение MP3
Фото Обложки видео и фотоальбомы TikTok
GIF Конвертация роликов до 30 секунд
Субтитры Обычные и автоматически созданные
Плейлисты Добавление видео в очередь с лимитом
Оформление Rich Messages с превью, чек-листами и таблицами, цветные кнопки, анимированные премиум-эмодзи, эффекты сообщений

YouTube · TikTok · Instagram · X / Twitter · Vimeo · Reddit

И другие источники, поддерживаемые yt-dlp. Доступность зависит от сайта и прав доступа к публикации.

В личном чате доступен выбор формата. В группах бот скачивает автоматически, с ориентиром на 720p.

Команды
Команда Действие
/start Главное меню
/help Инструкция и лимиты
/status Текущие загрузки
/cancel Отмена проверки ссылки и загрузок до отправки
/stats Личная статистика
/admin Управление ботом
/broadcast Рассылка с подтверждением и остановкой
/stats_global Общая статистика

Последние три команды доступны администраторам в личном чате.

Рассылка получает всех, кто хоть раз писал боту и не заблокировал его.

  • Пост любого типа: текст, медиа, стикер, голосовое или альбом до 10 файлов.
  • Перед отправкой — точная копия. Можно добавить кнопки-ссылки, эффект 🎉🔥❤️👍 и отправку без звука.
  • Живой прогресс: доставлено, заблокировали, скорость, сколько осталось. Паузы Telegram бот выдерживает сам.
  • Прогресс хранится в базе: после перезапуска бот предложит продолжить, без повторной отправки.
  • «Отозвать у всех» удаляет пост у получателей (Telegram разрешает в течение 48 часов).
  • Те, кто заблокировал бота, автоматически исключаются из следующих рассылок.

Запуск на сервере

Нужны: Docker с Compose. Хватает 4 ГБ RAM и ~9 ГБ диска.

git clone https://github.com/ReNothingg/ReSave.git
cd ReSave
cp .env.example .env

Заполните в .env BOT_TOKEN, ADMIN_IDS, TELEGRAM_API_ID и TELEGRAM_API_HASH (последние два — на my.telegram.org/apps), затем:

docker compose up -d --build

Поднимутся два контейнера: бот и локальный Telegram Bot API (файлы до 2 ГБ). Оба перезапускаются сами после падения и после перезагрузки сервера.

Действие Команда
Логи docker compose logs -f --tail 100 bot
Перезапуск docker compose restart bot
Обновление кода git pull && docker compose up -d --build
Загрузить cookies docker compose cp cookies.txt bot:/data/cookies.txt

Надёжность

  • Каждая загрузка и проверка ссылки идёт в отдельном процессе. Зависший yt-dlp убивается по таймауту или при отсутствии прогресса и не блокирует очередь.
  • yt-dlp, yt-dlp-ejs и gallery-dl обновляются сами каждые несколько часов, без перезапуска бота: сайты часто ломают старые версии.
  • Если не получилось в выбранном качестве, бот пробует качество ниже и любой доступный формат.
  • Перед загрузкой и во время неё проверяется свободное место на диске.
  • Временные файлы чистятся каждые 30 минут.
  • Если бот зависнет целиком, он сам завершится, и Docker его перезапустит.

Настройки

Все параметры — в .env.example.

Параметр Назначение
ADMIN_IDS ID администраторов через запятую
MAX_CONCURRENT_DOWNLOADS Параллельные загрузки · 1 для сервера на 4 ГБ
MAX_TASKS_PER_USER Задачи одного пользователя
MAX_PLAYLIST_ITEMS Видео из одного плейлиста · 25
MAX_FILE_SIZE Максимальный размер файла в байтах
MIN_FREE_DISK_MB Сколько места оставлять свободным · 512
DOWNLOAD_STALL_TIMEOUT_SECONDS Через сколько секунд без прогресса загрузка прерывается
TOOLS_AUTO_UPDATE Автообновление yt-dlp и gallery-dl
Cookies и хранение данных
  • Cookies в формате Netscape — cookies.txt. Бот использует временные копии.
  • Статистика — database.db (SQLite).
  • Данные бота в Docker лежат в томе bot-data (/data внутри контейнера).
  • Очередь и меню хранятся в памяти: после перезапуска незавершённые запросы нужно отправить снова.
Для разработки

Оформление включено по умолчанию: RICH_MESSAGES_ENABLED=true, CUSTOM_EMOJI_ENABLED=true. Эмодзи взяты из набора Telegram Topics и проверены как анимированные. Для их использования нужен Premium у владельца бота либо дополнительный username с Fragment. Если API отклоняет эмодзи, бот сохраняет Rich Messages и цветные кнопки, заменяя иконки на обычные. Для API без Rich Messages предусмотрено HTML-оформление.

Локальный запуск на тестовом боте (нужны uv, FFmpeg и Deno). Создайте .env.local — его значения важнее .env, а в git он не попадает:

BOT_TOKEN=токен_тестового_бота
BOT_API_BASE_URL=
STATS_DB_PATH=local.db
TEMP_DIR=temp_local
uv run --no-project --python 3.12 --with-requirements requirements.txt python main.py

uv сам скачает Python и зависимости, ничего настраивать не нужно.

Без локального Bot API лимит файла — 50 МБ, и длинные видео придут в низком качестве. Чтобы получить лимит 2 ГБ, поднимите Bot API в Docker и добавьте в .env.local:

docker compose up -d telegram-bot-api
BOT_API_BASE_URL=http://127.0.0.1:8081
BOT_API_IS_LOCAL=true
MAX_FILE_SIZE=2097152000
SEND_AS_DOC_LIMIT=2097152000
Путь Ответственность
main.py Запуск и сборка сервисов
src/handlers/ Команды, меню и административные действия
src/core/ Очередь, скачивание, обработка и отправка
src/core/ytdlp_worker.py Изолированный процесс yt-dlp
src/utils/ Форматирование текста и работа с файлами

About

Telegram-бот для скачивания видео и медиаконтента.

Topics

Resources

Stars

10 stars

Watchers

0 watching

Forks

Used by

Contributors

Languages