Skip to content
Digidr0Public

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Repository files navigation

TeleDrop

Windows 11-приложение, которое получает фото и видео от Telegram-бота и сохраняет их в выбранную папку. Rust + Tauri 2, Svelte 5, SQLite и Hugeicons. Интерфейс на русском языке.

Версия: 1.0.0. Скачать актуальный релиз. Rust управляет соединением, очередью и состояниями файлов; frontend отображает команды и события backend.

Быстрый запуск

  1. Установите TeleDrop через Windows installer или распакуйте portable ZIP и запустите TeleDrop.exe.
  2. Найдите официального @BotFather в Telegram. Отправьте /newbot, задайте отображаемое имя, затем уникальный username, заканчивающийся на bot (например, my_media_receiver_bot). BotFather выдаст токен доступа. Скопируйте его только в TeleDrop: не отправляйте его в GitHub, сообщения об ошибках или скриншоты. Если токен раскрыт, отзовите его через BotFather командой /revoke и сохраните новый в приложении.
  3. В TeleDrop откройте Настройки → Токен бота, вставьте токен и нажмите Проверить и сохранить. Приложение вызовет getMe и сохранит токен в Windows Credential Manager.
  4. Выберите папку кнопкой Обзор…, сохраните настройки.
  5. На странице Главная нажмите Подключиться. Статус «Подключён» появляется только после успешного ответа long polling, а не из-за наличия токена.
  6. Откройте чат вашего бота в Telegram, нажмите Start и отправьте фото или видео до 20 MB.
  7. Прогресс появится в разделе Загрузки, результат — в Истории. У завершённого файла доступны открытие и показ в Проводнике.

Бот получает только доступные ему сообщения. У групп есть правила Telegram privacy mode и права доступа; проще начать с личного чата с ботом. Бот не читает вашу старую переписку и не использует Telegram user-account session.

Что реализовано

  • Фото в наибольшем доступном размере, видео и документы с MIME video/*.
  • Long polling, проверка токена, обработка revoked token, HTTP-ошибок, retry_after и повторное подключение после потери сети.
  • Сохранение Telegram update offset в одной транзакции с заданиями до подтверждения обновлений следующим запросом.
  • Очередь в SQLite, до 10 000 незавершённых заданий; 1–6 одновременных загрузок, по умолчанию 2.
  • Потоковая запись без удержания целого файла в памяти, реальные байты и скорость, неопределённый прогресс при неизвестном размере.
  • Отмена, ручной повтор, до пяти автоматических попыток скачивания с backoff и jitter.
  • Временные .part в целевой файловой системе; sync_all и Windows move без перезаписи существующего файла.
  • Windows-санитизация имён, Unicode, суффиксы при коллизиях, SHA-256 для сверки финализации после сбоя.
  • Дедупликация обновлений; опциональный пропуск повторного file_unique_id в пределах одного бота.
  • Постоянная история с поиском, фильтрами и страницами по 50 записей; журнал событий.
  • Light / Dark / System, сохранение темы и нативная рамка окна.
  • Нативный выбор папки, открытие файлов/папок в Explorer, необязательные Windows-уведомления.
  • Единственный экземпляр приложения: повторный запуск поднимает существующее окно.
  • Необязательное подключение при запуске приложения; аккуратное завершение и сохранение очереди при закрытии.
  • Опциональный список разрешённых chat ID.

Обновление приложения

TeleDrop проверяет стабильный релиз GitHub при запуске и каждые 6 часов. Если опубликована более новая версия, под логотипом в левом меню появляется кнопка с иконкой «Доступна версия …». Кнопка открывает страницу релиза: закройте приложение и установите новую версию либо замените portable EXE. Автоматическая установка не выполняется. История и настройки сохраняются в профиле Windows.

Для выпуска обновления создайте публичный GitHub Release с тегом v1.0.1 (или другой большей SemVer-версией), не отмечая его как draft/prerelease. Версию внутри сборки тоже нужно повысить. Недоступность GitHub не мешает загрузкам, но проверка обновлений требует интернета. Запрос не содержит токен Telegram или данные ваших файлов.

Честные ограничения

  • В блоке Telegram есть отдельная проверка доступности api.telegram.org (HTTPS без токена), автоматическая и по кнопке. Она не подменяет подключение бота и не доказывает причину сетевой ошибки; при блокировке потребуется рабочее сетевое соединение, например VPN.

  • После успешного сохранения бот отправляет реакцию ⚡ на сообщение. Для альбома — по мере сохранения каждого файла; это не подтверждение целого альбома. Чат может запрещать реакцию, Telegram может отклонить запрос. Ошибка реакции записывается в журнал и не отменяет сохранение файла; повторная отправка реакции пока не реализована.

  • /start из разрешённого чата вызывает системное уведомление Windows независимо от настройки уведомлений о файлах. Приложение должно быть подключено; доставка уведомлений зависит от настроек Windows.

  • Hosted Telegram Bot API позволяет скачивать файлы до 20 MB. Размер проверяется по метаданным и при streaming. Большие файлы получают понятную ошибку. Воспроизведение скачанных видео зависит от установленного в Windows проигрывателя и его кодеков.

  • Telegram хранит pending updates не более 24 часов. Сообщения, которые уже исчезли из очереди Telegram, приложение восстановить не может.

  • Прерванный файл скачивается с начала. HTTP Range / byte-level resume не реализован.

  • Альбом — несколько файлов с общим media_group_id. API не сообщает, что весь альбом завершён; приложение не обещает атомарное скачивание альбома.

  • Изменение папки применяется к новым сообщениям. Принятые задания сохраняют исходный путь. После смены бота задания предыдущего бота остаются в истории и ожидают подключения именно того бота.

  • Пропуск повторов ориентируется на метаданные Telegram и историю. Если сохранённый файл вручную удалён, пришедший повтор может быть пропущен. Отключите пропуск повторов перед повторной отправкой.

  • Уже установленный webhook не удаляется автоматически. При конфликте с webhook или другим poller требуется освободить бота.

  • Трей, минимизация в трей и автозапуск с Windows пока не реализованы. Закрытие окна завершает TeleDrop. Опция «Подключаться при запуске» не является Windows autostart.

  • Local Bot API пока не является пользовательской настройкой; описана точка расширения.

  • Артефакты не подписаны сертификатом издателя. SmartScreen может показывать предупреждение. Не отключайте защиту Windows ради незнакомого файла.

  • Автоматические тесты используют mock Telegram. Успешный реальный E2E с вашим ботом нужно подтвердить по чеклисту.

WebView2 и portable

TeleDrop использует Microsoft Edge WebView2 Evergreen Runtime, обычно присутствующий в Windows 11. Installer проверяет runtime и при необходимости скачивает официальный bootstrapper; для этого нужен интернет.

Portable/EXE требуют уже установленного WebView2. Node.js, npm, Rust, MCP, Chromium для тестов и Docker для пользователя не нужны.

Portable означает запуск без установки, а не переносимый профиль: настройки и Credential Manager привязаны к Windows-пользователю. Установленная и portable-версия используют один профиль и не запускаются одновременно. Один EXE приложения не является полностью автономным single-file-продуктом: WebView2 остаётся внешней зависимостью.

Данные и безопасность

Данные Расположение Windows
SQLite: история, настройки, задания и offsets %APPDATA%\app.teledrop.desktop\teledrop.sqlite
WebView2-профиль и технические логи %LOCALAPPDATA%\app.teledrop.desktop\
Технические логи Подпапка logs, до 7 дневных файлов
Токен Windows Credential Manager, service TeleDrop, account telegram-bot-token
Фото/видео Только выбранная папка, при необходимости Photos / Videos

Токен кратковременно находится в поле ввода и IPC при настройке. После отправки поле очищается; backend не возвращает сохранённый токен в UI. Секреты не записываются в SQLite, localStorage, конфигурационные файлы или логи. Reqwest-ошибки с credential-bearing URL не логируются: пользователю выдаются заранее определённые сообщения.

Frontend не имеет произвольного filesystem, shell или HTTP API. Открытие файла выполняется backend по ID завершённого задания; выбор папки — через нативный диалог. Redirects HTTP отключены. Телеметрии и отправки медиа в посторонние сервисы нет. Уведомления могут показывать имя файла на экране Windows — включайте их осознанно.

Для резервной копии закройте TeleDrop и скопируйте SQLite. Не удаляйте базу для «исправления подключения»: это удаляет offsets и историю. Токен не входит в резервную копию базы. Обновления используют тот же application identifier и миграции user_version; база из более новой версии не открывается старым приложением.

Разработка

Требуются Rust stable для x86_64-pc-windows-msvc, Microsoft C++ Build Tools + Windows SDK, Node.js и npm, WebView2. Проверенная конфигурация и команды — в Windows build guide.

npm ci
npm run tauri dev

npm run dev открывает только Vite: без Tauri браузер честно показывает, что backend недоступен. В production нет fixtures и демо-статусов.

npm run build
npm run lint
npm run test
cargo fmt --manifest-path src-tauri/Cargo.toml --check
cargo clippy --manifest-path src-tauri/Cargo.toml --all-targets -- -D warnings
cargo test --manifest-path src-tauri/Cargo.toml
npm run test:ui

Для UI-тестов один раз выполните npx playwright install chromium. Только тестовый runner подменяет IPC: эти fixtures не входят в bundle. npm run test:desktop проверяет настоящий release EXE через локальный WebView2 CDP; использовать только с не настроенным ботом и выключенным autoConnect. Скрипт временно меняет тему, проверяет её после перезапуска и восстанавливает исходные настройки. Во время теста не взаимодействуйте с окном.

Сборка и поставка

npm run build:windows   # NSIS installer
npm run build:portable  # EXE без installer
pwsh -File scripts/package-windows.ps1 -Format Portable

Скрипт упаковки поддерживает Installer, Portable, Exe; складывает результат в release/ на диске проекта и не включает development tools. Подробности — Windows build guide. Результаты проверок фиксируются в VERIFICATION.md.

Структура

src/features/                 overview, downloads, history, settings, activity
src/lib/                      компоненты, Hugeicons, темы, типы, IPC и события
src-tauri/src/telegram/       официальный Bot API через Reqwest
src-tauri/src/downloads/      независимый streaming download engine
src-tauri/src/storage/        SQLite и SQL-миграции
src-tauri/src/filesystem/     Windows-имена, no-clobber move, Explorer
src-tauri/src/security/       Credential Manager и redaction
src-tauri/src/commands/       узкий Tauri IPC
src-tauri/src/runtime.rs      lifecycle, polling и worker supervisor
tests/ui/                    browser-тесты с явно тестовым IPC
scripts/                     Windows-упаковка и настоящий desktop smoke

Hugeicons используется через официальные @hugeicons/svelte и @hugeicons/core-free-icons, проверенные на Svelte 5. Иконки импортируются по отдельности. @hugeicons/mcp-server исследован как инструмент поиска и документации, не установлен в runtime и не требуется для сборки. shadcn-svelte Button адаптирован Fluent-токенами; никакие альтернативные icon libraries не используются.

Лицензия проекта — MIT. Атрибуция иконок — THIRD_PARTY_NOTICES.md.

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages