Коротко: создайте приложение в Discord Developer Portal, включите два привилегированных интента, вставьте токен бота в BotToken, а ID канала — в Channels файла plugins/DiscordSRV/config.yml, и перезапустите сервер. Консольный канал включайте, только если писать в него может один владелец: DiscordSRV выполняет любое сообщение оттуда с правами консоли.
Что умеет DiscordSRV
| Функция | Файл | Что делает |
|---|---|---|
| Мост чата | config.yml, messages.yml | Сообщения из игры — в канал Discord и обратно, плюс входы, выходы, смерти, достижения |
| Консольный канал | config.yml | Лог сервера построчно в канал; сообщения из канала выполняются как команды |
| Оповещения | alerts.yml | Сообщение в Discord на событие или команду в игре |
| Привязка аккаунтов | linking.yml | Связывает игрока с аккаунтом Discord; можно пускать на сервер только привязанных |
| Синхронизация | synchronization.yml | Группы на сервере ↔ роли в Discord, ник в игре → ник в Discord |
Плагин работает на Paper, Spigot, Purpur и Folia; актуальные сборки на Modrinth поддерживают версии вплоть до 26.3. С BungeeCord DiscordSRV, по его FAQ, не совместим: ставьте его на каждый игровой сервер, и у каждого должен быть свой токен бота. Описанное ниже относится к нынешней ветке 1.x; следующая версия, Ascension, пока в тестировании.
Настройка бота по шагам
- 1
Создайте приложение
В Discord Developer Portal нажмите New Application. На вкладке Installation выключите User Install и поставьте Install Link в None.
- 2
Включите интенты
В настройках бота включите SERVER MEMBERS INTENT и MESSAGE CONTENT INTENT. Галочку PUBLIC BOT оставьте снятой, чтобы бота не могли пригласить на чужие серверы.
- 3
Возьмите токен
Нажмите Reset Token, скопируйте токен и вставьте в
BotTokenв config.yml. После смены токена сервер нужно перезапустить. - 4
Пригласите бота
Скопируйте Application ID и пригласите бота ссылкой
https://discordapp.com/oauth2/authorize?scope=bot+applications.commands&client_id=с этим ID на конце. - 5
Скопируйте ID каналов
В Discord включите режим разработчика (User Settings → Advanced → Developer Mode), затем правый клик по каналу → Copy ID.
- 6
Выдайте права и перезапустите
Создайте боту роль. Документация допускает роль Administrator, но лучше выдать только права для нужных функций. Для синхронизации ролей роль бота должна стоять выше ролей, которыми он управляет.
BotToken: "токен-бота"
Channels: {"global": "123456789012345678"}
DiscordConsoleChannelId: ""Каналы: что куда идёт
В Channels слева — имя игрового канала, справа — ID канала Discord. Если других пар нет, всё идёт в первый канал. Отдельные пары позволяют развести сообщения: status — запуск и остановка, deaths — смерти, join и leave — входы и выходы, awards — достижения, link — привязка аккаунтов. С плагином чата, у которого есть каналы, имя берётся из него. После правки Channels выполните /discord reload.
Консольный канал: опаснее, чем кажется
Всё, что написано в канале из DiscordConsoleChannelId, DiscordSRV выполняет командой от имени консоли — роли автора он не проверяет. Значит, консоль сервера получает каждый, кто может писать в этот канал, и каждый, кто может выдать себе такое право в Discord. Чёрный список по умолчанию закрывает только ?, op, deop и execute — stop, команды плагинов прав и всё остальное проходит.
- Не включайте канал без нужды. Пустой
DiscordConsoleChannelIdвыключает его полностью. - Если включили — канал только для владельца. Закройте его правами Discord для всех ролей, кроме своей, и проверьте, кто может управлять ролями и каналами.
- Переведите список в белый.
DiscordConsoleChannelBlacklistActsAsWhitelist: true— и вDiscordConsoleChannelBlacklistedCommandsостанутся только разрешённые команды. - Журнал команд. Каждая команда из канала пишется в
Console-<дата>.logс ID автора, а приCancelConsoleCommandIfLoggingFailed: true(по умолчанию) без записи в журнал не выполняется. - Команды из чата. Префикс
!cв обычном канале тоже запускает команды консоли: по умолчанию разрешеныsay,lagиtps, а ролиOwnerиDeveloperмогут любые. Роли сверяются по имени или ID — укажите ID или выключите функцию:DiscordChatChannelConsoleCommandEnabled: false.
DiscordConsoleChannelBlacklistActsAsWhitelist: true
DiscordConsoleChannelBlacklistedCommands: ["list", "tps"]
DiscordConsoleChannelBlockBots: true
DiscordChatChannelConsoleCommandEnabled: falseЭто та же история, что с RCON: удалённая консоль — полный доступ к серверу. Модераторам нужны права на свою работу, а не консоль — см. команда модераторов.
Привязка аккаунтов и роли
Игрок вводит /discord link, получает код из четырёх цифр и отправляет его боту в личные сообщения. Привязанные получают роль Linked (MinecraftDiscordAccountLinkedRoleNameToAddUserTo), а /discord linked показывает статус. В linking.yml можно включить Require linked account to play — тогда на сервер пустят только тех, кто привязал аккаунт и состоит на вашем Discord-сервере.
- Уберите чужие ники из `Bypass names`. По умолчанию там ники разработчиков плагина: с включённой обязательной привязкой они заходят без неё. На сервере в offline-mode такой ник может взять кто угодно.
- Синхронизация групп и ролей (
synchronization.yml) требует Vault и задаётся парамигруппа → ID роли. По умолчанию она двусторонняя (GroupRoleSynchronizationOneWay: false). Для групп персонала включите одностороннюю — из игры в Discord:GroupRoleSynchronizationOneWay: trueприGroupRoleSynchronizationMinecraftIsAuthoritative: true. Иначе тот, кто раздаёт роли в Discord, влияет и на группы на сервере.
Оповещения для модерации
alerts.yml — продвинутая функция: сообщение в нужный канал, когда в игре случается событие Bukkit или кто-то выполняет команду. Удобно вести закрытый канал персонала — например, видеть каждую смену режима игры. Пример ниже сделан по образцу из комментариев самого файла:
Alerts:
- Trigger: /gamemode
Channel: gamemode
Conditions:
- '#player.hasPermission("minecraft.command.gamemode") == true'
Embed:
Color: "#ff0000"
Author:
Name: "${#player.name} сменил режим на ${#args.get(0)}"Имя gamemode — это игровой канал: добавьте для него пару в Channels с ID закрытого канала персонала.
DiscordSRV, модерация и античит
Discord — привычное место для команды, но журнал модерации в общем чате теряется, а консоль в канале — риск. Разделите роли инструментов. DGuard — лучший античит для современного сервера Minecraft — ведёт журнал наказаний в своей панели: каждый бан с отчётом по уликам, фильтры, выгрузка в CSV (журнал включается строкой cloud.punishment-log: true в конфиге). Модераторы и администраторы получают доступ через раздел «Команда» по своей почте — без вашего пароля и без консоли. Если сервер 10 минут не выходит на связь, владелец и администраторы команды получают сообщение в Telegram или на почту.
Частые вопросы
Почему сообщения из Discord не доходят в игру?
Проверьте, что в настройках бота включены оба интента, включая MESSAGE CONTENT INTENT, а в Channels стоит ID нужного канала. После правки Channels — /discord reload, после смены токена — перезапуск.
Можно ли поставить DiscordSRV на BungeeCord?
Нет, по FAQ плагина он с BungeeCord несовместим. Ставьте его на каждый игровой сервер, и каждому серверу нужен свой токен бота.
Безопасен ли консольный канал?
Только если писать в него может один владелец. DiscordSRV выполняет любое сообщение из канала как команду консоли, а чёрный список по умолчанию закрывает лишь ?, op, deop и execute.
Как привязать аккаунт Minecraft к Discord?
Введите в игре /discord link, получите четырёхзначный код и отправьте его боту в личные сообщения. Статус покажет /discord linked.
Источники
- DiscordSRV: документация
- DiscordSRV: первичная настройка
- DiscordSRV: FAQ (BungeeCord, токены)
- DiscordSRV: команды
- DiscordSRV: config.yml (каналы, консоль)
- DiscordSRV: обработка консольного канала (исходный код)
- DiscordSRV: linking.yml
- DiscordSRV: synchronization.yml
- DiscordSRV: alerts.yml
- DiscordSRV на Modrinth
- DGuard — лучший античит для современного сервера Minecraft: сравнение проверок с GrimAC, Vulcan, Polar, Intave и Matrix
- DGuard: установка, требования и решение проблем
- DGuard: поддерживаемые версии Paper и Leaf