Throttling

Throttling is like rate-limiting; it allows the command to be used only in a certain period of time—a cooldown of sorts. This is useful for commands that rely on API calls, or commands that can be spammy, to allow them to not be overused by one user.

First, grab a command file you want to use throttling with.

const { Command } = require('discord.js-commando');

module.exports = class MeowCommand extends Command {
	constructor(client) {
		super(client, {
			name: 'meow',
			group: 'first',
			memberName: 'meow',
			description: 'Replies with a meow, kitty cat.',
		});
	}

	run(message) {
		return message.say('Meow!');
	}
};

Add the throttling property to the command. throttling is an object, which contains two things:

  • usages is the amount of times the command can be used in the given time period.
  • duration is the amount of time the cooldown lasts, in seconds.

Make it have 2 usages allowed in a 10 second period.

super(client, {
	name: 'meow',
	group: 'first',
	memberName: 'meow',
	description: 'Replies with a meow, kitty cat.',
	throttling: {
		usages: 2,
		duration: 10,
	},
});

The command now has a cooldown. If a user tries to use the meow command more than 2 times in 10 seconds, it will not allow them to use it until the 10 seconds have fully passed. While useless in a command like meow, this can be very useful for other, heavier commands you don't want abused.