Command API

This page assumes you’ve completed Creating a Simple Hello World Module. If not, check the previous pages.

Now for a more realistic module, creating a hello world command.

The Command Class

Each command in Monium has their own class based on Command. And you need to set 2 attributes when creating it, name and args, like so:

from monium.ext.command import Command

class HelloWorldCommand(Command):
    name = "hello"
    args = []

Making It Do Something

Now, this command needs to do something, and we’re going to do it by implementing run, like so:

import discord

from monium.ext.command import Command

class HelloWorldCommand(Command):
    name = "hello"
    args = []

    async def run(message: discord.Message, **kwargs):
        # self.client is a shortcut to self.module.client which is a instance of
        # MoniumClient (discord.Client subclass)
        await self.client.send_message(, "Hello, world!")

Now, the command is done, but if you run this bot now, nothing will happen. Commands aren’t automatically activated like modules. Instead, you’ll have to register them

Registering It

On your module classes on_ready function, add the following line:


This will register your command using the CommandParser instance of the bot. Please note that all commands have self (Module class instance) as an argument.

Command Arguments

If you want to add arguments to your command, it’s really easy. Just add a string to the command’s class’ args like so:

args = ["name"]

Now, in your command function, you can access that by kwargs.get("name") like so:

async def run(self, message: discord.Message, **kwargs):
    name = kwargs.get("name")
    if not name:
        # You could just use the "default" argument in dict.get, but
        # I'm doing it like this in this example to show a way if you want
        # to do something more than just have a default argument
        name = "World"  # or maybe send an error. Up to you

    # The f"Hello, {name}" part is the new string formatting method in
    # Python 3.6 and above that automatically fills in the variables by
    # their names. Nothing special going on here.
    await self.client.send_message(, f"Hello, {name}!")

And that’s about it for commands. The same module (with some comments) can be found on our examples repository with args without args.