66 lines
4.1 KiB
Markdown
66 lines
4.1 KiB
Markdown
# ShbDiscordBot
|
||
|
||
Paper-плагин со встроенным Discord-ботом для привязки Discord к Minecraft и выдачи LuckPerms permissions по ролям.
|
||
|
||
## Как работает привязка
|
||
|
||
1. Участник настроенного Discord-сервера пишет боту в личных сообщениях `/auth`.
|
||
2. Бот выдаёт одноразовый шестизначный код на 10 минут.
|
||
3. Игрок выполняет на Minecraft-сервере `/link <код>`.
|
||
4. Плагин проверяет обе стороны и сохраняет `discordId` через ShbUtils Core API.
|
||
|
||
Существующие связи не перезаписываются. Незавершённые коды хранятся только в памяти и после рестарта исчезают.
|
||
|
||
## Сборка и установка
|
||
|
||
```bash
|
||
./gradlew test shadowJar
|
||
```
|
||
|
||
Установите `build/libs/ShbDiscordBot-1.0.jar` и LuckPerms на Paper-сервер. Обычный `*-plain.jar` не является готовым артефактом для установки.
|
||
|
||
В [Discord Developer Portal](https://discord.com/developers/applications):
|
||
|
||
1. Создайте bot application.
|
||
2. Включите privileged intent **Server Members Intent**.
|
||
3. Пригласите бота в guild со scopes `bot` и `applications.commands`.
|
||
4. Разрешите участникам сервера отправлять боту личные сообщения.
|
||
|
||
Запустите сервер один раз, заполните `plugins/ShbDiscordBot/config.yml` и перезапустите его. Реальные `discord.token` и `api.internal-secret` нельзя публиковать или коммитить.
|
||
|
||
## Конфигурация ролей
|
||
|
||
```yaml
|
||
role-sync:
|
||
interval-seconds: 300
|
||
max-concurrent-requests: 4
|
||
mappings:
|
||
"123456789012345678":
|
||
- "group.vip"
|
||
- "server.chat.color"
|
||
"234567890123456789":
|
||
- "server.fly"
|
||
```
|
||
|
||
После успешной привязки, добавления роли и раз в пять минут плагин добавляет отсутствующие nodes игроку. Удаление Discord-роли не снимает ранее выданные permissions.
|
||
|
||
После изменения любых настроек выполните из консоли или от имени оператора:
|
||
|
||
```text
|
||
/sdb reload
|
||
```
|
||
|
||
Команда сначала проверяет новый конфиг, затем полностью переподключает Discord-бота и API-клиент, пересоздаёт периодическую задачу и немедленно запускает синхронизацию ролей. Незавершённые шестизначные коды при этом аннулируются. Встроенная Paper-команда `/reload` намеренно не переопределяется.
|
||
|
||
Полный локальный справочник ShbUtils API находится в [docs/API.md](docs/API.md). Правила для следующих разработчиков и агентов — в [AGENTS.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** до повторного запуска плагина.
|