Minebot: AI based Virtual Assistant/Chatbot & Chat Moderator 1.0.0

A fully customizable virtual assistant/chatbot & chat moderator for your server

  1. Candy_Addiction
    Native Minecraft Version:
    1.16
    Tested Minecraft Versions:
    • 1.16
    Languages Supported:
    English
    Introduction

    Minebot is a fully customizable virtual assistant & chat moderator made for Minecraft servers. Unlike other chatbot plugins, Minebot uses machine learning, deep learning, and fuzzy logic to do a better job of understanding what its users want. Minebot can answer messages and even execute console commands of any character count. The possibilities are almost endless. Minebot can also help you with chat moderation, kicking players who attempt to say slurs, obscene words, or hate speech. You can enable or disable this feature anytime you want.
    All the processing happens on Minebot Cloud (the web service that powers Minebot), so your Minecraft Server won’t get overloaded by running machine learning models. You don’t have to worry about any performance impact, and almost all updates will happen on my end, eliminating the need to download a new plugin version every time. Minebot Cloud receives frequent updates, and you most times you won’t even notice when it’s being updated.

    Please read everything carefully. This is a complex plugin, and all sections of this text are important to understand how to use it.

    How it works

    The user has a goal in mind when sending a message to a bot. This goal is called intent, and the chatbot job is to parse the message to understand what the user wants and react accordingly. There are many ways to create chatbots. We train most of them with labeled questions & answers. For each intent, provide some examples of messages (used for intent classification), and what answers it should give. Minebot also works like this.
    The main algorithm behind Minebot can compute the semantic similarity between two sentences and can handle spelling errors. Although not perfect, it does pretty well most of the time. Those are some examples of Minebot’s semantic matching:

    [​IMG]

    Feature Overview
    • Customizable intents (sets of questions & answers). An answer can be a text message, a console command, or both. You can add multiple answers to an intent, and then choose the behavior for that intent. In random mode, Minebot choices a random answer (one message and one command). In sequential mode, Minebot sends all the added answers.
    • Comes with prebuilt intents (fun easter eggs).
    • Minebot can look for answers on the internet. You can ask the meaning of a word, or a brief explanation of something. Usually, the answers are from Wikipedia (for general knowledge) and WordNet (an English dictionary)
    • Minebot can also give quick descriptions of Minecraft items, blocks, entities, effects, and biomes. All this information comes from Minecraft Official Wiki.
    • Operators can ask Minebot to create named teleports anywhere. You can ask the bot to teleport you to the desired location anytime. It's also possible to ask for the teleport list.
    • Minebot supports local chat, and the radius is configurable.
    • Experimental chat filter that attempts to detect hate speech, obscenity, slurs, swear words, and offensive/toxic language. This feature isn't very mature yet, and it comes disabled by default.
    • Optional Wolfram|Alpha integration. You can extend Minebot’s functionalities by providing a Wolfram|Alpha API Key for your server.
    • You can manage intents with in-game commands, and can also use the companion command-line tool (Minebot CLI) to do it. The major benefit of the Minebot CLI is that unlike the Minecraft chat, it doesn’t have character limits. It means that you can add long commands to Minebot.
    Tutorials

    Unfortunately, I can’t explain every single command here, because the post will get too long. I’ll cover the trickiest ones, and you can send me a message on Discord if you need additional help.
    Warning: Minebot only supports English at the moment because machine learning models are language-specific. I plan on adding support for more languages in the future.

    Minebot CLI

    upload_2020-10-21_0-6-32.png



    Minebot is a complex plugin, and I felt that it wouldn’t be good if the only way to manage it was using in-game commands.
    The first time you open the CLI, it will ask you to log-in to an existing account or to create a new account. This process is simple: all it asks is a username and a password. This is necessary because all your custom content gets attached to your account.
    After creating the account, the CLI will show your Minebot Token, which is the code that you have to provide to the plugin in-game, using the command /mbtoken <token>. The plugin will not work without a token.

    upload_2020-10-21_2-55-27.png


    The CLI contains the following commands:

    • interaction <intent> <add|delete> <example|answer|command> <text>
    Add or remove an item (training example, command or answer) to an intent.

    • mode <intent> <random|all>
    Change the way Minebot reacts when he detects a custom intent. If you set the interaction to 'random', Minebot will pick one random answer and one random command. If you set it to 'sequential', Minebot will use all provided answers and commands in the same order you added the items

    • intents
    A list with all the names of all the intents you created

    • inspect <intent>
    Show all the answers and commands which you added to an intent.

    • deleteintent <intent>
    Delete an intent and its items

    • message <text>
    Send a message to Minebot. Useful to test the answers

    • toxic <text>
    Get the probability of the given text to be toxic or offensive.

    • wolframkey <key>
    Set the Wolfram | Alpha API Key to optionally extend Minebot's features

    • token
    Show your Minebot token

    Real examples

    Let’s suppose you want to create an intent to spawn a cat in the same location as the player. I’m going to name this intent “spawncat”, but you can choose any name you want. First, let’s teach Minebot to recognize it by adding an example message to this intent. Type the following command in the CLI:

    Code (Text):
    interaction spawncat add example spawn a cat
    Now, add an answer:

    Code (Text):
    interaction spawncat add answer I summoned a cat for you, !player
    Note that !player is a placeholder, it is replaced by the player’s name.

    Finally, add the /summon command to the intent

    Code (Text):
    interaction spawncat add command summon cat !x !y !z
    upload_2020-10-21_3-25-11.png

    Just like !player, !x, !y, and !z are placeholders that get replaced by the player’s x, y, and z coordinates. There is also the placeholder !dim (for the dimension), but we are not using it here.
    Let’s suppose you want to create an intent to spawn many cats. To accomplish this, use sequential mode. Doing so, Minebot executes all commands and sends all answers you added. The commands would be:

    Code (Text):
    interaction manycats add example spawn many cats
    interaction manycats add answer You really like cats, don't you !name?
    interaction manycats add command summon cat !x !y !z
    interaction manycats add command summon cat !x !y !z
    interaction manycats add command summon cat !x !y !z
    interaction manycats add command summon cat !x !y !z
    interaction manycats add command summon cat !x !y !z
    interaction manycats add command summon cat !x !y !z
    interaction manycats add command summon cat !x !y !z
    interaction manycats add command summon cat !x !y !z
    interaction manycats add command summon cat !x !y !z
    interaction manycats add command summon cat !x !y !z
    mode manycats sequential
    upload_2020-10-21_3-39-56.png

    Just like you added answers and commands with the parameter “add”, you can delete an item with the parameter “delete”. You don’t have to type the entire sentence/command to perform a deletion: it’s enough to write part of it.

    Hint: If you think Minebot isn't being smart enough to understand your messages, add more training examples. For example, Minebot is supposed to know that "create a kitten" has the same meaning as "spawn a cat", and in my tests, both phrases worked perfectly. If it hadn't worked, the solution would be to add "create a kitten" as a second example to increase the semantic range. Adding too many examples to the same intent can generate noise, so I advise you to be careful.

    Important: Minebot only answers to messages that start with "minebot".

    Now you can create any kind of interaction with Minebot.

    In-game commands

    Some CLI commands also exist in-game, but the chat limits you to 256 characters. This limitation may be a major issue if you are using lengthy commands, like the ones created by command generators. Only operators can run these commands.
    • mbinteraction <intent> <add|delete> <example|answer|command> <text>
    The same as "interaction" that exists on the CLI
    • mbinteractionmode <intent> <random|all>
    The same as "mode" that exists on the CLI
    • mbtoken <token>
    Set the Minebot token, obtained on the Minebot CLI
    • mblocalchat <true|false>
    Enable or disable local chat. If enabled, only players near the one who called Minebot will see his answer.
    • mbchatradius <radius>
    The radius for Minebot's answers on local chat. Adjust it to fit your needs.
    • mbfilter <true|false>
    Enable or disable Minebot's chat filter
    • mbthreshold <value>
    Set the toxicity probability threshold for the chat filter. The default value is 70, and I don’t recommend using values below 65, because it will generate too many false positives.
    • mbwolfram <key>
    The same as "interaction" that exists on the CLI

    Chat filter

    The experimental chat filter comes disabled by default. To enable it, go in-game and type the command /mbfilter true. This filter is based on a machine learning model trained with offensive text found on Twitter, Wikipedia discussions, and a white supremacist forum. This model is already good enough to help your server, but it still contains lots of false negatives. I’ll surely improve this feature soon.
    This filter attempts to detect slurs, swear words, hate speech, and obscene language. When Minebot detects toxic content, it kicks the player and clears the chat. Unfortunately, it’s not possible to block the message, because the web service needs a few milliseconds to answer the requests. The response comes quickly, but it’s enough to cause major lag on your server. That’s why I prefer this approach.

    Teleport management

    I created the TP Manager feature as an extra feature for my server, but I made it available for everyone.
    To create a TP in your current location, send a message similar to: "minebot, create the teleport <name>"

    upload_2020-10-21_5-0-4.png

    To go to the saved location, send a message like: "minebot, teleport me to <location>". To see all the saved TPs, say: "minebot, show the TP list". If you ever want to delete a created TP, say: "minebot, delete the tp <name>".

    Observation: Only operators can create and delete TPs.

    Global intents

    Minebot has a few intents available for all servers that use the plugin. I’ll add more intents overtime to make Minebot more entertaining to you and your players. For now, you can try:
    • Tell me a joke!
    • Flip a coin
    • What does the fox say?
    • What is the meaning of life?
    • I love you
    • Is the cake a lie?
    • What are you wearing?
    • Am I a joke to you?
    The web search feature (described above) is also enabled for everyone.

    Support Minebot

    Minebot is a personal project, and I don’t want to make a profit with it. I will never put purchasable features in it. But, to keep this plugin alive in the long term, I will need your support. Like I mentioned above, all the processing happens on cloud infrastructure (Google Cloud) and I have to pay for it every month. Right now it is cheap, but If the user base grows too much, I must hire better and better virtual machines, and the price will grow to where I won’t be able to pay for it, and I will have to end Minebot. If you think Minebot makes a difference (like I intended it to do) in your server, please consider donating to keep this project alive. I still have a lot of cool stuff and improvements planned!

    My PayPal

    Installation & Download

    1. Download the .jar plugin in the resources and move the file to the "plugins" directory on your server.
    2. Download Minebot CLI Here:
    Windows only version (.exe)
    Universal version (.jar, for Windows, Mac, Linux)
    You have to run the .jar version with the following command:
    Code (Text):
    java -jar minebot-cli v1.0.0.jar
    3. Run Minebot CLI
    4. Create an account and copy your token
    5. Start your server, join it and paste the token in the command: /mbtoken <token>

    Discord server

    Please, consider joining my Discord server. You can use my Discord to share the cool stuff you are doing with Minebot, to ask for help, and to report bugs. I'll also use Discord to make announcements.

    Invitation URL

    Thank you for reading!

    Images

    1. golem.png

Recent Reviews

  1. PhoenixHaven
    PhoenixHaven
    5/5,
    Version: 1.0.0
    I havent tested the plugin yet but it looks to be something that would 100% help people just starting out with making servers and want something simple to help them. One thing I did notice on the page is that you managed to leak your token (yes ik it's a test acc) but it says not to give your token to anyone yet you gave it to the entirety of Spigot.
    1. Candy_Addiction
      Author's Response
      Thank you for reviewing my plugin. I agree with you! Minebot is a good option to help new servers, and I believe it is also capable of assisting existing ones. It may be worth it to teach Minebot to answer the most frequent questions (like the server rules, who are the staff members...), not to mention that sometimes the chat goes humanly impossible to moderate. Regarding the token, thank you for reminding me of it! I intended to show how a token looks like, but totally forgot to delete the test user