DEV Community

loading...
Cover image for An Awesome Clear Command For Your Discord.JS Bot

An Awesome Clear Command For Your Discord.JS Bot

Gilles Heinesch
Javascript, NodeJS, CSS, HTML, JQuery, ...
Originally published at Medium ・4 min read

What is our goal with this new command?

My goal with this post is, to show you how to program a well structured clear command. At the end it is able to clear a specific amount of messages posted in a Discord textchannel.
What will the command look like when we are done?

?clear {amount of messages that should be deleted}

Example: ?clear 50

Let’s start with programming

First of all, we start with the basic setup of our new command.

const args = message.content.split(' ').slice(1); // All arguments behind the command name with the prefix
Enter fullscreen mode Exit fullscreen mode

With this line of code we get all the content behind the prefix with the commandname. In this case, everything behind ?clear.

Example: If you enter the command in a Discord textchannel ?clear 50 , args will be [ 50 ] (which is an array).

const args = message.content.split(' ').slice(1); // All arguments behind the command name with the prefix
const amount = args.join(' '); // Amount of messages which should be deleted
Enter fullscreen mode Exit fullscreen mode

Now, we’ve added a new line which just makes it simpler to read the amount of messages which should be deleted. For this we simply need to join() the array. If you don’t know the function of join(), you can read more here.

const args = message.content.split(' ').slice(1); // All arguments behind the command name with the prefix
const amount = args.join(' '); // Amount of messages which should be deleted

if (!amount) return msg.reply('You haven\'t given an amount of messages which should be deleted!'); // Checks if the `amount` parameter is given
if (isNaN(amount)) return msg.reply('The amount parameter isn`t a number!'); // Checks if the `amount` parameter is a number. If not, the command throws an error
Enter fullscreen mode Exit fullscreen mode

2 new lines. The first one checks if the amount parameter is given. If not, the bot (command) throws an error that this parameter is needed to execute this command.

The next one checks if the amount parameter is even a number because an amount can only be an integer (a number) and can’t include letters.

const args = message.content.split(' ').slice(1); // All arguments behind the command name with the prefix
const amount = args.join(' '); // Amount of messages which should be deleted

if (!amount) return msg.reply('You haven\'t given an amount of messages which should be deleted!'); // Checks if the `amount` parameter is given
if (isNaN(amount)) return msg.reply('The amount parameter isn`t a number!'); // Checks if the `amount` parameter is a number. If not, the command throws an error

if (amount > 100) return msg.reply('You can`t delete more than 100 messages at once!'); // Checks if the `amount` integer is bigger than 100
if (amount < 1) return msg.reply('You have to delete at least 1 message!'); // Checks if the `amount` integer is smaller than 1
Enter fullscreen mode Exit fullscreen mode

Again 2 new lines. These lines should not be complicated at all. The first one checks if the amount integer is bigger than 100, if yes the bot throws an error. The same for the next line, only that it checks if the integer (amount parameter) is smaller than 1. If you don’t know why the maximum can only be 100; this is due to the Discord API, it only allows a bot application to fetch 100 messages at once. More can be found here.

const args = message.content.split(' ').slice(1); // All arguments behind the command name with the prefix
const amount = args.join(' '); // Amount of messages which should be deleted

if (!amount) return msg.reply('You haven\'t given an amount of messages which should be deleted!'); // Checks if the `amount` parameter is given
if (isNaN(amount)) return msg.reply('The amount parameter isn`t a number!'); // Checks if the `amount` parameter is a number. If not, the command throws an error

if (amount > 100) return msg.reply('You can`t delete more than 100 messages at once!'); // Checks if the `amount` integer is bigger than 100
if (amount < 1) return msg.reply('You have to delete at least 1 message!'); // Checks if the `amount` integer is smaller than 1

await msg.channel.messages.fetch({ limit: amount }).then(messages => { // Fetches the messages
    msg.channel.bulkDelete(messages // Bulk deletes all messages that have been fetched and are not older than 14 days (due to the Discord API)
)});
Enter fullscreen mode Exit fullscreen mode

The first new line fetches all messages. The limit is the above given amount parameter (To revise: This is the number behind the ?clear command). Then we continue to the main function of this command; Bulkdelete. The bot now bulkdeletes all messages that have been fetched.

Be careful! The messages can not be older than 14 days (again due to the Discord API).

Conclusion

I hope I could help you a little bit with your bot and the setup of your clear command. If you have any questions, just comment below!

Photo by Paweł Czerwiński on Unsplash
Photo by Paweł Czerwiński on Unsplash

Discussion (0)

Forem Open with the Forem app