Introduction

Creating a module is relatively simple: just create a python package (a folder that contains a __init__.py file) in the modules folder, insert a version.json file (which will allow you to add dependencies and general information for your module) and have a MainClass class in the __init__.py file.

So the next step is to create the MainClass, which inherits from BaseClassPython, here is a minimal example:

1
2
3
4
5
6
7
class MainClass:
    name = "MyFirstModule"
    help = {
        "description": "My first module",
        "commands": {
        }
    }

As you can see it’s very simple, from now on you can start the bot and load the module.

Currently it does nothing, so let’s add a say command:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
class MainClass:
    name = "MyFirstModule"
    help = {
        "description": "My first module",
        "commands": {
            "{prefix}{command} say <message>": "Bot send message <message>",
        }
    }

    async def com_say(self, message, args, kwargs):
        await message.channel.send(args[0])

You can now reload the module and test the command !myfirstmodule say "Hello world".

You can see that without the quotation marks the returned message contains only the first word. Indeed each message is processed to extract the module (here module), the command (here say) and the arguments. This is how the arguments are processed:

!mymodule say "Hello world" "Goodbye world" - args = ["Hello world", "Goodbye world"] kwargs=[]

!mymodule say --long-option -an -s "s value" - args = [] kwargs = [("long-option", None), ("a", None), ("n", None), ("s", "s value")]

!mymodule say -s "s value" "value" - args = ["value"] kwargs = [("s", "s value")]

So let’s add an -m option that adds the mention of the author to the message:

10
11
12
13
14
    async def com_say(self, message, args, kwargs):
        if 'm' in [k for k, v in kwargs]:
            await message.channel.send(message.author.mention + args[0])
            return
        await message.channel.send(args[0])