4.1 KiB
ShbDiscordBot
Paper-плагин со встроенным Discord-ботом для привязки Discord к Minecraft и выдачи LuckPerms permissions по ролям.
Как работает привязка
- Участник настроенного Discord-сервера пишет боту в личных сообщениях
/auth. - Бот выдаёт одноразовый шестизначный код на 10 минут.
- Игрок выполняет на Minecraft-сервере
/link <код>. - Плагин проверяет обе стороны и сохраняет
discordIdчерез ShbUtils Core API.
Существующие связи не перезаписываются. Незавершённые коды хранятся только в памяти и после рестарта исчезают.
Сборка и установка
./gradlew test shadowJar
Установите build/libs/ShbDiscordBot-1.0.jar и LuckPerms на Paper-сервер. Обычный *-plain.jar не является готовым артефактом для установки.
- Создайте bot application.
- Включите privileged intent Server Members Intent.
- Пригласите бота в guild со scopes
botиapplications.commands. - Разрешите участникам сервера отправлять боту личные сообщения.
Запустите сервер один раз, заполните plugins/ShbDiscordBot/config.yml и перезапустите его. Реальные discord.token и api.internal-secret нельзя публиковать или коммитить.
Конфигурация ролей
role-sync:
interval-seconds: 300
max-concurrent-requests: 4
mappings:
"123456789012345678":
- "group.vip"
- "server.chat.color"
"234567890123456789":
- "server.fly"
После успешной привязки, добавления роли и раз в пять минут плагин добавляет отсутствующие nodes игроку. Удаление Discord-роли не снимает ранее выданные permissions.
После изменения любых настроек выполните из консоли или от имени оператора:
/sdb reload
Команда сначала проверяет новый конфиг, затем полностью переподключает Discord-бота и API-клиент, пересоздаёт периодическую задачу и немедленно запускает синхронизацию ролей. Незавершённые шестизначные коды при этом аннулируются. Встроенная Paper-команда /reload намеренно не переопределяется.
Полный локальный справочник ShbUtils API находится в docs/API.md. Правила для следующих разработчиков и агентов — в AGENTS.md.
Если бот не видит guild
Сообщение Discord-бот не видит настроенный guild означает, что авторизация прошла, но Discord не вернул настроенный сервер для этого bot token.
- Скопируйте ID сервера через Discord Developer Mode и проверьте
discord.guild-id. - Убедитесь, что
discord.tokenпринадлежит тому же application, которого приглашали на сервер. - Проверьте список
Видимые guildв логе: он показывает guild IDs, доступные боту. - Если список пуст, пригласите именно bot installation со scopes
botиapplications.commands, а не только user installation. - Включите Server Members Intent до повторного запуска плагина.