Discord.py - Rewrite Tutorial using commands extension
Note : Before you start this tutorial, You should already know the language python, how to create applications in discord and you should've already invited the bot to your server.
Step 1 : Setting up
Create a new folder for your bot, it can be anything. For reference, I will name it
terminaland type the following commands in it.
Now create a new file named
main.pyin your bot's folder. This file will hold the main bot.
Also create a new directory named
cogsin your bot's directory, this will hold our command groups (aka cogs).
Now you're ready to code
Step 2 : The main bot
Open up your
main.pyfile. Given below is some basic code with everything explained using comments.
Now run this file, commands extension will prepare a default
helpcommand for you, you should see something similar to this when you use it: -
Note that it doesn't show help when
=helpis used as this was done in DMs, and we only allowed
Next we add the commands from the
cogsdirectory, create a new file named
Add the following code above the
part in the
This basically points to the
basic.pyfile in the
This will load the all the files specified in the cogs variable.
Next, open up the
basic.pyfile and write the following code in it.
This will add a new ping command to your bot!
Save the file
Step 3 : Checking the new command
Run the main.py again.
helpcommand. It should look something like this: -
Observe the new Basic category and ping command listed under it. This means that our command was successfully loaded.
Now use the
help pingcommand, should look something like this: -
Note that in the example, it shows the prefix used by you!
Finally, let's use the ping command.
This is an example run (my internet is a bit slow)
Step 4 : Commands with arguments
Open up the
basic.pyfile and add the following command to it by typing it just below the
returnstatement of the ping command. This is a say command that repeats the words said by the user (in bold): -
Step 5 : Embeds
Since, we've already done this, let's do one final command. The embed command.
What this command will do?
- Ask for the title of the embed.
- Ask the user to specify the text for the embed description.
- Set a random color to the embed.
- Send the embed in the channel
What this will help you learn?
- How to create and send embeds.
- How to wait for user's response.
In your cogs directory, create a new file named
main.pyfile, to the cogs list which formerly was
cogs = ['cogs.basic']add a new cog i.e.
'cogs.embed', making it -
cogs = ['cogs.basic', 'cogs.embed']. This will tell it to also treat the
embed.pyfile as another cog.
Open up the embed.py file and write the following code in it: -
Now, let's run this command!
And that's it!
Step 6 : Changing the default help command
As we've already seen, commands extension already comes with a built-in help command. Let's use it again!
Pretty clearly, it's very ugly. So, let's change it!
So, what we'll do is, remove the pre-defined help command and then create a new help command in the
Open up the main.py file and make the following changes: -
embed.pyfile and make a new help command is given below: -
NOTE : We're making this in the embed.py file because this help command will be using embeds too. ( though it's not necessary to do even if it uses embeds, I just don't want to create another file with all those colors).
What this help command will do?
Get all the cogs registered.
If the user has passed a cog argument,
then list all commands under that cog.
Else, list all cogs and commands under them.
This is just an example and gives you an basic idea of what it is like. Below is a sample run of this new help command.
No cog specified, commands listed
Embed cog specified, show the details of commands under Embed category.
Invalid cog specified, send error message.
.env files to store your token. I've used .env file to store my token in the final code. You can learn more about how to use
.env files here.
Those are all the basics you'll need to know, refer to API Reference for reference on the discord.py commands extension. You can also refer to the main library docs. All of the above code can be obtained at here. Also you can visit this link to learn how to host your discord bots on repl.it!
Can someone help me im around step 3 and it says this
Ignoring exception in on_ready
Traceback (most recent call last):
File "/opt/virtualenvs/python3/lib/python3.8/site-packages/discord/client.py", line 343, in _run_event
await coro(*args, **kwargs)
File "main.py", line 30, in on_ready
for cog in cogs:
NameError: name 'cogs' is not defined
Hello is anyone still available here? I'm getting this error for the custom help:
2020-05-03T14:05:40.834559+00:00 app[worker.1]: discord.ext.commands.errors.CommandInvokeError: Command raised an exception: HTTPException: 400 Bad Request (error code: 50035): Invalid Form Body
2020-05-03T14:05:40.834560+00:00 app[worker.1]: In embed.fields.10.name: This field is required
2020-05-03T14:05:40.834561+00:00 app[worker.1]: In embed.fields.10.value: This field is required
2020-05-03T14:05:40.834561+00:00 app[worker.1]: In embed.fields.12.name: This field is required
2020-05-03T14:05:40.834561+00:00 app[worker.1]: In embed.fields.12.value: This field is required
2020-05-03T14:05:40.834562+00:00 app[worker.1]: In embed.fields.4.name: This field is required
2020-05-03T14:05:40.834562+00:00 app[worker.1]: In embed.fields.4.value: This field is required
2020-05-03T14:05:40.834563+00:00 app[worker.1]: In embed.fields.6.name: This field is required
2020-05-03T14:05:40.834563+00:00 app[worker.1]: In embed.fields.6.value: This field is required
2020-05-03T14:05:40.834563+00:00 app[worker.1]: In embed.fields.8.name: This field is required
2020-05-03T14:05:40.834564+00:00 app[worker.1]: In embed.fields.8.value: This field is required
I'm very confused. Whenever I try to install discord.py using the "pip" thing, it does not work and it says "'pip' is not recognized as an internal or external command,
operable program or batch file". What do I do?
@TheDrone7 What are cogs and do I have to use terminal or command prompt for this? Can you please share the link of your code so I can fork it and just do it?
P.s I am new to coding
@haniel2007 I really have no clue what
cogs means but I simply assume it's short for
command groups cuz that basically defines them perfectly. As for the next part, command prompt or powers hell is what you'd use on windows, on Linux, you'd use terminal, on repl.it you'd use the repl package manager or just the
requirements.txt solution. It's just different names for the same thing depending on the operating system. Nextly, the final code is linked at the end of the tutorial.
Lastly, I recommend you to learn about coding and python first and then return to this tutorial. This one is not for beginners or people who are not well versed with the language since I only explain what is discord.py doing and not what python is doing. Hope that'll be all.