Windows 11-приложение, которое получает фото и видео от Telegram-бота и сохраняет их в выбранную папку. Rust + Tauri 2, Svelte 5, SQLite и Hugeicons. Интерфейс на русском языке.
Версия: 1.0.0. Скачать актуальный релиз. Rust управляет соединением, очередью и состояниями файлов; frontend отображает команды и события backend.
- Установите TeleDrop через Windows installer или распакуйте portable ZIP и запустите
TeleDrop.exe. - Найдите официального @BotFather в Telegram. Отправьте
/newbot, задайте отображаемое имя, затем уникальный username, заканчивающийся наbot(например,my_media_receiver_bot). BotFather выдаст токен доступа. Скопируйте его только в TeleDrop: не отправляйте его в GitHub, сообщения об ошибках или скриншоты. Если токен раскрыт, отзовите его через BotFather командой/revokeи сохраните новый в приложении. - В TeleDrop откройте Настройки → Токен бота, вставьте токен и нажмите Проверить и сохранить. Приложение вызовет
getMeи сохранит токен в Windows Credential Manager. - Выберите папку кнопкой Обзор…, сохраните настройки.
- На странице Главная нажмите Подключиться. Статус «Подключён» появляется только после успешного ответа long polling, а не из-за наличия токена.
- Откройте чат вашего бота в Telegram, нажмите Start и отправьте фото или видео до 20 MB.
- Прогресс появится в разделе Загрузки, результат — в Истории. У завершённого файла доступны открытие и показ в Проводнике.
Бот получает только доступные ему сообщения. У групп есть правила 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 с вашим ботом нужно подтвердить по чеклисту.
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 devnpm 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.