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

102 lines
5.9 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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