Перейти к содержимому

DiscordIO

Вайтлист через Discord, бан через Discord. Уведомления о запуске/остановке сервера. Сообщения Minecraft в Discord. Fabric/Velocity

FabricVelocity
Загрузчики
FabricVelocity
Скачиваний на Modrinth
1,2 тыс.
Подписчиков на Modrinth
9
версий
46
Обновлён
6 июня 20266 июн.
Опубликован
в 2026

Коротко о моде

Работает на Fabric и Velocity
Для Minecraft 1.21–26.3
Ставится только на сервер; игрокам ставить не нужно
Последняя версия — 0.9.0 от 6 июня 2026
Лицензия MIT — бесплатно
Где нужен
В игрене нуженНа сервереобязателен

Ставится только на сервер; игрокам ставить не нужно

Версии игры1.21–26.3
Описание переведено автоматическиПоказать оригинал (EN)
⚠️ Внимание ⚠️
Проект всё ещё в разработке. Возможны баги/краши! (пожалуйста, сообщайте о них на github.com)
Если вы обновляетесь до более новой версии, вам нужно самостоятельно обновить language.yml и config.yml (data.yml обновляется автоматически).

Возможности

  • Работает как на прокси Velocity, так и на серверах Fabric
  • Функция вайтлиста позволяет людям отправлять заявки на вайтлист через Discord
  • Функция (раз)бана для наказания тех, кто надоедает (кикнуть несколько раз, забанить навсегда/на определённый срок)
  • Гибкая настройка (см. config.yaml и language.yml — там всё, что можно настроить)
  • Режим техобслуживания: запрещает всем заходить на сервер, кроме указанных в конфиге, и отключает все уведомления о событиях
  • Свои сообщения в Discord при запуске и остановке сервера
  • Свои сообщения в Discord при подключении и отключении игроков
  • Своё сообщение в Discord, когда игроки пишут в Minecraft
  • Свои сообщения в Minecraft, когда пользователи пишут в Discord

Конфиги:

config.yml версия 0.8.0

Актуальную версию смотрите на github.com

# !Этот файл нужно настроить перед использованием плагина!
# После включения функции её отключение может привести к непредсказуемому поведению
# Если вы действительно хотите отключить функцию, но это ломает ваш вайтлист/установку, удалите файл data.yml

# Как получить токен, см. https://modrinth.com/plugin/discordio
botToken:   "Вставьте сюда ваш токен, как получить токен см. https://modrinth.com/plugin/discordio"
# Guild ID нужен для добавления команд
guildId:    "Вставьте сюда ваш guild id (ID вашего Discord-сервера)"

# Сообщения в Discord для игровых событий
events:
  # Сообщение при запуске сервера
  onStart:
    enabled: false
    channel: "id..."

  # Сообщение при остановке сервера
  onStop:
    enabled: false
    channel: "id..."

  # Сообщение при входе игрока
  onJoin:
    enabled: false
    channel: "id..."

  # Сообщение при выходе игрока
  onLeave:
    enabled: false
    channel: "id..."

  # Пересылка сообщений между Discord и Minecraft
  onMessage:
    enabled: false
    minecraftToDiscord: true
    discordToMinecraft: true

    # Раскомментируйте подходящий вариант для вашего типа сервера:

    # Для fabric:
    # channels:
    #   fabric: "id..."

    # Для velocity
    # (Названия серверов — те, что указаны в настроенном вами файле velocity.toml)
    # Не используйте общие каналы Discord, если у вас включён discordToMinecraft
    # channels:
    #   server1: "id..."
    #   server2: "id..."


# Если включено, будет использоваться UUID, зарегистрированный в Mojang, для верификации
# !Сервер должен быть в online mode, чтобы это работало!
# Вы не сможете изменить эту настройку после того, как кого-то добавите в вайтлист, так что выбирайте осторожно
# Если вы действительно хотите это изменить, удалите файл data.yml (это удалит всех игроков из вайтлиста, их придётся добавлять заново)
useUUID: true
# Если включено, на одного пользователя Discord разрешён только один аккаунт Minecraft
# Вы не сможете изменить эту настройку после того, как кого-то добавите в вайтлист, так что выбирайте осторожно
# Если вы действительно хотите это изменить, удалите файл data.yml (это удалит всех игроков из вайтлиста, их придётся добавлять заново)
connectAccounts: true

# Если false, плагин удалит все интерактивные сообщения при выключении, чтобы отправить их заново при запуске
# Если true, плагин отключит все интерактивные сообщения при выключении, чтобы снова включить их при запуске (так не будет раздражающего пинга при старте сервера)
disableOnShutdown: true

# Объединить сообщения-заявки на вайтлист, бан и разбан в одно сообщение
squashedRequest:
  enabled: false
  channel: "id..."

# Вайтлист через Discord
whitelist:
  enabled: false

  # Должен ли плагин выдавать особую роль тем, кто в вайтлисте
  giveRoleOnWhitelist: false
  # Роль, выдаваемая игроку при добавлении в вайтлист (только если giveRoleOnWhitelist=true)
  # Включите режим разработчика, чтобы легко получить ID роли из настроек Discord-сервера:
  whitelistedRoleID: ""

  onAccept:
    enabled: true
    channel: "id..."
  onDeny:
    enabled: true
    channel: "id..."
  request:
    enabled: true
    channel: "id..."
    checkRoles: false
    allowedRoles: []
  voting:
    # Если отключено, заявка сразу подразумевает добавление в вайтлист
    enabled: true
    channel: "id.."
    checkRoles: false
    allowedRoles: []
    acceptVotes: "50%"
    denyVotes: "1"

# Бан через Discord
banning:
  enabled: false

  # Должен ли плагин выдавать особую роль тем, кто забанен
  giveRoleOnBan: false
  # Роль, выдаваемая игроку при бане (только если giveRoleOnBan=true)
  # Включите режим разработчика, чтобы легко получить ID роли из настроек Discord-сервера:
  bannedRoleID: ""

  onAccept:
    enabled: true
    channel: "id..."
  onDeny:
    enabled: true
    channel: "id..."
  request:
    enabled: true
    channel: "id..."
    checkRoles: false
    allowedRoles: []
    # Выберите один из способов, которым пользователь может указать, кого хочет забанить:
    # - "discord" выбрать имя пользователя Discord для бана (нельзя использовать, если connectAccounts=false)
    # - "minecraft" выбрать имя игрока Minecraft для бана
    identifier: "discord"
  punishment:
    # Если отключено, заявка перейдёт сразу к выбору причины для перманентного бана
    enabled: true
    channel: "id..."
    checkRoles: false
    allowedRoles: []
    acceptVotes: "50%"
    denyVotes: "1"
    punishments:
      # Если вы не оставите наказание "None", админы не смогут отклонить заявку на бан
      "None":
        type: None
      "Permanent ban":
        type: PermBan
      "5m ban":
        type: Ban
        duration: 300
      "1h ban":
        type: Ban
        duration: 3600
      "2h ban":
        type: Ban
        duration: 7200
      "1d ban":
        type: Ban
        duration: 86400
      "kick 1x":
        type: Kick
        duration: 1
      "kick 3x":
        type: Kick
        duration: 3
      "No unban 2h":
        type: NoUnban
        duration: 7200
  reason:
    # Если отключено, заявка сохранит причину из заявки
    enabled: true
    channel: "id..."
    checkRoles: false
    allowedRoles: []
    acceptVotes: "50%"
    denyVotes: "1"

# Разбан через Discord
unban:
  enabled: false

  onAccept:
    enabled: true
    channel: "id..."
  onDeny:
    enabled: true
    channel: "id..."
  request:
    enabled: true
    channel: "id..."
    checkRoles: false
    allowedRoles: []
  voting:
    # Если отключено, заявка сразу подразумевает разбан
    enabled: true
    channel: "id.."
    checkRoles: false
    allowedRoles: []
    acceptVotes: "50%"
    denyVotes: "1"

maintenance:
  # Отключает события и отклоняет всех, кого нет в списке персонала
  enabled: false
  # Включить режим техобслуживания из конфига:
  inMaintenance: false
  # Игроки, которым разрешено заходить во время техобслуживания
  # Используйте UUID, если useUUID=true, иначе используйте имена игроков
  # Это не отменяет вайтлист и бан, для входа всё равно нужно быть в вайтлисте
  # UUID должен быть без дефисов, то есть: 123456789abcdefghijklmni12345678
  crew: ["player1", "player2"]
  # Команда для включения режима техобслуживания через Discord
  command:
    enabled: false
    checkChannel: false
    allowedChannels: ["id..."]
    checkRoles: false
    allowedRoles: []
  # Сообщения при запуске
  onStart:
    enabled: false
    channel: "id..."
  # Сообщение при завершении
  onStop:
    enabled: false
    channel: "id..."

# Команда Discord, чтобы проверить, в вайтлисте ли кто-то (и есть ли у него наказания)
infoCommand:
  enabled: false
  checkChannel: false
  allowedChannels: ["id..."]
  checkRoles: false
  allowedRoles: []

<details>
<summary>language.yml версия 0.8.0</summary>

Актуальную версию смотри на [github.com](https://github.com/hidde2727/VelocityDiscord/blob/main/core/src/main/resources/language.yml)

```yaml
embeds:
  #
  # *************************************************************************
  #  События                                                                *
  # *************************************************************************
  #
  events:
    embeds:
      onStart:
        title: "-------------[Онлайн]-------------"
        description: ":green_circle: **Прокси** в сети!"
        footer:
          message: "${CURRENT_DATE} ${CURRENT_TIME}"
        color: "GREEN"

      onStop:
        title: "-------------[Оффлайн]-------------"
        description: ":no_entry: **Прокси** не в сети!"
        footer:
          message: "${CURRENT_DATE} ${CURRENT_TIME}"
        color: "RED"

      onJoin:
        title: "-------------[Подключился]-------------"
        description: "**${PLAYER_NAME}** зашёл на сервер!"
        imageUrl: "https://minotar.net/helm/${PLAYER_KEY}/240.png"
        footer:
          message: "${CURRENT_DATE} ${CURRENT_TIME}"
        color: "GREEN"

      onLeave:
        title: "-------------[Отключился]-------------"
        description: "**${PLAYER_NAME}** покинул сервер!"
        imageUrl: "https://minotar.net/helm/${PLAYER_KEY}/240.png"
        footer:
          message: "${CURRENT_DATE} ${CURRENT_TIME}"
        color: "RED"

      onMessage:
        description: "[${PLAYER_NAME}] ${MESSAGE}"


  #
  # *************************************************************************
  #  Общий запрос                                                           *
  # *************************************************************************
  #

  squashedRequest:
    embeds:
      request:
        title: "Хочешь что-то запросить?"
        description: "Нажми на кнопки ниже, чтобы получить **вайтлист**, запросить **бан** или запросить **разбан**"
        footer:
          message: "${CURRENT_DATE} ${CURRENT_TIME}"
        actions:
          whitelist:
            label: "Запросить вайтлист"
            emoji: "U+2705"
          ban:
            label: "Запросить бан"
            emoji: "U+2705"
          unban:
            label: "Запросить разбан"
            emoji: "U+2705"
        color: "blue"


  #
  # *************************************************************************
  #  Вайтлист                                                              *
  # *************************************************************************
  #
  whitelist:
    embeds:
      alreadyWhitelisted:
        title: "Извини, ты уже отправлял запрос на вайтлист."
        description: "Ты либо уже в вайтлисте, либо твой предыдущий запрос сейчас рассматривается. Пожалуйста, подожди"
        footer:
          message: "${CURRENT_DATE} ${CURRENT_TIME}"
        color: "BLUE"

      request:
        title: "Запросить доступ"
        description: "Тоже хочешь попасть в вайтлист?\nНажми на кнопку ниже, чтобы запросить доступ к майнкрафт-серверу!"
        footer:
          message: "${CURRENT_DATE} ${CURRENT_TIME}"
        actions:
          button:
            label: "Запросить вайтлист"
            emoji: "U+2705"
        color: "BLUE"

      notAllowed:
        title: "Ты не можешь запросить вайтлист (у тебя нет нужной роли в Discord)"
        footer:
          message: "${CURRENT_DATE} ${CURRENT_TIME}"
        color: "RED"

      requestConfirm:
        title: "Это ты?"
        description: "Проверь, что скин ниже принадлежит твоему аккаунту **${PLAYER_NAME}**"
        imageUrl: "https://minotar.net/body/${PLAYER_NAME}/100.png"
        footer:
          message: "${CURRENT_DATE} ${CURRENT_TIME}"
        actions:
          confirm:
            label: "Это я"
            emoji: "U+2705"
          cancel:
            label: "Отмена"
            emoji: "U+26D4"
        color: "BLUE"

      notFound:
        title: "Твой игрок не найден"
        description: "Твой игрок не найден на серверах Mojang"
        footer:
          message: "${CURRENT_DATE} ${CURRENT_TIME}"

      requestCanceled:
        title: "Запрос отменён"
        footer:
          message: "${CURRENT_DATE} ${CURRENT_TIME}"

      requestConfirmed:
        title: "Твой запрос будет рассмотрен админами"
        footer:
          message: "${CURRENT_DATE} ${CURRENT_TIME}"

      voting:
        title: "Запрос на вайтлист"
        description: "Пользователь Discord <@${DISCORD_UUID}> хочет, чтобы его майнкрафт-аккаунт **${PLAYER_NAME}** был добавлен в вайтлист.\n**${ACCEPT_VOTES}** голосов за, **${DENY_VOTES}** голосов против. (нужно ${MIN_ACCEPT_VOTES} голосов для принятия и ${MIN_DENY_VOTES} голосов для отклонения запроса)"
        imageUrl: "https://minotar.net/body/${PLAYER_KEY}/100.png"
        footer:
          message: "${CURRENT_DATE} ${CURRENT_TIME}"
        actions:
          accept:
            label: "Принять"
            emoji: "U+2705"
          deny:
            label: "Отклонить"
            emoji: "U+26D4"
        color: "GREEN"

      votingDenied:
        title: "Запрос на вайтлист - Отклонён"
        description: "Запрос от пользователя <@${DISCORD_UUID}> на добавление **${PLAYER_NAME}** в вайтлист был отклонён"
        imageUrl: "https://minotar.net/helm/${PLAYER_KEY}/100.png"
        footer:
          message: "${CURRENT_DATE} ${CURRENT_TIME}"
        color: "RED"

      votingAccepted:
        title: "Запрос на вайтлист - Принят"
        description: "Запрос от пользователя <@${DISCORD_UUID}> на добавление **${PLAYER_NAME}** в вайтлист был принят"
        imageUrl: "https://minotar.net/helm/${PLAYER_KEY}/100.png"
        footer:
          message: "${CURRENT_DATE} ${CURRENT_TIME}"
        color: "GREEN"

      votingNotAllowed:
        title: "Ты не можешь голосовать (у тебя нет нужной роли в Discord)"
        footer:
          message: "${CURRENT_DATE} ${CURRENT_TIME}"
        color: "RED"

      publicDenied:
        title: "Вайтлист отклонён"
        description: "**${PLAYER_NAME}** не получил вайтлист\n(Запросил <@${DISCORD_UUID}>)"
        imageUrl: "https://minotar.net/body/${PLAYER_KEY}/100.png"
        footer:
          message: "${CURRENT_DATE} ${CURRENT_TIME}"
        color: "RED"

      publicAccepted:
        title: "Вайтлист принят"
        description: "**${PLAYER_NAME}** получил вайтлист\n(Запросил <@${DISCORD_UUID}>)"
        imageUrl: "https://minotar.net/body/${PLAYER_KEY}/100.png"
        footer:
          message: "${CURRENT_DATE} ${CURRENT_TIME}"
        color: "GREEN"

  #
  # *************************************************************************
  #  Баны                                                                  *
  # *************************************************************************
  #
  banning:
    embeds:
      request:
        title: "Запросить наказание"
        description: "Кто-то достаёт?\nНажми на кнопку ниже, чтобы запросить бан"
        actions:
          button:
            label: "Запросить бан"
            emoji: "U+2705"
        footer:
          message: "${CURRENT_DATE} ${CURRENT_TIME}"
        color: "RED"

      alreadyRequested:
        title: "Извини, ты уже отправлял запрос на бан."
        description: "Твой предыдущий запрос на бан сейчас рассматривается. Пожалуйста, подожди"
        footer:
          message: "${CURRENT_DATE} ${CURRENT_TIME}"
        color: "BLUE"

      playerNotFound:
        title: "Этот пользователь Discord не зарегистрирован"
        description: "У этого пользователя Discord не привязан майнкрафт-аккаунт. Запрос проигнорирован"
        footer:
          message: "${CURRENT_DATE} ${CURRENT_TIME}"
        color: "BLUE"

      requestNotAllowed:
        title: "Ты не можешь запросить бан (у тебя нет нужной роли в Discord)"
        footer:
          message: "${CURRENT_DATE} ${CURRENT_TIME}"
        color: "RED"

      requestConfirm:
        title: "Хочешь забанить этого пользователя?"
        description: "1. Хочешь запросить бан **${PLAYER_NAME}** по следующей причине: '*${REASON}*'.\n2. Проверь, что скин ниже принадлежит аккаунту **${PLAYER_NAME}**"
        imageUrl: "https://minotar.net/body/${PLAYER_KEY}/100.png"
        actions:
          confirm:
            label: "Это он"
            emoji: "U+2705"
          cancel:
            label: "Отмена"
            emoji: "U+26D4"
        footer:
          message: "${CURRENT_DATE} ${CURRENT_TIME}"
        color: "RED"

      requestNotFound:
        title: "Пользователь не найден"
        description: "Не найдено ни одного аккаунта, связанного с этим пользователем Discord"
        footer:
          message: "${CURRENT_DATE} ${CURRENT_TIME}"

      requestCanceled:
        title: "Запрос отменён"
        footer:
          message: "${CURRENT_DATE} ${CURRENT_TIME}"

      requestConfirmed:
        title: "Твой запрос будет рассмотрен админами"
        footer:
          message: "${CURRENT_DATE} ${CURRENT_TIME}"

      punishmentPicker:
        title: "Запрос на бан - Наказание"
        description: "Пользователь Discord <@${REQUESTER_UUID}> хочет, чтобы майнкрафт-аккаунт **${PLAYER_NAME}** был забанен по причине:\n\"${REASON}\""
        imageUrl: "https://minotar.net/body/${PLAYER_KEY}/100.png"
        footer:
          message: "${CURRENT_DATE} ${CURRENT_TIME}"
        actions:
          punishment:
            label: "Наказание"
        color: "ORANGE"

      punishmentVoting:
        title: "Запрос на бан - Наказание"
        description: "Пользователь Discord <@${REQUESTER_UUID}> хочет, чтобы майнкрафт-аккаунт **${PLAYER_NAME}** был забанен по причине:\n\"${REASON}\".\n <@${ADMIN_UUID}> предлагает **${PUNISHMENT}** \n**${ACCEPT_VOTES}** голосов за, **${DENY_VOTES}** голосов против. (нужно ${MIN_ACCEPT_VOTES} голосов для принятия и ${MIN_DENY_VOTES} голосов для отклонения запроса)"
        imageUrl: "https://minotar.net/body/${PLAYER_KEY}/100.png"
        footer:
          message: "${CURRENT_DATE} ${CURRENT_TIME}"
        actions:
          accept:
            label: "Принять"
            emoji: "U+2705"
          deny:
            label: "Отклонить"
            emoji: "U+26D4"
        color: "ORANGE"

      punishmentDecided:
        title: "Запрос на бан - Наказание"
        description: "**${PLAYER_NAME}** получит следующее наказание: **${PUNISHMENT}**"
        imageUrl: "https://minotar.net/helm/${PLAYER_KEY}/100.png"
        footer:
          message: "${CURRENT_DATE} ${CURRENT_TIME}"
        color: "GREEN"

      punishmentVotingNotAllowed:
        title: "Ты не можешь голосовать (у тебя нет нужной роли в Discord)"
        footer:
          message: "${CURRENT_DATE} ${CURRENT_TIME}"
        color: "RED"

      reasonPicker:
        title: "Запрос на бан - Причина"
        description: "Пользователь Discord <@${REQUESTER_UUID}> хочет, чтобы майнкрафт-аккаунт **${PLAYER_NAME}** получил ${PUNISHMENT} по причине:\n\"${ORIGINAL_REASON}\". Эта причина была отклонена, какой должна быть причина?"
        imageUrl: "https://minotar.net/helm/${PLAYER_KEY}/100.png"
        footer:
          message: "${CURRENT_DATE} ${CURRENT_TIME}"
        actions:
          change:
            label: "Изменить причину"
        color: "ORANGE"

      reasonFirstVote:
        title: "Запрос на бан - Причина"
        description: "Пользователь Discord <@${REQUESTER_UUID}> хочет, чтобы майнкрафт-аккаунт **${PLAYER_NAME}** получил ${PUNISHMENT} по причине:\n\"${REASON}\".\n Это хорошая **причина**? \n**${ACCEPT_VOTES}** голосов за, **${DENY_VOTES}** голосов против. (нужно ${MIN_ACCEPT_VOTES} голосов для принятия и ${MIN_DENY_VOTES} голосов для отклонения запроса)"
        imageUrl: "https://minotar.net/helm/${PLAYER_KEY}/100.png"
        footer:
          message: "${CURRENT_DATE} ${CURRENT_TIME}"
        actions:
          accept:
            label: "Принять"
            emoji: "U+2705"
          deny:
            label: "Отклонить"
            emoji: "U+26D4"
        color: "ORANGE"

      reasonVoting:
        title: "Запрос на бан - Изменение причины"
        description: "Пользователь Discord <@${REQUESTER_UUID}> хочет, чтобы майнкрафт-аккаунт **${PLAYER_NAME}** получил ${PUNISHMENT} по причине:\n\"${ORIGINAL_REASON}\".\n\n <@${ADMIN_UUID}> предлагает изменить причину на \"${REASON}\" \n\n**${ACCEPT_VOTES}** голосов за, **${DENY_VOTES}** голосов против. (нужно ${MIN_ACCEPT_VOTES} голосов для принятия и ${MIN_DENY_VOTES} голосов для отклонения запроса"
        imageUrl: "https://minotar.net/helm/${PLAYER_KEY}/100.png"
        footer:
          message: "${CURRENT_DATE} ${CURRENT_TIME}"
        actions:
          accept:
            label: "Принять"
            emoji: "U+2705"
          deny:
            label: "Отклонить"
            emoji: "U+26D4"
        color: "ORANGE"

      reasonDecided:
        title: "Запрос на бан - Принят"
        description: "**${PLAYER_NAME}** получит следующее наказание: **${PUNISHMENT}**. По причине \"${REASON}\""
        imageUrl: "https://minotar.net/helm/${PLAYER_KEY}/100.png"
        footer:
          message: "${CURRENT_DATE} ${CURRENT_TIME}"
        color: "GREEN"

      reasonVotingNotAllowed:
        title: "Ты не можешь голосовать (у тебя нет нужной роли в Discord)"
        footer:
          message: "${CURRENT_DATE} ${CURRENT_TIME}"
        color: "RED"

      publicDenied:
        title: "Наказание отклонено"
        description: "**${PLAYER_NAME}** не получил наказание\n(Запросил <@${REQUESTER_UUID}>)"
        imageUrl: "https://minotar.net/body/${PLAYER_KEY}/100.png"
        footer:
          message: "${CURRENT_DATE} ${CURRENT_TIME}"
        color: "GREEN"

      publicAccepted:
        title: "Наказание принято"
        description: "**${PLAYER_NAME}** получил *${PUNISHMENT}* по причине '*${REASON}*'\n(Запросил <@${REQUESTER_UUID}>)"
        imageUrl: "https://minotar.net/body/${PLAYER_KEY}/100.png"
        footer:
          message: "${CURRENT_DATE} ${CURRENT_TIME}"
        color: "RED"

  #
  # *************************************************************************
  #  Разбаны                                                               *
  # *************************************************************************
  #
  unban:
    embeds:
      alreadyRequested:
        title: "Извини, ты уже отправлял запрос на разбан."
        description: "Твой предыдущий запрос на бан сейчас рассматривается. Пожалуйста, подожди"
        footer:
          message: "${CURRENT_DATE} ${CURRENT_TIME}"
        color: "BLUE"

      notBanned:
        title: "Ты не забанен."
        description: "Ты не забанен, поэтому не можешь запросить разбан. (бедняга)"
        footer:
          message: "${CURRENT_DATE} ${CURRENT_TIME}"
        color: "BLUE"

      playerNotFound:
        title: "Ты ещё не зарегистрирован как майнкрафт-игрок"
        description: "Сначала получи вайтлист, прежде чем пытаться разбаниться. Запрос проигнорирован"
        footer:
          message: "${CURRENT_DATE} ${CURRENT_TIME}"
        color: "BLUE"

      request:
        title: "Запросить разбан"
        description: "Хочешь разбаниться?\nНажми на кнопку ниже, чтобы запросить разбан!"
        footer:
          message: "${CURRENT_DATE} ${CURRENT_TIME}"
        actions:
          button:
            label: "Запросить разбан"
            emoji: "U+2705"
        color: "YELLOW"

      notAllowed:
        title: "Ты не можешь запросить разбан (у тебя нет нужной роли в Discord)"
        footer:
          message: "${CURRENT_DATE} ${CURRENT_TIME}"
        color: "RED"

      noUnbanPunishment:
        title: "Ты не можешь запросить разбан (у тебя есть наказание, запрещающее разбан)"
        footer:
          message: "${CURRENT_DATE} ${CURRENT_TIME}"
        color: "RED"

      requestPlayerPicker:
        title: "Выбери, за кого хочешь запросить разбан"
        description: "Используй меню ниже, чтобы выбрать игрока:"
        actions:
          minecraftUser:
            label: "Майнкрафт-аккаунт"
        color: "BLUE"

      requestConfirm:
        title: "Хочешь разбанить следующего игрока?"
        description: "1. Хочешь запросить снятие **${PUNISHMENT_NAME}** с **${PLAYER_NAME}** по следующей причине: '*${REASON}*'.\n2. Проверь, что скин ниже принадлежит аккаунту **${PLAYER_NAME}**"
        imageUrl: "https://minotar.net/body/${PLAYER_KEY}/100.png"
        footer:
          message: "${CURRENT_DATE} ${CURRENT_TIME}"
        actions:
          confirm:
            label: "Это я"
            emoji: "U+2705"
          cancel:
            label: "Отмена"
            emoji: "U+26D4"
        color: "BLUE"

      requestCanceled:
        title: "Запрос отменён"
        footer:
          message: "${CURRENT_DATE} ${CURRENT_TIME}"

      requestConfirmed:
        title: "Твой запрос будет рассмотрен админами"
        footer:
          message: "${CURRENT_DATE} ${CURRENT_TIME}"

      voting:
        title: "Запрос на разбан"
        description: "Пользователь Discord <@${REQUESTER_UUID}> хочет, чтобы его наказание **${PUNISHMENT_NAME}** было снято с его майнкрафт-аккаунта **${PLAYER_NAME}**.\n Он указал следующую причину:\n *${REASON}* \n\n**${ACCEPT_VOTES}** голосов за, **${DENY_VOTES}** голосов против. \n(нужно ${MIN_ACCEPT_VOTES} голосов для принятия и ${MIN_DENY_VOTES} голосов для отклонения запроса)"
        imageUrl: "https://minotar.net/body/${PLAYER_KEY}/100.png"
        footer:
          message: "${CURRENT_DATE} ${CURRENT_TIME}"
        actions:
          accept:
            label: "Принять"
            emoji: "U+2705"
          deny:
            label: "Отклонить"
            emoji: "U+26D4"
        color: "YELLOW"

      votingDenied:
        title: "Запрос на разбан - отклонён"
        description: "Запрос от пользователя <@${REQUESTER_UUID}> на снятие наказания **${PUNISHMENT_NAME}** с **${PLAYER_NAME}** был отклонён"
        imageUrl: "https://minotar.net/helm/${PLAYER_KEY}/100.png"
        footer:
          message: "${CURRENT_DATE} ${CURRENT_TIME}"
        color: "RED"

      votingAccepted:
        title: "Запрос на разбан - принят"
        description: "Запрос от пользователя <@${REQUESTER_UUID}> на снятие наказания **${PUNISHMENT_NAME}** с **${PLAYER_NAME}** был принят"
        imageUrl: "https://minotar.net/helm/${PLAYER_KEY}/100.png"
        footer:
          message: "${CURRENT_DATE} ${CURRENT_TIME}"
        color: "GREEN"

      votingNotAllowed:
        title: "Ты не можешь голосовать (у тебя нет нужной роли в Discord)"
        footer:
          message: "${CURRENT_DATE} ${CURRENT_TIME}"
        color: "RED"

      publicDenied:
        title: "Разбан отклонён"
        description: "Наказание **${PLAYER_NAME}** *${PUNISHMENT_NAME}* не было снято. \n(Запросил <@${REQUESTER_UUID}>)"
        imageUrl: "https://minotar.net/body/${PLAYER_KEY}/100.png"
        footer:
          message: "${CURRENT_DATE} ${CURRENT_TIME}"
        color: "RED"

      publicAccepted:
        title: "Разбан принят"
        description: "Наказание **${PLAYER_NAME}** *${PUNISHMENT_NAME}* было снято.\n(Запросил <@${REQUESTER_UUID}>)"
        imageUrl: "https://minotar.net/body/${PLAYER_KEY}/100.png"
        footer:
          message: "${CURRENT_DATE} ${CURRENT_TIME}"
        color: "GREEN"

  #
  # *************************************************************************
  #  Техработы                                                             *
  # *************************************************************************
  #

  maintenance:
    embeds:
      onStart:
        title: "------------[Техработы]------------"
        description: "Извини, сервер на техработах, сейчас ты не можешь зайти"
        footer:
          message: "${CURRENT_DATE} ${CURRENT_TIME}"
        color: "YELLOW"

      onStop:
        title: "------------[Техработы]------------"
        description: "Сервер снова онлайн, техработы завершены."
        footer:
          message: "${CURRENT_DATE} ${CURRENT_TIME}"
        color: "GREEN"

      notAllowed:
        title: "Извини, ты не можешь использовать эту команду"

      wrongChannel:
        title: "Извини, ты не можешь использовать эту команду в этом канале"

      incomplete:
        title: "Укажи, должен ли бот запустить или остановить режим техработ"
        color: "RED"

      command:
        title: "Считай, что сделано, босс"

  #
  # *************************************************************************
  #  Команда info                                                          *
  # *************************************************************************
  #

  infoCommand:
    embeds:
      notAllowed:
        title: "Извини, ты не можешь использовать эту команду"

      wrongChannel:
        title: "Извини, ты не можешь использовать эту команду в этом канале"

      incomplete:
        title: "Укажи пользователя, аргументы команды неполные"
        color: "RED"

      notRegistered:
        title: "Этот пользователь Discord не зарегистрирован на сервере"
        description: "У <@${DISCORD_UUID}> нет майнкрафт-аккаунта в вайтлисте"
        color: "BLUE"

      command:
        title: "*${PLAYER_NAME}*"
        description: "${PLAYER_NAME}, зарегистрирован <@${DISCORD_UUID}>.\n У этого игрока следующие наказания:\n"
        imageUrl: "https://minotar.net/body/${PLAYER_KEY}/100.png"
        # Extra is used to add a line to the description for every punishment:
        extra: "- *${PUNISHMENT_NAME}* до *${PUNISHMENT_UNTIL}*\n"
        color: "BLUE"

#
# *************************************************************************
#  Модальные окна                                                        *
# *************************************************************************
#
modals:
  whitelist:
    modals:
      request:
        title: "Запрос на вайтлист"
        actions:
          username:
            label: "Никнейм"
            placeholder: "Steve1234"

  banning:
    modals:
      request:
        title: "Запрос на бан"
        actions:
          discordUser:
            label: "Пользователь Discord"
          minecraftUser:
            label: "Майнкрафт-аккаунт"
          reason:
            label: "Причина"
            placeholder: "Укажи хорошую причину, почему ты хочешь забанить этого игрока"
      reasonChange:
        title: "Изменить причину"
        actions:
          reason:
            label: "Причина"
            placeholder: "${ORIGINAL_REASON}"
            value: "${ORIGINAL_REASON}"
  
  unban:
    modals:
      request:
        title: "Запрос на разбан"
        actions:
          punishment:
            label: "Наказание"
          reason:
            label: "Причина"
            placeholder: "Укажи хорошую причину, почему ты хочешь разбаниться"

#
# *************************************************************************
#  Команды                                                               *
# *************************************************************************
#
commands:
  maintenance:
    name: "maintenance"
    description: "Команда для запуска или остановки режима техработ"
    options:
      startStop:
        name: "start-stop"
        description: "Запустить или остановить режим техработ"
        options: ["start", "stop"]
  info:
    name: "player-info"
    description: "Команда для отображения информации об игроке"
    options:
      subcommandMinecraft:
        name: "minecraft"
        description: "Получить информацию о майнкрафт-игроке"
      subcommandDiscord:
        name: "discord"
        description: "Получить информацию о пользователе Discord"
      minecraftUser:
        name: "minecraft-user"
        description: "Майнкрафт-игрок, о котором ты хочешь получить информацию"
      discordUser:
        name: "discord-user"
        description: "Пользователь Discord, о котором ты хочешь получить информацию"

</details>

## Скачать
Перейдите на [modrinth.com](https://modrinth.com/plugin/discordio), чтобы скачать этот мод

## Установка
Дополнительную информацию смотрите на [discord.com/developers/docs/quick-start/getting-started](https://discord.com/developers/docs/quick-start/getting-started).

1. Запустите свой сервер (fabric или velocity) и остановите его снова
2. Сервер создаст папку mods или plugin, поместите jar-файл, соответствующий типу вашего сервера, в эту папку (перейдите на [modrinth.com](https://modrinth.com/plugin/discord-server), чтобы скачать)
3. Снова запустите сервер, этот мод создаст для вас файл config.yml, откройте его (следующие шаги проведут вас через его настройку)
4. Перейдите на портал разработчиков Discord [discord.com/developers/applications](https://discord.com/developers/applications)
5. Нажмите на "New application"
![Фото панели Discord при посещении discord.com/developers/applications](https://cdn.modrinth.com/data/cached_images/32418848f2edff4876399f614296a5dfd75806a8_0.webp)
6. Выберите имя и примите пользовательское соглашение
![Фото панели Discord после нажатия на "New application"](https://cdn.modrinth.com/data/cached_images/eecc7b4c630896769d4be778306aa7b45d59d1f6.png)
7. Используйте боковую панель, чтобы перейти в раздел ботов
![Фото панели Discord после создания вашего бота](https://cdn.modrinth.com/data/cached_images/0c943b84501658f40064de89b8a2cf2f92e4b22a.png)
8. Нажмите на reset token и подтвердите
![Фото раздела ботов панели Discord](https://cdn.modrinth.com/data/cached_images/2271f28d2ff2c1d0002e6d87cc30f395626fe126.png)
9. Скопируйте токен вашего бота и вставьте его в поле botToken вашего конфига
![Фото файла config.yaml](https://cdn.modrinth.com/data/cached_images/320867a76a461854ce865a5169a3f4d2c8b72954.png)
10. Снова в разделе ботов прокрутите вниз, чтобы включить gateway intent 'Message content intent'
![Фото раздела ботов панели Discord с включённым gateway intent 'Message content intent'](https://cdn.modrinth.com/data/cached_images/3043c9e7eea39682e95a0ce4497437117949ccbe.png)
11. Теперь используйте боковую панель, чтобы перейти к установке, и настройте следующее:
![Фото экрана установки. User install отключён, scopes=bot, permissions=Send messages, Bypass slow mode, Manage roles и Add reactions](https://cdn.modrinth.com/data/cached_images/6923be4af080e486b05c58668e760fdcea351d35.png)
12. Скопируйте url, предоставленный Discord на предыдущем экране, и перейдите по нему, теперь вы можете пригласить его на сервер, куда бот должен отправлять сообщения

Теперь мы хотим настроить функции, вы можете использовать следующее руководство, чтобы получить ID канала:
[support.discord.com](https://support.discord.com/hc/en-us/articles/206346498-Where-can-I-find-my-User-Server-Message-ID)
Затем вы можете скопировать ID ваших каналов в функции, которые хотите включить в конфиге (!отключите функцию, если не хотите её использовать!)

## Баги
Если вы найдёте баги или странное поведение, пожалуйста, откройте issue на github ([github.com](https://github.com/hidde2727/VelocityDiscord/issues)) или отправьте письмо на 93196280+hidde2727@users.noreply.github.com

Частые вопросы

Как установить DiscordIO?

Установите Fabric под свою версию Minecraft, скачайте DiscordIO под ту же версию и загрузчик, положите файл в папку mods и запустите игру с профилем загрузчика.

Для каких версий Minecraft есть DiscordIO?

У DiscordIO есть сборки для Minecraft 1.21–26.3.

Нужен ли DiscordIO на сервере?

Ставится только на сервер; игрокам ставить не нужно

Лицензия и источник
MIT Licenseможно свободно использовать и распространять с указанием автора
Оригинал — Modrinth↗Файлы — без изменений, проверены по SHA-512Это ваш мод? Правообладателям

Сайт использует cookie: необходимые — для входа и темы, а также счётчики посещений Яндекс Метрика и LiveInternet — по ним мы видим, как пользуются сайтом. Рекламных cookie у нас нет. Подробнее