Sueta

DiscordIO

0.9.0

Whitelist with discord, ban with discord. Get notified when the server starts/stops. Get minecraft messages in discord. Fabric/Velocity

·Plugin
Tested MC versions
1.21, 26.1, 26.2, 26.3
⚠️ Warning ⚠️
This project is still under development. There may still be bugs/crashes! (please report them on github.com)
If you are upgrading to a newer version, you will need to upgrade your language.yml and config.yml yourself (data.yml is done automatically).

Features

  • Works on both Velocity proxies and Fabric servers
  • Whitelisting feature to people make whitelist requests via discord
  • (Un)Banning feature to punish those that are annoying (kick them multiple times, ban them permanently/for a certain duration)
  • Highly configurable (see config.yaml and language.yml for all the things you can mess with)
  • Maintenance mode, disallows everyone from joining the server except those specified in the config + disables all event messaging
  • Custom discord messages on server start and stop
  • Custom discord messages when players connect and disconnect
  • Custom discord message when players message in minecraft
  • Custom minecraft messages when user messages on discord

Configs:

config.yml version 0.8.0

See github.com for an up to date version

# !This file must be setup before using this plugin!
# Once a feature is enabled, disabling it again may result in undefined behavior
# If you really want to disable a feature, but this wrecks your whitelist/install, you should delete the data.yml file

# See https://modrinth.com/plugin/discordio on how to get a token
botToken:   "Insert your token here, see the https://modrinth.com/plugin/discordio on how to get a token"
# Guild ID is needed for adding commands
guildId:    "Insert your guild id here (the ID of your discord server)"

# Discord messages for in game events
events:
  # On server start message
  onStart:
    enabled: false
    channel: "id..."

  # On server stop message
  onStop:
    enabled: false
    channel: "id..."

  # On player join message
  onJoin:
    enabled: false
    channel: "id..."

  # On player leave message
  onLeave:
    enabled: false
    channel: "id..."

  # On discord/minecraft message forward it
  onMessage:
    enabled: false
    minecraftToDiscord: true
    discordToMinecraft: true

    # Uncomment the one that applies to your server type:

    # For fabric:
    # channels:
    #   fabric: "id..."

    # For velocity
    # (The server names are the ones specified in the velocity.toml file you configured)
    # Do not share discord channels if you have discordToMinecraft enabled
    # channels:
    #   server1: "id..."
    #   server2: "id..."


# If enabled, will use the UUID registered at mojang for verification
# !The server must be in online mode to use this!
# You currently cannot change this setting after you have someone whitelisted, so choose carefully
# If you really want to change this, delete the data.yml file (this will remove all whitelisted players, they will need to be whitelisted again)
useUUID: true
# If enabled only one minecraft account is allowed per discord user
# You currently cannot change this setting after you have someone whitelisted, so choose carefully
# If you really want to change this, delete the data.yml file (this will remove all whitelisted players, they will need to be whitelisted again)
connectAccounts: true

# If set to false, this plugin will delete all the interactable messages on shutdown, to then resend them on startup
# If set to true, this plugin will disable all the interactable messages on shutdown, to then enable them again on startup (so no annoying ping when the server starts up)
disableOnShutdown: true

# Combine the whitelist, ban and unban request message in one single request message
squashedRequest:
  enabled: false
  channel: "id..."

# Whitelisting via discord
whitelist:
  enabled: false

  # Should this plugin give someone that is whitelisted a special role
  giveRoleOnWhitelist: false
  # The role to give a player when he is whitelisted (only if giveRoleOnWhitelist=true)
  # Enable developer options to get the role ID easily from the discord server settings:
  whitelistedRoleID: ""

  onAccept:
    enabled: true
    channel: "id..."
  onDeny:
    enabled: true
    channel: "id..."
  request:
    enabled: true
    channel: "id..."
    checkRoles: false
    allowedRoles: []
  voting:
    # If disabled, a request will imply immediate whitelist
    enabled: true
    channel: "id.."
    checkRoles: false
    allowedRoles: []
    acceptVotes: "50%"
    denyVotes: "1"

# Banning via discord
banning:
  enabled: false

  # Should this plugin give someone that is banned a special role
  giveRoleOnBan: false
  # The role to give a player when he is banned (only if giveRoleOnBan=true)
  # Enable developer options to get the role ID easily from the discord server settings:
  bannedRoleID: ""

  onAccept:
    enabled: true
    channel: "id..."
  onDeny:
    enabled: true
    channel: "id..."
  request:
    enabled: true
    channel: "id..."
    checkRoles: false
    allowedRoles: []
    # Choose one of the following ways a user can choose who he wants to ban:
    # - "discord" select the discord username they want banned (cannot be used if connectAccounts=false)
    # - "minecraft" select the minecraft username they want banned
    identifier: "discord"
  punishment:
    # If disabled, a request will proceed as a perm ban request to reason picking
    enabled: true
    channel: "id..."
    checkRoles: false
    allowedRoles: []
    acceptVotes: "50%"
    denyVotes: "1"
    punishments:
      # If you do not keep the none punishment, the admins cannot deny a ban request
      "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:
    # If disabled, a request will keep the reason of the request
    enabled: true
    channel: "id..."
    checkRoles: false
    allowedRoles: []
    acceptVotes: "50%"
    denyVotes: "1"

# Unbanning via discord
unban:
  enabled: false

  onAccept:
    enabled: true
    channel: "id..."
  onDeny:
    enabled: true
    channel: "id..."
  request:
    enabled: true
    channel: "id..."
    checkRoles: false
    allowedRoles: []
  voting:
    # If disabled, a request will imply immediate unban
    enabled: true
    channel: "id.."
    checkRoles: false
    allowedRoles: []
    acceptVotes: "50%"
    denyVotes: "1"

maintenance:
  # Disables events and rejects everyone not on the crew list
  enabled: false
  # Enable maintenance mode from the config:
  inMaintenance: false
  # Players allowed to join during maintenance
  # Use UUID's if useUUID=true, else use player names
  # This does not override the whitelist and banning features, you still need to be whitelisted to enter
  # A UUID should be without dashes so: 123456789abcdefghijklmni12345678
  crew: ["player1", "player2"]
  # Command to enable maintenance mode via discord
  command:
    enabled: false
    checkChannel: false
    allowedChannels: ["id..."]
    checkRoles: false
    allowedRoles: []
  # On start messages
  onStart:
    enabled: false
    channel: "id..."
  # On end message
  onStop:
    enabled: false
    channel: "id..."

# A discord command to see if someone is whitelisted or not (and if the person has punishments)
infoCommand:
  enabled: false
  checkChannel: false
  allowedChannels: ["id..."]
  checkRoles: false
  allowedRoles: []
language.yml version 0.8.0

See github.com for an up to date version

embeds:
  #
  # *************************************************************************
  #  Events                                                                 *
  # *************************************************************************
  #
  events:
    embeds:
      onStart:
        title: "-------------[Online]-------------"
        description: ":green_circle: **Proxy** is online!"
        footer:
          message: "${CURRENT_DATE} ${CURRENT_TIME}"
        color: "GREEN"

      onStop:
        title: "-------------[Offline]-------------"
        description: ":no_entry: **Proxy** is offline!"
        footer:
          message: "${CURRENT_DATE} ${CURRENT_TIME}"
        color: "RED"

      onJoin:
        title: "-------------[Connected]-------------"
        description: "**${PLAYER_NAME}** joined the server!"
        imageUrl: "https://minotar.net/helm/${PLAYER_KEY}/240.png"
        footer:
          message: "${CURRENT_DATE} ${CURRENT_TIME}"
        color: "GREEN"

      onLeave:
        title: "-------------[Disconnected]-------------"
        description: "**${PLAYER_NAME}** left the server!"
        imageUrl: "https://minotar.net/helm/${PLAYER_KEY}/240.png"
        footer:
          message: "${CURRENT_DATE} ${CURRENT_TIME}"
        color: "RED"

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


  #
  # *************************************************************************
  #  Squashed request                                                       *
  # *************************************************************************
  #

  squashedRequest:
    embeds:
      request:
        title: "Do you want to request something?"
        description: "Click the buttons below to get **whitelisted**, request a **ban** or request an **unban**"
        footer:
          message: "${CURRENT_DATE} ${CURRENT_TIME}"
        actions:
          whitelist:
            label: "Request whitelist"
            emoji: "U+2705"
          ban:
            label: "Request ban"
            emoji: "U+2705"
          unban:
            label: "Request unban"
            emoji: "U+2705"
        color: "blue"


  #
  # *************************************************************************
  #  Whitelisting                                                           *
  # *************************************************************************
  #
  whitelist:
    embeds:
      alreadyWhitelisted:
        title: "Sorry, you already made a whitelist request."
        description: "You are either already whitelisted, or you made a request previously that is being approved. Please wait patiently"
        footer:
          message: "${CURRENT_DATE} ${CURRENT_TIME}"
        color: "BLUE"

      request:
        title: "Request access"
        description: "Do you also want to be whitelisted?\nClick the button below to request access to the minecraft server!"
        footer:
          message: "${CURRENT_DATE} ${CURRENT_TIME}"
        actions:
          button:
            label: "Request whitelist"
            emoji: "U+2705"
        color: "BLUE"

      notAllowed:
        title: "You are not allowed to request to be whitelisted (you do not have the correct discord role)"
        footer:
          message: "${CURRENT_DATE} ${CURRENT_TIME}"
        color: "RED"

      requestConfirm:
        title: "Is this you?"
        description: "Check if the skin below is from your account **${PLAYER_NAME}**"
        imageUrl: "https://minotar.net/body/${PLAYER_NAME}/100.png"
        footer:
          message: "${CURRENT_DATE} ${CURRENT_TIME}"
        actions:
          confirm:
            label: "This is me"
            emoji: "U+2705"
          cancel:
            label: "Cancel"
            emoji: "U+26D4"
        color: "BLUE"

      notFound:
        title: "Your player was not found"
        description: "Your player was not found at the Mojang servers"
        footer:
          message: "${CURRENT_DATE} ${CURRENT_TIME}"

      requestCanceled:
        title: "Request was canceled"
        footer:
          message: "${CURRENT_DATE} ${CURRENT_TIME}"

      requestConfirmed:
        title: "Your request will be reviewed by the admins"
        footer:
          message: "${CURRENT_DATE} ${CURRENT_TIME}"

      voting:
        title: "Whitelist request"
        description: "The discord user <@${DISCORD_UUID}> would like to have his minecraft account **${PLAYER_NAME}** to be whitelisted.\n**${ACCEPT_VOTES}** votes are in favor, **${DENY_VOTES}** votes are against. (${MIN_ACCEPT_VOTES} votes are needed to accept and ${MIN_DENY_VOTES} votes are needed to deny the request)"
        imageUrl: "https://minotar.net/body/${PLAYER_KEY}/100.png"
        footer:
          message: "${CURRENT_DATE} ${CURRENT_TIME}"
        actions:
          accept:
            label: "Accept"
            emoji: "U+2705"
          deny:
            label: "Deny"
            emoji: "U+26D4"
        color: "GREEN"

      votingDenied:
        title: "Whitelist request - Denied"
        description: "The request from the user <@${DISCORD_UUID}> to have **${PLAYER_NAME}** be whitelisted was denied"
        imageUrl: "https://minotar.net/helm/${PLAYER_KEY}/100.png"
        footer:
          message: "${CURRENT_DATE} ${CURRENT_TIME}"
        color: "RED"

      votingAccepted:
        title: "Whitelist request - Accepted"
        description: "The request from the user <@${DISCORD_UUID}> to have **${PLAYER_NAME}** be whitelisted was accepted"
        imageUrl: "https://minotar.net/helm/${PLAYER_KEY}/100.png"
        footer:
          message: "${CURRENT_DATE} ${CURRENT_TIME}"
        color: "GREEN"

      votingNotAllowed:
        title: "You are not allowed to vote (you do not have the correct discord role)"
        footer:
          message: "${CURRENT_DATE} ${CURRENT_TIME}"
        color: "RED"

      publicDenied:
        title: "Whitelisted denied"
        description: "**${PLAYER_NAME}** did not get whitelisted\n(Requested by <@${DISCORD_UUID}>)"
        imageUrl: "https://minotar.net/body/${PLAYER_KEY}/100.png"
        footer:
          message: "${CURRENT_DATE} ${CURRENT_TIME}"
        color: "RED"

      publicAccepted:
        title: "Whitelist accepted"
        description: "**${PLAYER_NAME}** got whitelisted\n(Requested by <@${DISCORD_UUID}>)"
        imageUrl: "https://minotar.net/body/${PLAYER_KEY}/100.png"
        footer:
          message: "${CURRENT_DATE} ${CURRENT_TIME}"
        color: "GREEN"

  #
  # *************************************************************************
  #  Banning                                                               *
  # *************************************************************************
  #
  banning:
    embeds:
      request:
        title: "Request punishment"
        description: "Is someone being annoying?\nClick the button below to request a ban"
        actions:
          button:
            label: "Request ban"
            emoji: "U+2705"
        footer:
          message: "${CURRENT_DATE} ${CURRENT_TIME}"
        color: "RED"

      alreadyRequested:
        title: "Sorry, you already made a ban request."
        description: "You made a ban request previously that is being approved. Please wait patiently"
        footer:
          message: "${CURRENT_DATE} ${CURRENT_TIME}"
        color: "BLUE"

      playerNotFound:
        title: "That discord user is not registered"
        description: "The discord user does not have a minecraft account linked. The request is ignored"
        footer:
          message: "${CURRENT_DATE} ${CURRENT_TIME}"
        color: "BLUE"

      requestNotAllowed:
        title: "You are not allowed to request a ban (you do not have the correct discord role)"
        footer:
          message: "${CURRENT_DATE} ${CURRENT_TIME}"
        color: "RED"

      requestConfirm:
        title: "Do you want to ban this user?"
        description: "1. Do you want to request a ban of **${PLAYER_NAME}** with the following reason: '*${REASON}*'.\n2. Check if the skin below is from the account **${PLAYER_NAME}**"
        imageUrl: "https://minotar.net/body/${PLAYER_KEY}/100.png"
        actions:
          confirm:
            label: "This is him"
            emoji: "U+2705"
          cancel:
            label: "Cancel"
            emoji: "U+26D4"
        footer:
          message: "${CURRENT_DATE} ${CURRENT_TIME}"
        color: "RED"

      requestNotFound:
        title: "The user was not found"
        description: "There was no account found associated with the discord user"
        footer:
          message: "${CURRENT_DATE} ${CURRENT_TIME}"

      requestCanceled:
        title: "Request was canceled"
        footer:
          message: "${CURRENT_DATE} ${CURRENT_TIME}"

      requestConfirmed:
        title: "Your request will be reviewed by the admins"
        footer:
          message: "${CURRENT_DATE} ${CURRENT_TIME}"

      punishmentPicker:
        title: "Ban request - Punishment"
        description: "The discord user <@${REQUESTER_UUID}> would like to have the minecraft account **${PLAYER_NAME}** to be banned because:\n\"${REASON}\""
        imageUrl: "https://minotar.net/body/${PLAYER_KEY}/100.png"
        footer:
          message: "${CURRENT_DATE} ${CURRENT_TIME}"
        actions:
          punishment:
            label: "Punishment"
        color: "ORANGE"

      punishmentVoting:
        title: "Ban request - Punishment"
        description: "The discord user <@${REQUESTER_UUID}> would like to have the minecraft account **${PLAYER_NAME}** to be banned because:\n\"${REASON}\".\n <@${ADMIN_UUID}> suggests **${PUNISHMENT}** \n**${ACCEPT_VOTES}** votes are in favor, **${DENY_VOTES}** votes are against. (${MIN_ACCEPT_VOTES} votes are needed to accept and ${MIN_DENY_VOTES} votes are needed to deny the request)"
        imageUrl: "https://minotar.net/body/${PLAYER_KEY}/100.png"
        footer:
          message: "${CURRENT_DATE} ${CURRENT_TIME}"
        actions:
          accept:
            label: "Accept"
            emoji: "U+2705"
          deny:
            label: "Deny"
            emoji: "U+26D4"
        color: "ORANGE"

      punishmentDecided:
        title: "Ban request - Punishment"
        description: "**${PLAYER_NAME}** will get the following punishment: **${PUNISHMENT}**"
        imageUrl: "https://minotar.net/helm/${PLAYER_KEY}/100.png"
        footer:
          message: "${CURRENT_DATE} ${CURRENT_TIME}"
        color: "GREEN"

      punishmentVotingNotAllowed:
        title: "You are not allowed to vote (you do not have the correct discord role)"
        footer:
          message: "${CURRENT_DATE} ${CURRENT_TIME}"
        color: "RED"

      reasonPicker:
        title: "Ban Request - Reason"
        description: "The discord user <@${REQUESTER_UUID}> would like to have the minecraft account **${PLAYER_NAME}** to receive a ${PUNISHMENT} because:\n\"${ORIGINAL_REASON}\". This reason was denied, what should the reason be?"
        imageUrl: "https://minotar.net/helm/${PLAYER_KEY}/100.png"
        footer:
          message: "${CURRENT_DATE} ${CURRENT_TIME}"
        actions:
          change:
            label: "Change reason"
        color: "ORANGE"

      reasonFirstVote:
        title: "Ban request - Reason"
        description: "The discord user <@${REQUESTER_UUID}> would like to have the minecraft account **${PLAYER_NAME}** to receive a ${PUNISHMENT} because:\n\"${REASON}\".\n Is this a good **reason**? \n**${ACCEPT_VOTES}** votes are in favor, **${DENY_VOTES}** votes are against. (${MIN_ACCEPT_VOTES} votes are needed to accept and ${MIN_DENY_VOTES} votes are needed to deny the request)"
        imageUrl: "https://minotar.net/helm/${PLAYER_KEY}/100.png"
        footer:
          message: "${CURREN

Similar projects

Plugin →