discord-bot/ref/README.md
loki5512344 29a21e4178 v2.3: Major refactoring, Lavalink music system, Spotify support, CI/CD
- Full refactoring: max 200 lines/file, max 3 files/dir, KISS/DRY/SOLID
- Lavalink client 3.4.0 + LavaSrc plugin (Spotify, Apple Music, Deezer)
- 3-bot architecture: main (!), music (q!), radio (r!)
- Filters: bassboost, nightcore, vaporwave, equalizer
- Slash commands for music (/play, /skip, etc.)
- Persistent queue in SQLite, auto-leave timer
- Radio manager with auto-reconnect
- Custom welcome GIF greetings via nekos.life
- JDA 5.6.1, gson 2.14, hikaricp 6.3, all deps updated
- Fixed YouTube playback via ytmsearch (LavaSrc)
- CI/CD: Docker publish + release workflows
- SpotBugs: all real bugs fixed, ignoreFailures=false
- Checkstyle: Google Style (adapted), 0 violations
2026-07-02 23:48:36 +02:00

5.9 KiB
Raw Blame History

Loki Discord Bot — Reference

🚀 Быстрый старт

docker compose up --build -d

🤖 3 бота в одном процессе

Бот Токен Префикс Назначение
Main DISCORD_BOT_TOKEN ! Всё: уровни, экономика, модерация, музыка, радиоуправление
Music DISCORD_BOT_TOKEN_MUSIC q! Только музыка через Lavalink
Radio DISCORD_BOT_TOKEN_RADIO r! Только радио (управляется через !radio основного бота)

🎵 Музыкальные команды

Основной бот (!play, !skip, !queue, !stop, !np, !volume, !bassboost, !nightcore, !vaporwave, !repeat, !shuffle)

Music бот (q!play, q!skip, q!stop, q!queue, q!np, q!volume, q!bassboost, q!nightcore, q!vaporwave, q!repeat, q!shuffle)

📻 Радио

Настройка через основного бота:

  • !radio set <URL> — задать URL радиостанции
  • !radio on — включить (радио-бот заходит в твой канал)
  • !radio off — выключить
  • !radio volume [0-100] — громкость

URL радиостанций:

Примеры прямых ссылок:

  • http://chiru.no:8000/radio.mp3 — пример радио
  • http://icecast.radio.ru:8000/stream — пример

🏗 Структура проекта

src/main/java/creator/loki/
├── bootstrap/        — App.java (точка входа), ReadyListener
├── command/          — Command интерфейс, CommandContext
├── config/           — BotConfig, ConfigLoader, LavalinkConfig
├── core/             — BotInitializer, EventDispatcher, ListenerAggregator
│   ├── exception/    — CommandException, CommandExceptionHandler
│   ├── registry/     — CommandRegistrar, CommandRegistry, PrefixCommandRegistrar
│   └── security/     — RateLimiter, CooldownManager
├── database/         — Database (HikariCP), DatabaseMigration
│   └── schema/       — CoreTables, FeatureTables
├── di/               — BotModule (Guice DI)
├── embed/            — EmbedFactory, EmbedTemplates, HelpCategories
├── feature/          — Все фичи бота
│   ├── admin/        — GenerateRatingsCommand
│   ├── config/       — ConfigRepository, GuildConfigRepository
│   ├── counter/      — MemberCounterListener, CounterSetupPrefixCommand
│   ├── economy/      — Баланс, банк, рыбалка, блэкджек, слоты, работы, rob, pay
│   ├── entertainment/— Монетка, кубик, 8ball, rate, ship, процентомеры
│   ├── help/         — HelpMenuHandler
│   ├── info/         — Ping, Avatar, Info, ServerStats
│   ├── leaderboard/  — LeaderboardCommand, LeaderboardFormatter
│   ├── level/        — XP, уровни, ранги, level-roles
│   ├── logging/      — LogSetupPrefixCommand
│   ├── metrics/      — MetricsCollector, HealthHttpServer
│   ├── moderation/   — Бан, кик, мут, варн, clear, slowmode
│   │   ├── commands/punish/   — Ban, Kick, Mute, Unmute
│   │   ├── commands/warn/     — Warn, Unwarn, History
│   │   ├── commands/utils/    — Clear, Slowmode, Swap/Case
│   │   └── log/              — ModerationLogger, LogEmbeds
│   ├── music/        — Lavalink + LavaSrc (YouTube, Spotify, SoundCloud, Deezer)
│   │   ├── commands/ — PlayerCommands, QueueCommands, FilterCommands
│   │   ├── core/     — LavalinkManager, PlayerManager, SearchManager
│   │   ├── listener/ — MusicBotListener, PlayHandler, ControlHandler
│   │   ├── manage/   — GuildMusicManager, TrackScheduler, FilterState
│   │   ├── play/     — PlayCommand, TrackLoader, SearchHandler
│   │   ├── slash/    — Slash-команды (/play, /skip и т.д.)
│   │   └── repository/ — QueueRepository (SQLite)
│   ├── profile/      — RankCardGenerator, ProfileService
│   ├── radio/        — RadioManager, RadioBotListener
│   │   └── commands/ — RadioCommand
│   ├── rating/       — RatingsRepository
│   ├── reputation/   — RepCommand, MinusRepCommand, RepTopCommand
│   ├── role/         — CreateRole, EditRole, DeleteRole, MyRoles
│   ├── serverstats/  — ServerStatsService
│   ├── ship/         — ShipCommand
│   ├── social/       — Hug, Kiss, Slap, Pat, Compliment, Roast
│   ├── utility/      — PollCommand, HelpCommand
│   ├── voice/        — VoiceChannelManager, TTS (удалён!)
│   └── welcome/      — WelcomeListener, WelcomeCommand
├── integration/
│   └── nekos/        — NekosLifeApi (GIF для соц команд)
└── util/             — LoggerDecorator, MuteDurationParser

📊 Статистика проекта

  • Файлов: ~218 Java
  • Средняя длина: ~95 строк/файл
  • Макс строк: <200 (ни одного файла больше)
  • Папки: макс 3 файла в каждой
  • Покрытие тестами: ~40 тестовых файлов