# 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 радиостанции - `!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 тестовых файлов