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
This commit is contained in:
loki5512344 2026-07-02 23:48:36 +02:00
parent f5398dc779
commit 29a21e4178
301 changed files with 21751 additions and 18099 deletions

102
ref/README.md Normal file
View file

@ -0,0 +1,102 @@
# Loki Discord Bot — Reference
## 🚀 Быстрый старт
```bash
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 радиостанций:**
- https://www.radio-browser.info/ — поиск радиостанций мира (бери прямую ссылку .mp3/.m3u)
- https://www.internet-radio.com/ — каталог интернет-радио
- https://www.radio.net/ — радиостанции (ссылку на поток можно получить через инспектор)
- https://streamurl.com/ — поиск прямых ссылок на потоки
**Примеры прямых ссылок:**
- `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 тестовых файлов