- 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
102 lines
5.9 KiB
Markdown
102 lines
5.9 KiB
Markdown
# 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 тестовых файлов
|