diff --git a/.gitmodules b/.gitmodules deleted file mode 100644 index a4f2c39..0000000 --- a/.gitmodules +++ /dev/null @@ -1,3 +0,0 @@ -[submodule "pages/wiki"] - path = pages/wiki - url = https://github.com/EssentialsX/wiki.git diff --git a/pages/wiki b/pages/wiki deleted file mode 160000 index f55d79c..0000000 --- a/pages/wiki +++ /dev/null @@ -1 +0,0 @@ -Subproject commit f55d79cdd76c79895c22d3aa2b336fe50caf0b86 diff --git a/pages/wiki/BannerMeta.md b/pages/wiki/BannerMeta.md new file mode 100644 index 0000000..a9ebe54 --- /dev/null +++ b/pages/wiki/BannerMeta.md @@ -0,0 +1,18 @@ +# BannerMeta +BannerMeta lets you create custom flag designs for banners and shields. Each banner can have unlimited patterns and patterns listed first will show underneath patterns listed later. + +![BannerMeta example](https://user-images.githubusercontent.com/1917406/63939958-5f891000-ca60-11e9-8025-32808f018757.png) + +## Base Color +Base color should be the first thing listed for a banner. It will be displayed as RGB. Base color will show below all patterns. + +Note that on 1.13 and above, you don't need to specify a base color for banners, as banners already have a base color. + +## Patterns +Patterns will be listed after the base color and will include the type with the color listed after a comma. +[PatternTypes can be found here.](https://hub.spigotmc.org/javadocs/spigot/org/bukkit/block/banner/PatternType.html) + +### Example Syntax +An example banner: + +`- BANNER:13 1 basecolor:11685080 SQUARE_TOP_RIGHT:14188339` diff --git a/pages/wiki/Color-Permissions.md b/pages/wiki/Color-Permissions.md new file mode 100644 index 0000000..08cc8ab --- /dev/null +++ b/pages/wiki/Color-Permissions.md @@ -0,0 +1,54 @@ +# Color Permissions + + + +EssentialsX includes permissions that let you control the individual formatting codes players can use in some commands. + +This works for the following: +* Sending a PM with `/msg`: `essentials.msg.` +* Sending mails with `/mail`: `essentials.mail.` +* Setting your own nickname with `/nick`: `essentials.nick.` +* Sending chat messages **(requires EssentialsX Chat)**: `essentials.chat.` +* Editing a sign with `/editsign`: `essentials.editsign.` +* Colors on signs **(requires color signs to be enabled)**: `essentials.signs.` + +Below is a list of valid permissions suffixes. Note that some codes are only available on EssentialsX 2.16.1.169 and +above: + +| Suffix | Color codes | EssentialsX version | +|------------------|---------------------------------------------------|---------------------| +| `color` (group) | `&0 &1 &2 &3 &4 &5 &6 &7 &8 &9 &a &b &c &d &e &f` | All versions | +| `format` (group) | `&l &m &n &o &r` | All versions | +| `magic` (group) | `&k` | All versions | +| `rgb` | `&#RRGGBB` | 2.18.0+ | +| `black` | `&0` | 2.16.1.169+ | +| `dark_blue` | `&1` | 2.16.1.169+ | +| `dark_green` | `&2` | 2.16.1.169+ | +| `dark_aqua` | `&3` | 2.16.1.169+ | +| `dark_red` | `&4` | 2.16.1.169+ | +| `dark_purple` | `&5` | 2.16.1.169+ | +| `gold` | `&6` | 2.16.1.169+ | +| `gray` | `&7` | 2.16.1.169+ | +| `dark_gray` | `&8` | 2.16.1.169+ | +| `blue` | `&9` | 2.16.1.169+ | +| `green` | `&a` | 2.16.1.169+ | +| `aqua` | `&b` | 2.16.1.169+ | +| `red` | `&c` | 2.16.1.169+ | +| `light_purple` | `&d` | 2.16.1.169+ | +| `yellow` | `&e` | 2.16.1.169+ | +| `white` | `&f` | 2.16.1.169+ | +| `bold` | `&l` | 2.16.1.169+ | +| `strikethrough` | `&m` | 2.16.1.169+ | +| `underline` | `&n` | 2.16.1.169+ | +| `italic` | `&o` | 2.16.1.169+ | +| `reset` | `&r` | 2.16.1.169+ | + +The individual permissions take priority over the "group" permissions. For example, if you set `essentials.nick.color` +to `true` then set `essentials.nick.black` to `false`, players will be able to set their nicknames to any color +except black. + +## Nicknames + +If you want players to be able to change the color of their nickname but not the text itself, set the permission +`essentials.nick.changecolors` to `true`. This will let them use color codes in their nickname, but the text will still +have to match their own username. diff --git a/pages/wiki/Command-Cooldowns.md b/pages/wiki/Command-Cooldowns.md new file mode 100644 index 0000000..78c5c39 --- /dev/null +++ b/pages/wiki/Command-Cooldowns.md @@ -0,0 +1,46 @@ +**This feature was added in [build 369](https://ci.ender.zone/job/EssentialsX) ([09acbcd](https://github.com/drtshock/Essentials/commit/09acbcdb05f34e0043116f1866904b0ff0f03ddd)).** +_Requested in [#110](/drtshock/Essentials/issues/110). PR in [#692](/drtshock/Essentials/pull/692)._ + +This feature introduces the highly demanded ability to apply cooldowns to commands. If you want to limit how often a player can `/feed` or go `/home`, all you have to do is simply add that command to the config: + +```yaml +command-cooldowns: + feed: 10 # 10 seconds + home: 70 # 1 minute 10 seconds +``` + +**Advanced users** are able to apply more control to their command matching by using wildcards. Wildcards are specified using asterisks '*'. For example, to match all commands that include the word `potato`, you would simply wrap the world potato in asterisks: +```yaml +command-cooldowns: + '*potato*': 30 +``` + +**NOTE**: Due to YAML's design, any command starting with * must be wrapped in quotation marks (single or double, ' ") + +For **highly technical users** who understand Regex (Regular Expressions), this feature also supports Regex. In order for EssentialsX to begin interpreting regex, the command must start with a caret '^'. Followed by the explicit regex pattern that EssentialsX should match. + +```yaml +command-cooldowns: + '^^ban([^ip])?( .*)?': 30 # match any ban command that isn't `banip`. +``` + +**NOTE**: The leading caret is not part of the regex and is simply removed when parsing the regex. So `'^ban([^ip])?( .*)?'` actually becomes `'ban([^ip])?( .*)?'`. + +**NOTE 2**: If a plugin command starts with a caret e.g. `^mycommand`, then the caret must be escaped using a blackslash '\' to prevent EssentialsX from interpreting the command as Regex. + +# Persistence +By default, EssentialsX will store all existing cooldowns across server sessions. This means when the server shuts down the player cooldowns will be saved and loaded for the next startup. This is especially useful for cooldowns that last any more than a few minutes. + +However, this feature can be disabled, making EssentialsX store cooldowns only until the server shuts down. Resetting all cooldowns when the server starts up. + +To disable command cooldown persistence simply apply the following change to your config: +```yaml +command-cooldown-persistence: false +``` + +**NOTE:** If the `command-cooldown-persistence` is not present in the config then it can be added anywhere in the config, as long as it is not indented. + +# Bypass +**This feature was added in build 377** + +Users can be set to bypass all command cooldowns by giving them the `essentials.commandcooldowns.bypass` permission. diff --git a/pages/wiki/Common-Issues.md b/pages/wiki/Common-Issues.md new file mode 100644 index 0000000..128b55c --- /dev/null +++ b/pages/wiki/Common-Issues.md @@ -0,0 +1,202 @@ +# Common issues with EssentialsX + +## Signs don't work +In your `plugins/Essentials/config.yml` file, you need to uncomment the lines under `enabledSigns` for each type of sign by removing the `#` before it: +```yaml +enabledSigns: + #- color + - balance + #- buy +``` +In this example, the `[balance]` sign is enabled but the `[buy]` sign is not. +Note that enabling `color` means that players will be allowed to use color codes in the sign text, but still requires that another sign type is enabled. + +## EssentialsX overrides a command from Spigot or another plugin +**Related issues: [#1458](/EssentialsX/Essentials/issues/1458)** +You can create an alias for commands using Bukkit's `commands.yml` file, which should be in your server root. + +The example below does the following: +* Overrides `/gc` with [spark](https://github.com/lucko/spark)'s `/profiler` command +* Overrides `/tell` with the [vanilla `/tell`](https://minecraft.gamepedia.com/Commands/tell) command +* Forces `/msg` to run EssentialsX's `/msg` command +```yaml +aliases: + gc: + - "spark:profiler $1-" + tell: + - "minecraft:tell $1-" + msg: + - "essentials:msg $1-" +``` + +See the [Bukkit wiki page](https://bukkit.gamepedia.com/Commands.yml#aliases) for more information. + +## Another plugin is overriding an EssentialsX command +Typically, if EssentialsX finds another plugin providing a command with the same name as one of EssentialsX's own commands, it will try and hand over that command to the other plugin. However, you can force EssentialsX to handle commands that are also provided by another plugin using the [`overridden-commands` section](https://github.com/EssentialsX/Essentials/blob/2.x/Essentials/src/main/resources/config.yml#L162) of your `config.yml`. This will tell EssentialsX not to "give up" the command to the other plugin. + +For example, to force EssentialsX to handle the `/msg` command instead of passing it over to another plugin, your section should look like this: +```yaml +overridden-commands: + - msg +``` + +Note that in some cases, you may also need to alias the command to the `essentials:` version of the command. [See above](https://github.com/EssentialsX/Essentials/wiki/Common-Issues#essentialsx-overrides-a-command-from-spigot-or-another-plugin) for details. In addition, if you have a plugin running on your proxy ([BungeeCord](https://www.spigotmc.org/wiki/bungeecord/)/[Waterfall](https://github.com/PaperMC/Waterfall) or [Velocity](https://velocitypowered.com)), the command may not even reach the server. EssentialsX can't do anything about this - you need to fix this on the proxy. + +## Tab completion doesn't work for commands that override an EssentialsX command +**Related issues: [#1384](/EssentialsX/Essentials/issues/1384)** +You can alias the command to the version from the other plugin, which should fix tab complete behaviour - see above. + +## I need help with GroupManager!
Where's the updated GroupManager? +EssentialsX does not support GroupManager as it is an outdated and broken plugin. We recommend you switch to [LuckPerms](https://github.com/lucko/LuckPerms) as it is still an actively maintained and regularly updated plugin. + +## How do I build EssentialsX? +Once you've ensured you have an up-to-date JDK and Maven installed, you need to build a few different Spigot versions using [Spigot BuildTools](https://www.spigotmc.org/wiki/buildtools/): +```bash +java -jar BuildTools.jar --rev 1.8 +java -jar BuildTools.jar --rev 1.8.3 +java -jar BuildTools.jar --rev 1.9 +java -jar BuildTools.jar --rev 1.9.4 +``` + +This is required to allow EssentialsX's compatibility providers can build against older versions of the Spigot server, and only needs to be done once. + +Next, [download or clone EssentialsX](https://github.com/EssentialsX/Essentials), open a terminal in the root of the EssentialsX source and run: +```bash +./gradlew build +``` + +If this completes with no errors, you will be able to find each plugin jar in the `jars/` directory or, in `build/libs/` inside each module's directory. + +## How do I add EssentialsX as a dependency? +### Repositores +Do you want to integrate with EssentialsX in your plugin? You can use the EssentialsX Maven repo to build against EssentialsX's API. + +Releases are hosted on the Maven repo at `https://repo.essentialsx.net/releases/`, while snapshots (including dev builds) are hosted at `https://repo.essentialsx.net/snapshots/`. + +To add EssentialsX to your build system, you should use the following artifacts: + +| Type | Group ID | Artifact ID | Version | +| :-------------- | :-------------- | :---------- | :-------------- | +| Latest release | net.essentialsx | EssentialsX | 2.19.0 +| Snapshots | net.essentialsx | EssentialsX | 2.19.1-SNAPSHOT | +| Older releases | net.ess3 | EssentialsX | 2.18.2 | + +Note: up until 2.18.2, EssentialsX used the net.ess3 group ID, but starting with 2.19.0 snapshots, the group ID is now net.essentialsx. When updating your plugin, make sure you use the correct group ID. + +### Releases +#### Maven +Under `repositories` in your `pom.xml`, you need to add a new `repository` for the EssentialsX CI server: +```xml + + ... + + essentials-releases + https://repo.essentialsx.net/releases/ + + + paper-repo + https://papermc.io/repo/repository/maven-public/ + + +``` + +Next, add EssentialsX as a `dependency` under `dependencies`: +```xml + + ... + + net.essentialsx + EssentialsX + 2.19.0 + provided + + +``` + +Make sure the dependency is `provided` - you don't want to include the whole of EssentialsX inside your plugin. + +You should now be able to build against EssentialsX's API in your IDE - you may need to reimport your project for this to work. + +#### Gradle +First, add the repository to your `build.gradle`: +```groovy +repositories { + maven { + name "essentialsx-releases" + url "https://repo.essentialsx.net/releases/" + } + maven { + name "papermc" + url "https://papermc.io/repo/repository/maven-public/" + } +} +``` + +Next, add the dependency as a `compileOnly` dependency: +```groovy +dependencies { + ... + compileOnly 'net.essentialsx:EssentialsX:2.19.0' +} +``` + +You should now be able to build against EssentialsX's API in your IDE. + +### Snapshots +#### Maven +Under `repositories` in your `pom.xml`, you need to add a new `repository` for the EssentialsX CI server: +```xml + + ... + + essentials-snapshots + https://repo.essentialsx.net/snapshots/ + + + paper-repo + https://papermc.io/repo/repository/maven-public/ + + +``` + +Next, add EssentialsX as a `dependency` under `dependencies`: +```xml + + ... + + net.essentialsx + EssentialsX + 2.19.1-SNAPSHOT + provided + + +``` + +Make sure the dependency is `provided` - you don't want to include the whole of EssentialsX inside your plugin. + +You should now be able to build against EssentialsX's API in your IDE - you may need to reimport your project for this to work. + +#### Gradle +First, add the repository to your `build.gradle`: +```groovy +repositories { + maven { + name "essentialsx-snapshots" + url "https://repo.essentialsx.net/snapshots/" + } + maven { + name "papermc" + url "https://papermc.io/repo/repository/maven-public/" + } +} +``` + +Next, add the dependency as a `compileOnly` dependency: +```groovy +dependencies { + ... + compileOnly 'net.essentialsx:EssentialsX:2.19.1-SNAPSHOT' +} +``` + +You should now be able to build against EssentialsX's API in your IDE. diff --git a/pages/wiki/Discord-Tutorial.md b/pages/wiki/Discord-Tutorial.md new file mode 100644 index 0000000..302e22d --- /dev/null +++ b/pages/wiki/Discord-Tutorial.md @@ -0,0 +1,464 @@ +# EssentialsX Discord + +EssentialsX Discord is a module that brings a simple, lightweight, easy-to-use, and bloat-free +bridge between Discord and Minecraft. + +EssentialsX Discord offers *essential* features you'd want from a Discord bridge such as: +* MC Chat -> Discord Channel +* Discord Channel -> MC Chat +* Basic MC -> Discord Event Monitoring (Join/Leave/Death/Mute) +* MC Console -> Discord Relay +* Discord Slash Commands + * /execute - Execute console commands from Discord + * /msg - Message Minecraft players from Discord + * /list - List players currently online on Minecraft +* & more... + +--- + +## Table of Contents +> * [Initial Setup](#initial-setup) +> * [Console Relay](#console-relay) +> * [Configuring Messages](#configuring-messages) +> * [Receive Discord Messages in Minecraft](#receive-discord-messages-in-minecraft) +> * [Discord Commands](#discord-commands) +> * [Misc Permissions](#misc-permissions) +> * [Developer API](#developer-api) + +--- + +## Initial Setup + +0. Before starting your server, there are a few steps you have to take. First, you must create a new + Discord bot at [discord.com/developers/applications](https://discord.com/developers/applications/). + +1. Once on that page, click on "New Application" button on the top right, give your bot a name, and + then click "Create". +> ![Creating Application](./images/discord/create-app.gif) +> `New Application` -> Give Application a Name -> `Create` + +2. Once you create the application, you'll be directed to its overview. From this screen, you'll + need to copy your "Application ID" and save it for a later step. To copy your + Application ID, click the upper-left most blue "Copy" button. Make sure to save it for a later step. +> ![Copy Application ID](./images/discord/copy-client-id.gif) +> `Copy` -> Paste into Notepad for later step + +3. Optionally, you can set an icon for your application as it will be the icon for the bot too. +> ![Avatar](./images/discord/avatar.png) + +4. The next step is actually creating a bot user for your application. From the overview screen, + this is done by going to the "Bot" tab on the left, then clicking the "Add Bot" on the right, + and finally then clicking "Yes, do it!". +> ![Create Bot](./images/discord/create-bot.gif) +> `Bot` -> `Add Bot` -> `Yes, do it!` + +5. Once on this screen, you'll need to uncheck the "Public Bot" setting, enable all the "Privileged + Intents", and then click "Save Changes". This prevents other people from adding your bot and also + allows your bot to use more Discord features. +> ![Update Bot Settings](./images/discord/disable-public.gif) +> Uncheck `Public Bot` -> Check `Presence Intent` -> Check `Server Members Intent` -> Check `Message Content Invent` -> Save Changes` + +6. Finally, you'll need to copy your bot's token and save it for a later step. To copy your bot's token, + click the blue "Reset Token" button right of your bot's icon, then click "Yes, do it!", and finally + click "Copy". Make sure to save it for a later step. +> ![Copy Token](./images/discord/copy-token.gif) +> `Reset Token` -> `Yes, do it!` -> `Copy` -> Paste into Notepad for later step + +7. Next up is adding your bot to your Discord server. First, go to [essentialsx.net/discord.html](https://essentialsx.net/discord.html) + and paste your Client ID you copied from step 2 into the text box on that page. Once you do that, click + the "Authorize" button next to the text box. This will redirect you to Discord's authorization website + to chose which server to add the bot to. + Note for advanced users: **Please use the `essentialsx.net` link above even if you already know how + to invite bots.** EssentialsX Discord requires more than just the `bot` scope to work. +> ![OAuth Link Gen](./images/discord/auth.gif) +> Paste Client ID -> `Authorize` + +8. Once on the Discord authorization website, select the server from the "Select a server" dropdown + that you want to add the bot to. Then click the "Authorize" button. You may be prompted to confirm + you are not a bot, proceed with that like you would any other captcha. +> ![Authorize](./images/discord/add-bot.gif) +> Select Server -> `Authorize` + +9. For the next few steps, you're going to need to do some stuff in Discord, so start up your + Discord desktop/web client. + +10. Once in your Discord client, you'll need to enable Developer Mode. Do this by going into the + Settings, then go to the "Advanced" tab and check on the "Developer Mode" at the bottom of the + page. Once you've checked "Developer Mode" on, click the `X` at the top right to exit Settings. +> ![Developer Mode](./images/discord/dev-mode.gif) +> `User Settings` -> `Advanced` -> Check `Developer Mode` -> Exit Settings + +11. Next is copying a few IDs. First up, you'll want to copy the server (aka guild) id. Do this by + finding the server you added the bot to, right click its icon, and click "Copy ID". Once you copied + it, make sure to save it for a later step. +> ![Guild ID](./images/discord/guild-id.gif) +> Right click server -> `Copy ID` -> Paste into Notepad for later step + +12. The other ID you need to copy is the ID of the channel you wish to be your primary channel. + In other words, this will be the channel that, by default, receives messages for player chat/join/leave/death + messages as well as mute/kicks. To see how to further configure message types, see [Configuring Messages](#configuring-messages). +> ![Primary Channel ID](./images/discord/prim-id.gif) +> Right click your 'primary' channel -> `Copy ID` -> Paste into Notepad for later step + +13. You've successfully copied all the necessary IDs needed for a basic setup. Next up is generating the + default config for EssentialsX Discord, so you can start setting it up! Do this by putting the + EssentialsX Discord jar (you can download it [here](https://essentialsx.net/downloads.html) if you do not + already have one) in your plugins folder, starting your server, and then stopping it as soon as it finishes + starting up. +> ![Start/Stop Server](./images/discord/start-stop.gif) +> Drag EssentialsXDiscord jar into plugins folder -> Start Server -> Stop Server + +14. Now you can start to configure the plugin with all the stuff you copied from earlier. Open the config + for EssentialsX Discord located at `plugins/EssentialsDiscord/config.yml`. When you open the config, the + first thing to configure is your bot's token. Replace `INSERT-TOKEN-HERE` in the config with the token you + copied earlier from step 6. +> ![Paste Token](./images/discord/paste-token.gif) +> Re-Copy Token from Step 6 -> Paste as token value + +15. Next is the guild ID. Replace the zeros for the guild value in the config with the guild ID you copied + from step 13. +> ![Paste Guild](./images/discord/paste-guild.gif) + +16. Finally, you'll need to paste the primary channel ID you copied from step 14 and paste it as the + primary value in the channels section and once you've done that save the config file! +> ![Paste Primary](./images/discord/paste-prim.gif) + +17. Congratulations, you've completed the initial setup guide! When you start up your server, you should + notice that chat and other messages start showing up in the channel you requested they be. Now that you + completed the initial, go back up to the [Table Of Contents](#table-of-contents) to see what other cool things you can do! + +--- + +## Console Relay +The console relay is pretty self-explanatory: it relays everything on your console into a Discord channel of +your choosing. The console relay is ridiculously easy to set up and if your server is already running, you don't +need to reload it! + +0. This assumes you've already done the initial setup. + +1. Go to the Discord server that your bot is in and find the channel you wish to use for console output. + Right-click on the channel and click "Copy ID". Save this ID for the next step. +> ![Copy ID](./images/discord/copy-cons-id.gif) +> Find console channel -> Right Click -> `Copy ID` + +2. Now that you have that copied, open the EssentialsX Discord config and find the `console` section. In that + section, replace the zeros for the `channel` value with the channel ID you copied from the last step. Once + you paste it, make sure you save the config. +> ![Paste ID](./images/discord/paste-cons-id.gif) + +3. Finally, if your server is running, run `ess reload` from your console, otherwise start up your server. You + should notice console output being directed to that channel! That is all you need if you're okay with the default + settings. Otherwise, if you'd like to see what other options you can use to customize console output, stick around. + +4. The first thing you can customize is the format of the message sent to Discord. By default, the timestamp, + level (info/warn/error/etc.), and message are shown for each console message. Let's say you wanted to make the + timestamp and level bold: since this message would be using Discord's markdown, we can just add \*\* to both sides of + level and timestamp. Then, once you've done that, just do `/ess reload` and you should see your changes on Discord. +> ![Bold Format](./images/discord/bold-format.gif) + +5. Next, you can also configure the name you wish the to show above console messages. By default, it's "EssX Console + Relay" but can be switched to anything you want. +> ![Change Name](./images/discord/change-name.gif) + +6. Finally, you can also choose to enable an option to treat any message by a user in the console channel as a + console command. This will mean that anyone who can send messages in your console channel **will be able to execute + commands as the console**. It is suggested that you stick to the regular `/execute` command + (see [Discord Commands](#discord-commands)) as those can be restricted to specific roles/users and are also not + restricted to the console channel. +> ![Command Relay](./images/discord/command-relay.gif) + +7. That's all the options for the command relay! + +--- + +## Configuring Messages +EssentialsX Discord aims to keep its message-type system basic enough that simple things take little changes, while +giving more fine grain control to those you want it. + +To give you a general overview of the system, EssentialsX Discord allows you to define different channel IDs in the +`channels` section of the config. By default, two channels are pre-populated in the `channels` section, `primary` +and `staff`. If you only completed the initial setup, the `staff` channel definition is all zeros. This is fine in +most situations however, as the message system will always fallback to the `primary` channel if a channel ID is +invalid. + +Now on to the types of messages you can receive themselves (which is where you're going to use these channel +definitions). In the `message-types` section of the config, you can see a list of message types (join/leave/chat/etc.) +on the left (as the key), and on the right there is a channel definition. + +For the sake of example lets say we want to send all chat messages to their own channel. We can do this by creating +a new channel definition and setting the `chat` message type to said channel definition. Below are step-by-step +instructions for said example, you can follow along to get the gist of how to apply this to other use cases + +1. Find the channel on Discord you want to only send chat messages to, and then right-click the channel and click + "Copy ID". +> ![Copy ID](./images/discord/chat-copy-id.gif) + +2. Next you need to create the actual channel definition, for this example we'll call it `chat`. You create a + channel definition by adding a new entry to the `channels` section with the key as its name and the ID as the one + you copied in the last step. +> ![New Def](./images/discord/new-def.gif) + +3. Finally, scroll down to the `message-types` section and change the `chat` message type to your newly created + channel definition. Once you do that, save and either run `/ess reload` if your server is running or start your + server. +> ![Move](./images/discord/move-def.gif) + +4. That's all you need to know about the basics of the message system! + +--- + +## Receive Discord Messages in Minecraft +After reading the [configuring messages section](#configuring-messages), you should now have a few Discord +channels defined in the `channels` of your config. You're probably wondering how you can let your players start +to see messages from Discord in Minecraft chat. Say I defined a channel named `chat` in the `channels` section +of your config, and I wanted to let players see Discord messages from that channel in Minecraft chat; This can +be accomplished very simply by giving players the `essentials.discord.receive.chat` permission. This would relay +all Discord messages from the `chat` channel to players with that permission. Another example: say I have a staff +channel in Discord that I want only staff members in the Minecraft server to see. Provided there is a `staff` +channel defined in the `channels` section of the config, I can give staff members the +`essentials.discord.receive.staff` permission, and they will start to see messages from that channel. + +--- + +## Discord Commands +EssentialsX Discord uses Discord's slash command system to let you type commands into Discord without it being +seen by other people in the server. With this system, you are able to execute console commands, message players, +and see the current player list. + +For example, here's what the `/execute` command looks like by default: +> ![/execute](./images/discord/execute-comand.gif) + +As you can see, you can seamlessly run commands without people seeing the content of your commands or their +response. Additionally, you can also delete the responses once you're done looking at them, so they don't clutter +your chat. + +However, this is all configurable! In the `commands` section of the config, lies a ton of options to configure +settings on a per-command basis. Below are explanations of what all the configuration options mean and how to use +them. + +* `enabled` + * Default: `true` + * Description: `Whether or not the command should be enabled and therefore shown on Discord. Note that you + must restart your Minecraft server before this option takes effect.` +* `hide-command` + * Default: `true` + * Description: `Whether other people should not be able to see what commands you execute. Setting to false + would allow people in the same channel as you to see exactly what command you execute. In the example below, + you can see how disabling this option shows a message of the user and the command they executed.` + * Example: ![Show Command](./images/discord/show-command.gif) +* `allowed-roles` + * Description: `A list of user IDs or role names/IDs that are allowed to use the command. You can also use '*' + in order to allow everyone to use the command.` +* `admin-roles` + * `A list of user IDs or role names/IDs that have extra features in the command. For example, in the list + command, admin-roles allows people to see vanished players.` + +--- + +## Misc Permissions +EssentialsX Discord has a few other permissions that may be important to know about: + +* `essentials.discord.markdown` - Allows players to bypass the Markdown filter, so that they can + bold/underline/italic/etc. their Minecraft chat messages for Discord. +* `essentials.discord.ping` - Allows players to bypass the ping filter, so that they can ping @everyone/@here + from Minecraft chat. + +--- + +## Developer API +EssentialsX Discord has a pretty extensive API which allows any third party plugin to build +their own integrations into it. Outside the specific examples below, you can also view +javadocs for EssentialsX Discord [here](https://jd-v2.essentialsx.net/EssentialsDiscord). + +### Sending Messages to Discord +EssentialsX Discord organizes the types of messages that can be sent along with their +destination on Discord under the `message-types` section of the `config.yml`. The +EssentialsX Discord API uses `message-types` to resolve the channel id you want to send your +message to. + +#### Using a built-in message channel +EssentialsX Discord defines a few built in `message-types` which you may fit your use case +already (such as sending a message to the MC->Discord chat relay channel). The list of +built-in message types can be found at [`MessageType.DefaultTypes`](https://github.com/EssentialsX/Essentials/blob/2.x/EssentialsDiscord/src/main/java/net/essentialsx/api/v2/services/discord/MessageType.java#L47-L67). + +Here is an example of what sending a message to the built-in chat channel would look like: +```java +// The built-in channel you want to send your message to, in this case the chat channel. +final MessageType channel = MessageType.DefaultTypes.CHAT; +// Set to true if your message should be allowed to ping @everyone, @here, or roles. +// If you are sending user-generated content, you probably should keep this as false. +final boolean allowGroupMentions = false; +// Send the actual message +final DiscordService api = Bukkit.getServicesManager().load(DiscordService.class); +api.sendMessage(channel, "My Epic Message", allowGroupMentions); +``` + +#### Using your own message channel +If you want to create your own message type to allow your users to explicitly separate your +messages from our other built-in ones, you can do that also by creating a new +[`MessageType`](https://github.com/EssentialsX/Essentials/blob/2.x/EssentialsDiscord/src/main/java/net/essentialsx/api/v2/services/discord/MessageType.java). +The key provided in the constructor should be the key you'd like your users to use in the +`message-types` section of our config. This key should also be all lowercase and may contain +numbers or dashes. You *can* also put a Discord channel ID as the key if you'd like to +have your users define the channel id in your config rather than ours. Once you create the +`MessageType`, you will also need to register it with Essentialsx Discord by calling +[`DiscordService#registerMessageType`](https://github.com/EssentialsX/Essentials/blob/2.x/EssentialsDiscord/src/main/java/net/essentialsx/api/v2/services/discord/DiscordService.java#L24-L30). + +Here is an example of what sending a message using your own message type: +```java +public class CustomTypeExample { + private final DiscordService api; + private final MessageType type; + + public CustomTypeExample(final Plugin plugin) { + // Gets the EssentialsX Discord API service, so we can register our type and + // send a message with it later. + api = Bukkit.getServicesManager().load(DiscordService.class); + + // Create a new message type for the user to define in our config. + // Unless you're putting a discord channel id as the type key, it's probably + // a good idea to store this object, so you don't create it every time. + type = new MessageType("my-awesome-channel"); + + // Registers the type we just created with EssentialsX Discord. + api.registerMessageType(plugin, type); + } + + @EventHandler() + public void onAwesomeEvent(AwesomeEvent event) { + // Set to true if your message should be allowed to ping @everyone, @here, or roles. + // If you are sending user-generated content, you probably should keep this as false. + final boolean allowGroupMentions = false; + // Send the actual message + api.sendMessage(type, "The player, " + event.getPlayer() + ", did something awesome!", allowPing); + } +} +``` + +### Prevent certain messages from being sent as chat +Depending on how your plugin sends certain types of chat messages to players, there may be +times when EssentialsX Discord accidentally broadcasts a message that was only intended for a +small group of people. In order for your plugin to stop this from happening you have to +listen to `DiscordChatMessageEvent`. + +Here is an example of how a staff chat plugin would cancel a message: +```java +public class StaffChatExample { + private final StaffChatPlugin plugin = ...; + + @EventHandler() + public void onDiscordChatMessage(DiscordChatMessageEvent event) { + // Checks if the player is in staff chat mode in this theoretical plugin. + if (plugin.isPlayerInStaffChat(event.getPlayer()) || + // or we could check if their message started with a # if we use that + // to indicate typing in a specific channel. + event.getMessage().startsWith("#")) { + event.setCanceled(true); + } + } +} +``` + +Additionally, you can also look at [TownyChat's EssentialsX Discord hook](https://github.com/TownyAdvanced/TownyChat/commit/5bee9611aa4200e3cde1a28af48c25caa4aec649). + +### Registering a Discord slash command +EssentialsX Discord also allows you to register slash commands directly with Discord itself +in order to provide your users with a way to interface with your plugins on Discord! + +To start writing slash commands, the first thing you'll need to do is create a slash command +class. For the sake of this tutorial, I'm going to use an economy plugin as the +hypothetical plugin creating this slash command. + +For this slash command, I'll create a simple command to a string (for player name) and +check their balance. +```java +public class BalanceSlashCommand extends InteractionCommand { + private final MyEconomyPlugin plugin = ...; + + @Override + public void onCommand(InteractionEvent event) { + // The name of the argument here has to be the same you used in getArguments() + final String playerName = event.getStringArgument("player"); + final Player player = Bukkit.getPlayerExact(playerName); + if (player == null) { + event.reply("A player by that name could not be found!"); + return; + } + + final int balance = plugin.getBalance(player); + + // It is important you reply to the InteractionEvent at least once as discord + // will show your bot is 'thinking' until you do so. + event.reply("The balance of " + player.getName() + " is $" + balance); + } + + @Override + public String getName() { + // This should return the name of the command as you want it to appear in discord. + // This method should never return different values. + return "balance"; + } + + @Override + public String getDescription() { + // This should return the description of the command as you want it + // to appear in discord. + // This method should never return different values. + return "Checks the balance of the given player"; + } + + @Override + public List getArguments() { + // Should return a list of arguments that will be used in your command. + // If you don't want any arguments, you can return null here. + return List.of( + new InteractionCommandArgument( + // This should be the name of the command argument. + // Keep it a single world, all lower case. + "player", + // This is the description of the argument. + "The player to check the balance of", + // This is the type of the argument you'd like to receive from + // discord. + InteractionCommandArgumentType.STRING, + // Should be set to true if the argument is required to send + // the command from discord. + true)); + } + + @Override + public boolean isEphemeral() { + // Whether the command and response should be hidden to other users on discord. + // Return true here in order to hide command/responses from other discord users. + return false; + } + + @Override + public boolean isDisabled() { + // Whether the command should be prevented from being registered/executed. + // Return true here in order to mark the command as disabled. + return false; + } +} +``` + +Once you have created your slash command, it's now time to register it. It is best +practice to register them in your plugin's `onEnable` so your commands make it in the +initial batch of commands sent to Discord. + +You can register your command with EssentialsX Discord by doing the following: +```java +... +import net.essentialsx.api.v2.services.discord.DiscordService; +... + +public class MyEconomyPlugin { + @Override + public void onEnable() { + final DiscordService api = Bukkit.getServicesManager().load(DiscordService.class); + api.getInteractionController().registerCommand(new BalanceSlashCommand()); + } +} +``` + +--- diff --git a/pages/wiki/GeoIP.md b/pages/wiki/GeoIP.md new file mode 100644 index 0000000..a2d0efd --- /dev/null +++ b/pages/wiki/GeoIP.md @@ -0,0 +1,72 @@ +# EssentialsX GeoIP + +EssentialsX GeoIP integrates geographical IP lookup features into EssentialsX, allowing you to determine approximately where your players come from. + + + +This product includes GeoLite2 data created by MaxMind, available from [https://www.maxmind.com](https://www.maxmind.com). + + + + + +**Note:** as of December 30th 2019, MaxMind now requires users to sign up and create a key in order to access the GeoLite2 database used by EssentialsX. +You can read more about the reason behind these changes on the [MaxMind blog](https://blog.maxmind.com/2019/12/18/significant-changes-to-accessing-and-using-geolite2-databases/). + +This affects *all* versions of EssentialsX, not just new versions. To restore your setup, you'll need to update the module and follow the steps below, even if you were using GeoIP prior to this date. + + + +## Setting up the plugin + +First, you'll need to register for access to the GeoLite2 database, which EssentialsX downloads and uses to perform IP lookups. + +Go to the [MaxMind website](https://www.maxmind.com/en/geolite2/signup) and fill in your details to sign up for access to the GeoLite2 database: + +![An example of a filled-in signup form. Note that providing your phone number is optional.](./images/geoip-step1.png) + +You'll need to agree to the [GeoLite2 EULA](#legal-notices) in order to use the database. + +Click **Continue**, then once you've received your email from MaxMind, set up a password using the link in the email, and log into your MaxMind account. + +Once you're logged in, scroll down and click **My License Key** on the left-hand side: + +!["My License Key" is under Security on the left-hand sidebar.](./images/geoip-step2.png) + +Next, click **Generate new license key**: + +![The "Generate new license key" button is below the empty table.](./images/geoip-step3.png) + +Type in a name like `EssentialsX key` as the description and click **No** in the box below, then click **Confirm**: + +![The description should be filled in with something to identify the key, and you should check "No" next to the GeoIP Update text.](./images/geoip-step4.png) + +You should now receive a **license key**. Copy this down somewhere safe, as you won't be able to see the original key again later on. + +![Copy down the license key and keep it somewhere safe.](./images/geoip-step5.png) + +Next, you'll need to download and install the EssentialsXGeoIP jar - you can see how to do this [[Installing-EssentialsX|here]]. +Start and stop your server, then open `plugins/EssentialsGeoIP/config.yml` in a text editor. +Copy the license key from before into the `license-key` setting, save the file and then restart your server. + +Once you start the server up, the plugin will download the database using your license key and will keep it up-to-date every 30 days. + +## Using the plugin + +EssentialsX GeoIP provides the permission `essentials.geoip.show`. With this permission, staff will be able to: +- See a player's approximate location when they log in +- See a player's approximate location when you run `/whois ` + +Giving a player the permission `essentials.geoip.hide` will prevent their location showing up in either of these situations. + +## Legal notices + + + +To use EssentialsX GeoIP, you need to agree to the [MaxMind GeoLite2 EULA](https://www.maxmind.com/en/geolite2/eula). As a result: +- **You must not attempt to use EssentialsX GeoIP to determine the exact location of players.** IP lookups using GeoLite2 are approximate, and they will not give you the precise location of a player. +- **You must allow EssentialsX GeoIP to update the database every 30 days.** You should avoid using one-time tokens to download the database or keeping old versions of the database around. + +Not following these may break the MaxMind EULA and possibly also break state, federal or international privacy laws. **EssentialsX is not responsible if you fail to follow these guidelines.** + + diff --git a/pages/wiki/Help.md b/pages/wiki/Help.md new file mode 100644 index 0000000..40f7f7c --- /dev/null +++ b/pages/wiki/Help.md @@ -0,0 +1,13 @@ +# Support + +Need help with EssentialsX? There are several ways you can get support from the community. Be sure to provide details as needed - your startup log, the output of `/ess version` and your `config.yml` may all be useful in solving your issue + +## MOSS Discord server + +**MOSS** (*Minecraft Open Source Software*) is our server on Discord with support channels for several open source plugins, including EssentialsX. You can get help from members of the community, as well as assisting others with issues. Click [here](https://discord.gg/casfFyh) to join. + + + +## GitHub issue tracker + +We also accept support tickets and bug reports on [GitHub issues](https://github.com/EssentialsX/Essentials/issues). If you think you've found a bug or if you've got an issue that's too complex to solve through Discord, you can report it on GitHub and we'll take a look at it. diff --git a/pages/wiki/Home.md b/pages/wiki/Home.md new file mode 100644 index 0000000..f44d0fe --- /dev/null +++ b/pages/wiki/Home.md @@ -0,0 +1,27 @@ +# EssentialsX wiki! + +EssentialsX is the essential plugin for Spigot servers, providing core features for servers of any size and scale. These features include: +* **Player-made homes** +* Server **warps** and **kits**, either server-wide or per-world +* Player-to-player **private messages, teleports and teleport requests** +* Custom player **nicknames** +* Various moderation tools including **kicks, temporary bans, mutes and jails** +* Built-in economy features including **sign shops, command costs and full Vault support** + +In addition, EssentialsX's optional modules provide further integrated features like chat formatting, world protection, GeoIP lookup and more - see the [[Module-Breakdown|Module Breakdown]] for more information. + +## Pages + +* [[BannerMeta|Banner Metadata]] +* [[Command-Cooldowns|Command Cooldowns]] +* [[Color-Permissions|Color Permissions]] +* [Commands list](https://essinfo.xeya.me/commands.html) (community-maintained) +* [Permissions list](https://essinfo.xeya.me/permissions.html) (community-maintained) + +**Note:** When updating EssentialsX, you need to update *all* the modules to the same version to prevent version mismatch errors. In addition, you may want to update your config file - the latest config file can always be found [here](https://github.com/EssentialsX/Essentials/blob/2.x/Essentials/src/main/resources/config.yml). + +## Updating from Essentials 2 + +EssentialsX is a fork of the original [Essentials project](https://github.com/essentials/Essentials), which was discontinued in 2014. EssentialsX adds several new features over the original Essentials - [[the Improvements page|Improvements]] and [EssentialsX changelogs](https://github.com/EssentialsX/Essentials/releases) for more information. + +To upgrade from Essentials 2.14.x or earlier, stop your server, delete the old Essentials jars and replace them with the equivalent EssentialsX jars. We recommend renaming your `config.yml` file to take advantage of new settings added by EssentialsX, and taking a full backup of your `plugins/Essentials/` folder. Once you restart your server, EssentialsX will create a new `config.yml` and update old user data to the new format. diff --git a/pages/wiki/Improvements.md b/pages/wiki/Improvements.md new file mode 100644 index 0000000..2649799 --- /dev/null +++ b/pages/wiki/Improvements.md @@ -0,0 +1,193 @@ +EssentialsX is a continuation of the original Essentials plugin, which was discontinued around 2014. EssentialsX supports all the same features as classic Essentials, and also contains notable improvements over the original Essentials. + +This page aims to detail many of the improvements added by EssentialsX. For a more detailed list of changes between EssentialsX releases, see the [release changelogs](https://github.com/EssentialsX/Essentials/releases). + +## Highlights +* Actively maintained and updated for modern Minecraft and Spigot versions, from 1.8.8 to the latest versions. + - Supports new Minecraft content including new items, enchantments, mobs and trees. + - Updates [Essentials signs](https://wiki.mc-ess.net/wiki/Sign_Tutorial) to work on all supported Minecraft versions. + - Supports mob spawners on all supported Minecraft versions. + * On 1.8-1.12, you can use spawner signs and commands such as `/i mob_spawner:51`, and the spawners will be updated when placed. + * On 1.13+, you can use `/i blazespawner` to spawn in spawners. +* Includes new features in base EssentialsX such as [[BannerMeta|Banner Metadata]] for kits, [[Command-Cooldowns|Command Cooldowns]] and dozens of other new config options. +* Brand new [[Discord-Tutorial|Discord bridge]] addon, and updated versions of all Essentials addons (even XMPP!) +* Includes new item aliases for all Minecraft versions, including 1.13 and above. +* Supports giving spawner eggs with entity ID values and potions with damage values in 1.9-1.12. +* Uses UUID-backed Vault for permissions group and prefix/suffix lookups, as well as a new Vault adapter rewritten to be more robust. + - Spigot-Essentials implements UUID lookups for zPermissions, but not other permissions plugins. + - EssentialsX prioritizes Vault, so all queries using the Vault handler should be much faster as they don't need a name-to-UUID lookup. + +### Other minor additions +* `/tppos` can now optionally accept a world name. +* Adds a `/msgtoggle` command to allow people to ignore all private messages. +* Separate permissions for bulk sell and hand sell: `essentials.sell.hand` and `essentials.sell.bulk` respectively +* Adds a permission for exemption from SocialSpy: `essentials.chat.spy.exempt` +* Adds configuration option for the milk bucket "easter egg", which (really shouldn't, but does) allow players to mess with other people's horses: `milk-bucket-easter-egg` +* Adds configuration option for the "Set fly mode enabled..." message on join: `send-fly-enable-on-join` + +## New features + +### Per-gamemode permissions +You can now limit which gamemodes are available in `/gamemode` for players to switch to. For example, you might want to let players run `/gma` and `/gms`, but not `/gmc` or `/gmsp`. You can grant whichever gamemodes you want them to be able to change to: +* `essentials.gamemode.creative` +* `essentials.gamemode.survival` +* `essentials.gamemode.adventure` +* `essentials.gamemode.spectator` +* `essentials.gamemode.all` + +**Note**: The base `essentials.gamemode` permission is still required to let players run the `/gamemode` command and its aliases. + +### Kits improvements +Kits have been moved from the main config to `kits.yml`, and can now be created from in-game and automatically added to your server without needing to manually edit and reload the config. + +In addition, commands are now supported in kits with the full set of [[EssentialsX placeholders|Keywords]] - simply add a line to your kit as follows: + +```yaml +kits: + mykit: + delay: 1000 + items: + - stone 1 + - /give {USERNAME} apple 1 +``` + +EssentialsX also adds new commands to help manage kits: + +#### `/createkit` +**Command**: `/createkit ` +**Permission**: `essentials.createkit` +If `pastebin-createkit` is set to `false` in `config.yml`, creates a kit from your inventory and puts it in the `kits.yml` file. +Alternatively, if `pastebin-createkit` is set to true, creates a kit based on your inventory and pastes an online link with the lines to add to your `kits.yml` by hand. + +![createkit](https://i.imgur.com/nXMlNGP.png) + +#### `/showkit` +**Command**: `/showkit ` +**Permission**: `essentials.showkit` +Shows a list of kit contents straight from config file. + +![showkit](https://i.imgur.com/d4Ff8vN.png) + +### Forcefully disable teleportation safety + +Upstream Essentials only has two values for the `teleport-safety` option: +* Convert locations to safe teleports (results in plenty of exploits); or +* Deny the teleport entirely. + +EssentialsX adds a `force-disable-teleport-safety` option (defaulting to false). When combined with `teleport-safety: true`, this disables conversion to safe locations and teleports the user to their exact location. + +**Note:** To disable cross-world teleportation safety, switch to Paper and set `disable-teleportation-suffocation-check` to true in `paper.yml`. + +### Spawner placement fix +If spawners from EssentialsX commands/kits become pig spawners when placed, you can assign `essentials.spawnerconvert.*` to your default group to automatically convert them to the correct mob type. + +### Controlled Private Messaging + +The new config option `last-message-reply-recipient` lets you change how `/reply` works. If set to `true`, your reply recipient will be **whoever you messaged** last and *not* **whoever messaged you** last. If you don't have a reply recipient, whoever messaged you last will be your reply recipient. + +Here's a formatted scenario of the new last-message-reply-recipient feature: + +> **JRoy: `/msg mdcfe Hi`** +> _JRoy -> mdcfe: Hi_ +> **mdcfe: `/r Hi`** +> _mdcfe -> JRoy: Hi_ +> **broccolai: `/msg JRoy Hi`** +> _broccolai -> JRoy: Hi_ +> **JRoy: `/r Hi back to you, mdcfe!`** +> _JRoy -> mdcfe: Hi back to you, mdcfe!_ + +If this feature is enabled, EssentialsX will also use the `last-message-reply-recipient-timeout` setting. This setting allows you to control how long in seconds before the player's reply recipient is reset. After this duration, when a player receives a message, their replies will start going to the last person who sent them a message. + +### `/seen` by UUID + +You can now check when a player was last seen using either their username or their UUID. For example, typing `/seen SupaHam` and `/seen 5552e21d-de79-40bc-89da-62ee63244fb2` are now both valid methods of checking when a player was last seen. + +### Per-world `/time` setting permission + +In classic Essentials, players with the permissions `essentials.time` and `essentials.time.set` were able to set the time in any world, even if they didn't have the permissions set in that world in the permissions plugin. If `world-time-permissions` is set to `true` in the config, users will need a specific permission to set the time in each world - see the table below. This feature is disabled by default. + +#### Permissions +| Permission | Description | +|---------------------------------|-------------| +| essentials.time.world.`` | Permits the user to set the time in ``. `` is the world name with spaces replaced with _. e.g. My World becomes, my_world. | +| essentials.time.world.all | Permits the user to set time of all worlds. This will override `essentials.time.world.`. | + +### AFK Player List name + +This build introduces the `afk-list-name` config property which is used to control how AFK players appear in the player list. + +The property has two placeholders: +- `{USERNAME}`: The player's name +- `{PLAYER}`: The player's display name. + +Here's an example of "[AFK] _SupaHam_": +```yaml +afk-list-name: '&7[AFK] &o{USERNAME}' +``` + +### Nickname color permissions + +EssentialsX adds new permissions for nickname colours and formatting, which match the names used by Mojang in the Minecraft chat component system. These permissions also cover chat messages (if you have EssentialsX Chat installed) and more. You can see a list of these new permissions [[Color-Permissions|here]]. + +You can now also use the `essentials.nick.changecolors` permission to restrict players' nickname changes. When players have this permission, they can only change the colour and formatting of their nickname, and not the text content. For example, if player `SupaHam` has the `essentials.nick.changecolours` and `essentials.nick.color` permissions, they can change their nickname to `&5SupaHam`, but cannot change it to `&5TheSupaHam` as the text content doesn't match their username. + +### Teleport to spawn when joining + +**This feature was added in [build 361](https://ci.ender.zone/job/EssentialsX) ([b673630](https://github.com/drtshock/Essentials/commit/b673630)).** + +Requested in #345. Administrators can now specify whether joining players are to be teleported to spawn using the `spawn-on-join` option found in the `config.yml` file. + +`spawn-on-join` accepts several types of values: + +1. `true`/`"*"` - **all players** will be teleported to spawn when joining. +2. `false` - **no players** will be teleported to spawn when joining +3. String - The value is treated as a group name. If a player is in the group, they will be teleported to spawn when joining. +4. List of Strings - The value is treated as a list of group names. If a player is in *any* of these groups, they will be teleported to spawn when joining. + +When `spawn-on-join` is `true`, all players will be teleported to their group spawn point. If no group spawn point has been set, the default spawn point set with `/setspawn` will be used instead. + +If admins wish to exempt certain players from this feature when `spawn-on-join` is `true`, they can give them the `essentials.spawn-on-join.exempt` permission and they will log in where they left off, assuming no other plugin is interfering. + +### AFK message + +_Requested in [#590](/drtshock/Essentials/issues/590); PR in [#664](/drtshock/Essentials/pull/664)._ + +Players can set their AFK message when using the `/afk` command to notify others of their situation. When a player sends a message with `/msg` to an AFK player, they will see the AFK player's message. + +By default, when a player sets their AFK status, the message will not be broadcast to the whole server. However, this can be changed in the [[Locale|locale file]] by adding `{1}` to the `userIsAwayWithMessage` message, where `{1}` will be replaced by the player's AFK message. + +To set your AFK message, simply type `/afk `. For example: `/afk I'm walking my dog`. + +In order to use this feature a player must have the `essentials.afk.message` permission. However, if a player is muted, they will not be able to supply a message as it can be used to exploit their punishment. + +### Pay toggle +_Requested in [#413](/drtshock/Essentials/issues/413); added in [2493c65](https://github.com/drtshock/Essentials/commit/2493c65)._ + +Players have the ability to disable any and all payment via the `/paytoggle` command. This can be used to combat players using `/pay` as a means of spam towards other players, like celebrities on your server. + +`paytoggle` also has the following aliases: `epaytoggle`, `payoff`, `epayoff`, `payon`, `epayon` + +`payoff` will always disable payments to prevent errors. On the contrary, `payon` will always enable payments. + +### Command confirmations for `/pay` and `/clearinventory` +_Requested in [#1032](/drtshock/Essentials/issues/1032); added in [5f83766](https://github.com/drtshock/Essentials/commit/5f83766)._ + +You can now specify whether players are prompted to confirm `/clearinventory` and `/pay` commands before they are executed using the `default-enabled-confirm-commands` section of the config. + +In addition, players can turn confirmations on or off for themselves with `/clearconfirm` and `/payconfirm` respectively. + +### Teleport to exact coordinates + +This feature was implemented in ([0a563b9](https://github.com/drtshock/Essentials/commit/0a563b9)). + +This feature introduces the `teleport-to-center` configuration feature. When set to `true` (default), all teleportations are centered to the block; technically, setting the x and z coordinate decimals to .5 and .5. When `teleport-to-center` is set to `false`, all teleports are performed to the exact location as given. + +### Mail chat formatting +_Requested in [#1560](/drtshock/Essentials/issues/1560); added in [665229b](https://github.com/drtshock/Essentials/commit/665229b)._ + +This feature introduces the ability to format `/mail` messages using `&` formatting codes - [[Color-Permissions|click here]] for more information. + +### Helmet slot hat +_Added in [7958cd0](https://github.com/EssentialsX/Essentials/commit/7958cd0b880205edaeaf34420bafde8d5cc1f7ed)._ + +If `allow-direct-hat` is enabled in the `config.yml`, then players with the permission `essentials.hat` can click on their helmet slot to place any block on their head, not just helmets. diff --git a/pages/wiki/Installing-EssentialsX.md b/pages/wiki/Installing-EssentialsX.md new file mode 100644 index 0000000..34911e4 --- /dev/null +++ b/pages/wiki/Installing-EssentialsX.md @@ -0,0 +1,15 @@ +# Installing EssentialsX + +First of all, make sure you're running a supported Minecraft server platform. We recommend using [Paper](https://papermc.io), especially for 1.13+ as it contains many performance improvements over Spigot. + +You can download EssentialsX either from [SpigotMC](https://www.spigotmc.org/resources/essentialsx.9089/) for stable releases, or from the [downloads page](https://essentialsx.net/downloads.html) for development builds with the latest features and bug fixes. + +EssentialsX is split up into several separate plugins. The only jar that is necessary for EssentialsX to work is the main `EssentialsX` jar, which contains most of the core features most servers will need. The other modules are optional - see the [[Module-Breakdown|Module Breakdown]] page for more information on what each module does. + +Once you've decided which EssentialsX modules you need, copy the required `.jar` files into the `plugins/` directory (if you downloaded from SpigotMC, you'll need to unzip the downloaded file first). + +If you don't already have a permissions plugin, we recommend that you install [LuckPerms](https://luckperms.net) to control ranks, permissions, prefixes and suffixes for your players. This is optional but recommended. + +You'll also need to install [Vault](https://www.spigotmc.org/resources/vault.34315/) to allow EssentialsX to talk to permissions plugins; without it, prefixes, suffixes and group-related features won't work. + +Once you've installed all the plugins you need, restart your server. EssentialsX will create configuration files (and upgrade old Essentials data if needed) when it starts up. diff --git a/pages/wiki/Keywords.md b/pages/wiki/Keywords.md new file mode 100644 index 0000000..9e70d72 --- /dev/null +++ b/pages/wiki/Keywords.md @@ -0,0 +1,41 @@ +# Keywords + +EssentialsX provides a number of standard keywords (placeholders) that can be used to customize text in multiple places across the plugin. + +| Keyword | Usage | +| ----------------------- | ------------------------------------------------------------ | +| {PLAYER}, {DISPLAYNAME} | The player's display name. | +| {USERNAME} | The player's username. | +| {NICKNAME} | The player's EssentialsX nickname. If the player has no nickname, the username is used. | +| {PREFIX} | The player's prefix, supplied by a permissions plugin via Vault. | +| {SUFFIX} | The player's suffix, supplied by a permissions plugin via Vault. | +| {GROUP} | The player's primary group, supplied by a permissions plugin via Vault. | +| {BALANCE} | The player's balance, formatted as currency. | +| {MAILS} | The amount of mail the player has. | +| {PLAYTIME} | The player's playtime, formatted as a duration. | +| {WORLD}, {WORLDNAME} | The full name of the player's current world. | +| {WORLDTIME12} | The time of the player's current world in AM/PM format. | +| {WORLDTIME24} | The time of the player's current world in 24-hour format. | +| {WORLDDATE} | The date of the player's current world. | +| {IP} | The player's IP address. | +| {ADDRESS} | The player's socket address. | +| {ONLINE} | The amount of players online. Hidden players (e.g. those in vanish) are not counted. | +| {UNIQUE} | The amount of unique players that have joined the server. | +| {WORLDS} | The list of worlds on the server. | +| {PLAYERLIST} | The list of players currently online. Hidden players (e.g. those in vanish) are not listed. | +| {TIME} | The current time of the machine the server is running on. | +| {DATE} | The current date of the machine the server is running on. | +| {TPS} | The server's current TPS. | +| {UPTIME} | The time elapsed since the server started up, formatted as a duration. | +| {PLUGINS} | The list of plugins on the server. | +| {VERSION} | The server's version string. | + +### Where can I use these keywords? + +These keywords can be used with the following EssentialsX features: + +- Custom text files: `book.txt`, `custom.txt`, `info.txt`, `motd.txt`, `rules.txt` +- Kits: inside the `kits.yml` file. +- EssentialsX Spawn's newbie announcement: `newbies.announce-format` in the config. +- The `/broadcastworld` command. + diff --git a/pages/wiki/Locale.md b/pages/wiki/Locale.md new file mode 100644 index 0000000..96561ea --- /dev/null +++ b/pages/wiki/Locale.md @@ -0,0 +1,109 @@ +# Translations + +EssentialsX stores all its messages as templates in the messages file, and comes with support for [many languages already built-in](#Supported-languages). These files can be easily replaced or extended to customize your server by placing them in the `plugins/Essentials/` folder. + +## Switching language + +You can tell EssentialsX which language you want it to use by changing the `locale` setting in `config.yml`: + +```yaml +# Set the locale for all messages. +# ... +locale: de +``` + +Remember that you need to **uncomment** the `locale: ` line by **removing the `#` in front of it**. If the `#` is present, EssentialsX will try to use the language your system is set to. + +Below is a list of languages that EssentialsX supports: + +## Supported languages + +- **Standard (US) English**: `en` + - **UK**: `en_GB` +- **Czech**: `cs` +- **Danish**: `da` +- **German**: `de` +- **Spanish**: `es` +- **Estonian**: `et` +- **Finnish**: `fi` +- **French**: `fr` +- **Hungarian**: `hu` +- **Italian**: `it` +- **Korean**: `ko` +- **Lithuanian**: `lt` +- **Dutch**: `nl` +- **Polish**: `pl` +- **Portuguese**: `pt` + - **Brazil**: `pt_BR` +- **Romanian**: `ro` +- **Russian**: `ru` +- **Swedish**: `sv` +- **Turkish** `tr` +- Chinese: + - **Modern**: `zh` + - **Hong Kong**: `zh_HK` + - **Traditional Chinese**: `zh_TW` + +## Changing locale + +EssentialsX bundles several messages files in different languages inside the jar, so you can get a copy of your desired messages file by extracting it from the main EssentialsX jar. Simply take the messages file you want to change, place it in the `plugins/Essentials/` folder and start editing. Remember that the file is updated quite regularly; you might want to keep a backup of the file and use a diff tool to allow easy updates. + +If you decide you can improve the existing translation of EssentialsX, or want to submit your translation for bundling, feel free to submit your altered locale file back to EssentialsX. EssentialsX often changes and improves, and it's quite easy for language files to be left behind when the developers don't use the language. You can submit your improved locale file over on our [Crowdin page](https://crowdin.com/project/essentialsx-official). + +## Customising messages + +Since all of the plugins' messages are defined in the messages file, you can fully customise the look and feel of your server by changing the text and colour scheme for all EssentialsX commands. + +Simply place your edited locale file (with appropriate locale suffix) in the `plugins/Essentials` folder and make sure the locale setting in the config file matches (`locale: en` -> `messages_en.properties`), then restart the server. + +If you are having trouble, [try this tutorial video](https://www.youtube.com/watch?v=9Uan2oJ9zK8). Note that this video is for the original Essentials plugin, not EssentialsX. + +You may need to update the file on occasion to deal with changes in EssentialsX such as parameter changes or changes to the actual syntax of the messages. This can be done with a diff tool like [Diffchecker](https://www.diffchecker.com/), which highlights changes between two text files. + +## Minor Changes + +When EssentialsX looks for a message, if it is missing from your version, it will instead use the **built-in version**. +This means that if you only want to change a few messages instead of the whole translation, you can do this by making a copy of the locale file you're using in `plugins/Essentials/` and deleting all messages in the file, other than the ones you want to change. This means you don't have to worry about keeping your messages file up to date with every EssentialsX update. + +When editing only a few keys, the process should look something like [this (click to open image)](http://wiki.ess3.net/w/images/0/0c/Locale.PNG). + +## Colours + +If you have an older messages file, you may notice lots of text like `\u00a7`. These are Unicode character escapes, but are no longer needed in modern versions of EssentialsX which support UTF-8 files, and you can convert these to UTF-8 characters `§` using a tool such as [Interactive native2ascii](https://native2ascii.net/). + +To use RGB colour codes, you will need to use Spigot's `§x§R§R§G§G§B§B` format, where RRGGBB come from the colour's hexadecimal code. You can also use [legacy colour codes (`§0` to `§f`)](https://minecraft.gamepedia.com/Formatting_codes#Color_codes) and [formatting codes](https://minecraft.gamepedia.com/Formatting_codes#Formatting_codes). + +## Example + +Let's say you simply want to change the way currency is output so that the currency symbol comes AFTER the balance: + +- Be sure to read the information above regarding custom locales/messages. +- Locate the line "currency={0}{1}" +- Switch the numbers around, it should now read "currency={1}{0}". {1} is the amount, {0} is the currency symbol. You can have spaces here too, if you want. +- Save the file and restart the server or issue /ess reload. + +## Disabling Messages + +Most user messages can be disabled or hidden simply by setting the message string to blank, for example: + +```properties +noNewMail= +``` + +## Contributing + +If you wish to contribute translations, you can do so using [Crowdin](https://crowdin.com/project/essentialsx-official). + +## Other files + +### plugin.yml + +Aside from the messages file, there are a few other locations or settings you may want to change. The EssentialsX help system automatically reads each plugin's `plugin.yml`, including its own, and uses these files to display the syntax and command descriptions. To have a complete in-game translation, you may want to update these files to your native language. + +### Config file + +There are a number of settings in EssentialsX which can be altered by editing `plugins/Essentials/config.yml`, such as the currency format. These are independent of the `locale` setting, and can be changed without editing the jar file. + +### Text commands + +EssentialsX's text commands like `/motd` and `/rules` can be edited completely separately from the messages files and the config. Simply run the command in-game once, then find the corresponding text file inside `plugins/Essentials` to edit it. diff --git a/pages/wiki/Module-Breakdown.md b/pages/wiki/Module-Breakdown.md new file mode 100644 index 0000000..7d37cd5 --- /dev/null +++ b/pages/wiki/Module-Breakdown.md @@ -0,0 +1,65 @@ +# Modules + +## Core + +The core EssentialsX jar contains many of the core features for most servers. This includes most commands as well as signs, kits and the economy. **You need this jar for all the other modules to work.** + +## EssentialsX AntiBuild + +**EssentialsX AntiBuild** adds permissions to your server that gives you fine control over which players can build, interact with blocks or craft on your server. You can control individual items and blocks for specific groups or users, or simply allow or deny entire groups from building at all using build flags. It also includes an alert system for when players use certain items. For more information, see the [AntiBuild wiki page](http://wiki.mc-ess.net/wiki/AntiBuild) (item IDs have been removed in 1.13+). + +Note that AntiBuild doesn't include any kind of region protection; to restrict building in specific regions we recommend installing [WorldGuard](https://dev.bukkit.org/projects/worldguard). + +*We recommend you use [LuckPerms](https://luckperms.net/download) with AntiBuild to make the most of its features.* + +## EssentialsX Chat + +**EssentialsX Chat** includes many of EssentialsX's chat features. It allows you to customise chat formatting on your server by adding prefixes, suffixes and colours in chat, as well as setting different formats for different groups. + +*You need [Vault](https://www.spigotmc.org/resources/34315/) and [LuckPerms](https://luckperms.net/download) to give players prefixes and suffixes and to detect groups.* + +## EssentialsX GeoIP + +**EssentialsX GeoIP** displays an approximate lookup of where your players come from based on looking up their IP in a geographical database. This lookup can be seen by admins either when players log in or in `/whois`. + +## EssentialsX Protect + +**EssentialsX Protect** allows you to control some simple settings for your worlds, like preventing creepers from damaging buildings, disabling fire spread and blocking certain types of mob spawns. + +Note that Protect doesn't include any kind of region protection; to protect specific regions we recommend installing [WorldGuard](https://dev.bukkit.org/projects/worldguard). + +## EssentialsX Spawn + +**EssentialsX Spawn** lets you control where players spawn both when they first join the server and when they die. You can use the in-game `/setspawn` command to set a spawn location for everyone on your server as well as for specific groups. + +## EssentialsX Discord + +**EssentialsX Discord** brings a simple, lightweight, easy-to-use, and bloat-free +bridge between Discord and Minecraft. + +EssentialsX Discord offers *essential* features you'd want from a Discord bridge such as: +* MC Chat -> Discord Channel +* Discord Channel -> MC Chat +* Basic MC -> Discord Event Monitoring (Join/Leave/Death/Mute) +* MC Console -> Discord Relay +* Discord Slash Commands + * /execute - Execute console commands from Discord + * /msg - Message Minecraft players from Discord + * /list - List players currently online on Minecraft +* & more... + +For more information on how to set up EssentialsX Discord, check out [[Discord-Tutorial|the tutorial]]! + +## EssentialsX XMPP + +**EssentialsX XMPP** acts as a bridge between Jabber/XMPP chat networks and your server. This allows players to chat between XMPP networks and your server, and can also allow server admins to monitor the console and server errors remotely. For more information, see the [Essentials XMPP guide](https://wiki.mc-ess.net/wiki/XMPP). + +*If you don't know what XMPP is, you don't need this!* + + diff --git a/pages/wiki/_DocuteHome.md b/pages/wiki/_DocuteHome.md new file mode 100644 index 0000000..e92221f --- /dev/null +++ b/pages/wiki/_DocuteHome.md @@ -0,0 +1,19 @@ +[![**EssentialsX Wiki**](https://camo.githubusercontent.com/9ad178e5cf76a372d6aaee8bbdf13485fbc1d51b/68747470733a2f2f692e696d6775722e636f6d2f435034535a70422e706e67)](https://github.com/EssentialsX/Essentials/wiki) + +## Getting started + +* [[Installing EssentialsX]] +* [Commands](https://essinfo.xeya.me/commands.html) and [Permissions](https://essinfo.xeya.me/permissions.html) + +## Features + +* [[Improvements over Essentials|Improvements]] +* [[Banner Metadata|BannerMeta]] +* [[Command Cooldowns]] +* [[Support|Help]] + +## Support + +* [[Frequently Asked Questions]] +* [Issue Tracker](https://github.com/EssentialsX/Essentials/issues) +* [Discord](https://discord.gg/F7gexAQ) - [[Rules|Discord-Rules]] diff --git a/pages/wiki/_Footer.md b/pages/wiki/_Footer.md new file mode 100644 index 0000000..32a343a --- /dev/null +++ b/pages/wiki/_Footer.md @@ -0,0 +1,4 @@ +[![Spigot Downloads](https://img.shields.io/badge/dynamic/json.svg?url=https://api.spiget.org/v2/resources/9089&label=downloads&query=$.downloads&colorB=ee8a18&style=flat-square&maxAge=3600)](https://www.spigotmc.org/resources/essentialsx.9089/) +[![Release 2.18.2](https://img.shields.io/badge/release-2.18.2-E93B38.svg?style=flat-square&maxAge=3600)](https://github.com/EssentialsX/Essentials/releases/latest) +[![Latest Build](https://img.shields.io/badge/dynamic/json.svg?url=https://ci.ender.zone/job/EssentialsX/lastSuccessfulBuild/api/json&label=build&query=$.id&colorB=green&prefix=b&style=flat-square&maxAge=3600)](https://essentialsx.net/downloads.html) +[![Discord](https://img.shields.io/discord/390942438061113344.svg?style=flat-square&maxAge=3600&colorB=7289DA)](https://discord.gg/h8CnPSw) diff --git a/pages/wiki/_Sidebar.md b/pages/wiki/_Sidebar.md new file mode 100644 index 0000000..11b416c --- /dev/null +++ b/pages/wiki/_Sidebar.md @@ -0,0 +1,20 @@ +[![**EssentialsX Wiki**](https://camo.githubusercontent.com/9ad178e5cf76a372d6aaee8bbdf13485fbc1d51b/68747470733a2f2f692e696d6775722e636f6d2f435034535a70422e706e67)](https://github.com/EssentialsX/Essentials/wiki) + +## Getting started +* [[Download EssentialsX|Downloading-EssentialsX]] +* [Commands](https://essinfo.xeya.me/commands.html) +* [Permissions](https://essinfo.xeya.me/permissions.html) +* [[Locale|Locale]] + +## Features +* [[Improvements over Essentials|Improvements]] +* [[Banner Metadata|BannerMeta]] +* [[Command Cooldowns|Command-Cooldowns]] +* [[Color Permissions|Color-Permissions]] + +## Support +* [[Frequently Asked Questions|Common-Issues]] +* [[Getting Support|Help]] + +--- +[![**Downloads**](https://camo.githubusercontent.com/9aff2864d80daf2dac77bdbf5d1ea985381e180e/68747470733a2f2f692e696d6775722e636f6d2f4d4d6330504a592e706e67)](https://ci.ender.zone/job/EssentialsX) diff --git a/pages/wiki/images/discord/add-bot.gif b/pages/wiki/images/discord/add-bot.gif new file mode 100644 index 0000000..88b7c9e Binary files /dev/null and b/pages/wiki/images/discord/add-bot.gif differ diff --git a/pages/wiki/images/discord/auth.gif b/pages/wiki/images/discord/auth.gif new file mode 100644 index 0000000..417ee40 Binary files /dev/null and b/pages/wiki/images/discord/auth.gif differ diff --git a/pages/wiki/images/discord/avatar.png b/pages/wiki/images/discord/avatar.png new file mode 100644 index 0000000..d6b7085 Binary files /dev/null and b/pages/wiki/images/discord/avatar.png differ diff --git a/pages/wiki/images/discord/bold-format.gif b/pages/wiki/images/discord/bold-format.gif new file mode 100644 index 0000000..8bfa7f7 Binary files /dev/null and b/pages/wiki/images/discord/bold-format.gif differ diff --git a/pages/wiki/images/discord/change-name.gif b/pages/wiki/images/discord/change-name.gif new file mode 100644 index 0000000..8cd233f Binary files /dev/null and b/pages/wiki/images/discord/change-name.gif differ diff --git a/pages/wiki/images/discord/chat-copy-id.gif b/pages/wiki/images/discord/chat-copy-id.gif new file mode 100644 index 0000000..db5e56a Binary files /dev/null and b/pages/wiki/images/discord/chat-copy-id.gif differ diff --git a/pages/wiki/images/discord/command-relay.gif b/pages/wiki/images/discord/command-relay.gif new file mode 100644 index 0000000..37778aa Binary files /dev/null and b/pages/wiki/images/discord/command-relay.gif differ diff --git a/pages/wiki/images/discord/copy-client-id.gif b/pages/wiki/images/discord/copy-client-id.gif new file mode 100644 index 0000000..fb96bf6 Binary files /dev/null and b/pages/wiki/images/discord/copy-client-id.gif differ diff --git a/pages/wiki/images/discord/copy-cons-id.gif b/pages/wiki/images/discord/copy-cons-id.gif new file mode 100644 index 0000000..6ee5885 Binary files /dev/null and b/pages/wiki/images/discord/copy-cons-id.gif differ diff --git a/pages/wiki/images/discord/copy-token.gif b/pages/wiki/images/discord/copy-token.gif new file mode 100644 index 0000000..f697df3 Binary files /dev/null and b/pages/wiki/images/discord/copy-token.gif differ diff --git a/pages/wiki/images/discord/create-app.gif b/pages/wiki/images/discord/create-app.gif new file mode 100644 index 0000000..5f9b6b2 Binary files /dev/null and b/pages/wiki/images/discord/create-app.gif differ diff --git a/pages/wiki/images/discord/create-bot.gif b/pages/wiki/images/discord/create-bot.gif new file mode 100644 index 0000000..85a5eec Binary files /dev/null and b/pages/wiki/images/discord/create-bot.gif differ diff --git a/pages/wiki/images/discord/dev-mode.gif b/pages/wiki/images/discord/dev-mode.gif new file mode 100644 index 0000000..f1815d8 Binary files /dev/null and b/pages/wiki/images/discord/dev-mode.gif differ diff --git a/pages/wiki/images/discord/disable-public.gif b/pages/wiki/images/discord/disable-public.gif new file mode 100644 index 0000000..7ff6ab3 Binary files /dev/null and b/pages/wiki/images/discord/disable-public.gif differ diff --git a/pages/wiki/images/discord/execute-comand.gif b/pages/wiki/images/discord/execute-comand.gif new file mode 100644 index 0000000..b0c5a75 Binary files /dev/null and b/pages/wiki/images/discord/execute-comand.gif differ diff --git a/pages/wiki/images/discord/guild-id.gif b/pages/wiki/images/discord/guild-id.gif new file mode 100644 index 0000000..940041d Binary files /dev/null and b/pages/wiki/images/discord/guild-id.gif differ diff --git a/pages/wiki/images/discord/move-def.gif b/pages/wiki/images/discord/move-def.gif new file mode 100644 index 0000000..d660099 Binary files /dev/null and b/pages/wiki/images/discord/move-def.gif differ diff --git a/pages/wiki/images/discord/new-def.gif b/pages/wiki/images/discord/new-def.gif new file mode 100644 index 0000000..f0bcb47 Binary files /dev/null and b/pages/wiki/images/discord/new-def.gif differ diff --git a/pages/wiki/images/discord/paste-cons-id.gif b/pages/wiki/images/discord/paste-cons-id.gif new file mode 100644 index 0000000..2e26f68 Binary files /dev/null and b/pages/wiki/images/discord/paste-cons-id.gif differ diff --git a/pages/wiki/images/discord/paste-guild.gif b/pages/wiki/images/discord/paste-guild.gif new file mode 100644 index 0000000..bd18bf7 Binary files /dev/null and b/pages/wiki/images/discord/paste-guild.gif differ diff --git a/pages/wiki/images/discord/paste-prim.gif b/pages/wiki/images/discord/paste-prim.gif new file mode 100644 index 0000000..27f7086 Binary files /dev/null and b/pages/wiki/images/discord/paste-prim.gif differ diff --git a/pages/wiki/images/discord/paste-token.gif b/pages/wiki/images/discord/paste-token.gif new file mode 100644 index 0000000..5f10f69 Binary files /dev/null and b/pages/wiki/images/discord/paste-token.gif differ diff --git a/pages/wiki/images/discord/prim-id.gif b/pages/wiki/images/discord/prim-id.gif new file mode 100644 index 0000000..5cd2174 Binary files /dev/null and b/pages/wiki/images/discord/prim-id.gif differ diff --git a/pages/wiki/images/discord/show-command.gif b/pages/wiki/images/discord/show-command.gif new file mode 100644 index 0000000..fc1df79 Binary files /dev/null and b/pages/wiki/images/discord/show-command.gif differ diff --git a/pages/wiki/images/discord/start-stop.gif b/pages/wiki/images/discord/start-stop.gif new file mode 100644 index 0000000..4f257fa Binary files /dev/null and b/pages/wiki/images/discord/start-stop.gif differ diff --git a/pages/wiki/images/geoip-step1.png b/pages/wiki/images/geoip-step1.png new file mode 100644 index 0000000..fe158b3 Binary files /dev/null and b/pages/wiki/images/geoip-step1.png differ diff --git a/pages/wiki/images/geoip-step2.png b/pages/wiki/images/geoip-step2.png new file mode 100644 index 0000000..fb14201 Binary files /dev/null and b/pages/wiki/images/geoip-step2.png differ diff --git a/pages/wiki/images/geoip-step3.png b/pages/wiki/images/geoip-step3.png new file mode 100644 index 0000000..9e454da Binary files /dev/null and b/pages/wiki/images/geoip-step3.png differ diff --git a/pages/wiki/images/geoip-step4.png b/pages/wiki/images/geoip-step4.png new file mode 100644 index 0000000..e650c2c Binary files /dev/null and b/pages/wiki/images/geoip-step4.png differ diff --git a/pages/wiki/images/geoip-step5.png b/pages/wiki/images/geoip-step5.png new file mode 100644 index 0000000..718491a Binary files /dev/null and b/pages/wiki/images/geoip-step5.png differ