DGuard

DiscordSRV: чат, консоль и роли между Minecraft и Discord

DiscordSRV — бесплатный плагин с открытым кодом, который связывает сервер Minecraft с Discord: чат идёт в обе стороны, консоль — в отдельный канал, игроки привязывают аккаунты, а группы на сервере превращаются в роли. Настройка — это бот в Discord, его токен и ID каналов. Главная ловушка — консольный канал: всё, что в него написано, выполняется как команда консоли.

Команда DGuard6 мин

Коротко: создайте приложение в 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
По документации DiscordSRV

Плагин работает на Paper, Spigot, Purpur и Folia; актуальные сборки на Modrinth поддерживают версии вплоть до 26.3. С BungeeCord DiscordSRV, по его FAQ, не совместим: ставьте его на каждый игровой сервер, и у каждого должен быть свой токен бота. Описанное ниже относится к нынешней ветке 1.x; следующая версия, Ascension, пока в тестировании.

Настройка бота по шагам

  1. 1

    Создайте приложение

    В Discord Developer Portal нажмите New Application. На вкладке Installation выключите User Install и поставьте Install Link в None.

  2. 2

    Включите интенты

    В настройках бота включите SERVER MEMBERS INTENT и MESSAGE CONTENT INTENT. Галочку PUBLIC BOT оставьте снятой, чтобы бота не могли пригласить на чужие серверы.

  3. 3

    Возьмите токен

    Нажмите Reset Token, скопируйте токен и вставьте в BotToken в config.yml. После смены токена сервер нужно перезапустить.

  4. 4

    Пригласите бота

    Скопируйте Application ID и пригласите бота ссылкой https://discordapp.com/oauth2/authorize?scope=bot+applications.commands&client_id= с этим ID на конце.

  5. 5

    Скопируйте ID каналов

    В Discord включите режим разработчика (User Settings → Advanced → Developer Mode), затем правый клик по каналу → Copy ID.

  6. 6

    Выдайте права и перезапустите

    Создайте боту роль. Документация допускает роль Administrator, но лучше выдать только права для нужных функций. Для синхронизации ролей роль бота должна стоять выше ролей, которыми он управляет.

plugins/DiscordSRV/config.yml
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.
config.yml — консоль только с разрешёнными командами
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 или кто-то выполняет команду. Удобно вести закрытый канал персонала — например, видеть каждую смену режима игры. Пример ниже сделан по образцу из комментариев самого файла:

plugins/DiscordSRV/alerts.yml
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.

Источники

Все разделы
Модерация6 минКоманда модераторов: права, журнал и разбор жалобМодератору нужны права ровно на свою работу и журнал, по которому любое его решение можно проверить, — но не пароль владельца и не консоль. Разберём роли, права в LuckPerms, таблицу наказаний, журнал и апелляции.ЧитатьАдминистрирование4 минRCON: удалённая консоль сервера Minecraft без рискаRCON — протокол, через который команды консоли можно отправлять по сети: из скриптов бэкапа, рестартов и панелей. Включается тремя строками в server.properties, но соединение не шифруется, поэтому порт RCON нельзя открывать в интернет — подключайтесь с самой машины или через SSH-туннель.ЧитатьПлагины5 минPlaceholderAPI: плейсхолдеры, расширения и команды /papiPlaceholderAPI — бесплатный плагин, через который одни плагины показывают данные других: ник, пинг, баланс, ранг, TPS — в табе, на скорборде, в чате и на голограммах. Сам он плейсхолдеров не содержит: их дают расширения из eCloud или встроенные в плагины. Разберём установку, нужные команды, частые поломки и безопасность расширений.Читать

Поставьте лучший античит для современного Minecraft

DGuard ловит все 47 видов читов из нашего сравнения — у ближайшего соперника, Intave, 27. Полная защита на любом тарифе, до 30 игроков онлайн — бесплатно.