| .. | ||
| README.md | ||
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 радиостанций:
- 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 тестовых файлов