Skip to content

Repository files navigation

Discord Forum Downloader Bot (TypeScript)

Discord бот для автоматического скачивания всех файлов из форум-каналов Discord сервера.

⚡ Написан на TypeScript для строгой типизации и лучшего DX

Возможности

  • ✅ Скачивает все файлы из всех тем форум-канала (включая архивные)
  • ✅ Поддержка активных и архивных тредов (публичных и приватных)
  • ✅ Автоматическая пагинация для больших объемов данных
  • ✅ Защита от rate limits Discord API
  • ✅ Ограничение одновременных загрузок
  • ✅ Подробная статистика и логи процесса
  • ✅ Пропуск уже скачанных файлов
  • ✅ Безопасная обработка имен файлов
  • ✅ Потоковое скачивание для экономии памяти

Требования

  • Node.js 18.x или выше (для поддержки ESM)
  • TypeScript 5.x
  • Discord бот с необходимыми правами
  • Доступ к форум-каналу для скачивания

Установка

  1. Клонируйте репозиторий и установите зависимости: ```bash git clone cd discord-forum-downloader npm install ```

  2. Создайте Discord приложение и бота:

    • Перейдите на Discord Developer Portal
    • Создайте новое приложение
    • В разделе "Bot" создайте бота и скопируйте токен
    • В разделе "Bot" включите следующие Privileged Gateway Intents:
      • Message Content Intent (критически важно!)
    • В разделе "OAuth2 > URL Generator" выберите scopes: bot
    • В Bot Permissions выберите:
      • ✅ View Channels
      • ✅ Read Message History
  3. Настройте конфигурацию: ```bash cp .env.example .env ```

    Отредактируйте .env файл: ```env DISCORD_TOKEN=YOUR_BOT_TOKEN_HERE FORUM_CHANNEL_ID=123456789012345678 DOWNLOAD_DIR=downloads MAX_CONCURRENT_DOWNLOADS=5 REQUEST_DELAY=1000 ```

  4. Получите ID форум-канала:

    • Включите режим разработчика в Discord (User Settings > Advanced > Developer Mode)
    • Правый клик на форум-канале → "Copy ID"
    • Вставьте ID в переменную FORUM_CHANNEL_ID

Запуск

```bash

Установка зависимостей

npm install

Компиляция TypeScript и запуск

npm start

Запуск в режиме разработки (с автоперезагрузкой)

npm run dev

Только компиляция

npm run build

Очистка собранных файлов

npm run clean ```

Структура загружаемых файлов

Файлы сохраняются в следующей структуре: ``` downloads/ ├── 123456789_thread-name-1/ │ ├── messageID_attachmentID_filename.jpg │ └── messageID_attachmentID_document.pdf ├── 987654321_thread-name-2/ │ └── messageID_attachmentID_image.png └── ... ```

Настройки конфигурации

Переменная Описание По умолчанию
DISCORD_TOKEN Токен Discord бота -
FORUM_CHANNEL_ID ID форум-канала для скачивания -
DOWNLOAD_DIR Папка для сохранения файлов downloads
MAX_CONCURRENT_DOWNLOADS Максимум одновременных загрузок 5
REQUEST_DELAY Задержка между запросами (мс) 1000

Права Discord бота

Для корректной работы бот должен иметь следующие права:

Права в канале:

  • View Channel - просмотр канала
  • Read Message History - чтение истории сообщений

Для приватных архивных тредов дополнительно:

  • Manage Threads - управление тредами

Gateway Intents:

  • Guilds - доступ к гильдиям и каналам
  • Guild Messages - доступ к сообщениям
  • Message Content Intent - доступ к содержимому (критично!)

Устранение неполадок

Ошибка: "Missing Access"

  • Проверьте права бота в канале
  • Убедитесь, что бот добавлен на сервер с правильными разрешениями

Ошибка: "Cannot read property 'attachments'"

  • Включите Message Content Intent в Developer Portal
  • Добавьте MessageContent в intents в коде

Rate Limits (429 ошибки)

  • Увеличьте REQUEST_DELAY в конфигурации
  • Уменьшите MAX_CONCURRENT_DOWNLOADS

Не скачиваются приватные архивные треды

  • Добавьте боту право Manage Threads
  • Убедитесь, что бот имеет доступ к приватным тредам

Логи и статистика

Бот выводит подробную информацию о процессе:

  • 📋 Количество найденных тредов
  • 📨 Количество обработанных сообщений в каждом треде
  • 📎 Количество найденных вложений
  • ✅ Количество скачанных файлов
  • ⏭️ Количество пропущенных файлов (уже скачанных)
  • ❌ Количество ошибок

Безопасность

  • ✅ Не логируйте токен бота в консоль
  • ✅ Добавьте .env в .gitignore
  • ✅ Используйте отдельного бота только для этой задачи
  • ✅ Ограничивайте права бота минимально необходимыми

Ограничения

  • Максимальный размер файла для скачивания: согласно лимитам Discord (обычно 8MB для обычных пользователей, 100MB для Nitro)
  • Скорость скачивания ограничена Discord Rate Limits
  • Приватные архивные треды требуют дополнительных прав

Лицензия

MIT License - см. файл LICENSE для деталей.

About

No description, website, or topics provided.

Resources

Stars

3 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages