simillar-commands
v1.0.2
Published
A simple npm utility module for obtaining similar commands in Discord Bots projects.
Downloads
3
Maintainers
Readme
Installation
npm install simillar-commands
Usage
Basic Example Get an array with all simillar commands
// Import the Simillar Commands function
const { simillarCommands } = require('simillar-commands');
// Create an array of commands
const commands = [
'ping',
'say',
//....
'unsay'
];
// Get simillar commands
simillarCommands(commands, 'ping'); // ['ping']
simillarCommands(commands, 'pin'); // ['ping']
simillarCommands(commands, 'pong'); // ['ping']
simillarCommands(commands, 'sâY'); // ['say']
simillarCommands(commands, 'nsay'); // ['say', 'unsay']
simillarCommands(commands, 'foo'); // []
Normalize Commands Normalize commands before use to prevent errors
// Import the Normalize function
const { normalize } = require('simillar-commands');
const command = 'CômmandExàmplê';
normalize(command); // commandexample
// Case insensitive usage
normalize(command, false); // CommandExample
Basic Bot 'Did you mean?' system Show a react Embed to suggest a simillar command
// Import the Simillar Command and Normalize function
const { simillarCommand, normalize } = require('simillar-commands');
// Setup Discord Bot and Creates a Collection/Array of Commands
const Discord = require('discord.js');
const client = new Discord.Client();
const prefix = '!';
client.commands = new Discord.Collection();
client.commands.set('ping', {
name:'ping',
run: msg => msg.reply('pong!')
});
client.commands.set('say', {
name:'say',
run: msg => msg.reply(msg.content.split(' ').slice(1).join(' '))
});
// Creates a Command Handler
client.on('message', async(msg) => {
if(!msg.guild || !msg.content.startsWith(prefix) || msg.author.bot) return;
const cmd = normalize(msg.content.slice(prefix.length).split(' ')[0]);
let command = client.commands.get(cmd);
if(command) { // Run command normally
command.run(msg);
} else { // Search for simillar command
const simillar = simillarCommand(client.commands, cmd);
// Creates a Embed
const embed = new Discord.MessageEmbed()
.setDescription(`Did you mean **${simillar}**?`);
const msgEmbed = await msg.reply(embed);
msgEmbed.react('✅');
// Setup the Reaction Collector
const filter = (reaction, user) => {
if(reaction.emoji.name != '✅') return false;
return(user.id == msg.author.id)
}
msgEmbed.createReactionCollector(filter, { max: 1 })
.on('collect', () => { // Run command normally
command = client.commands.get(simillar);
command.run(msg);
});
}
});
// Start Bot
client.login('TOKEN');
Case Insensitive You can also add a param to not ignore the case.
// Import module functions
const { normalize, simillarCommands, simillarCommand } = require('simillar-commands');
normalize('CômmÁnD'); // command
normalize('CômmÁnD', false); // CommAnD
const commands = ['ban', 'unban', 'BaN' , 'ping'];
simillarCommands(commands, 'bam'); // ['ban', 'BaN']
simillarCommands(commands, 'bam', false); // ['ban']
simillarCommands(commands, 'BaM', false); // ['BaN']
simillarCommands(commands, 'nban'); // ['ban, 'unban', 'BaN']
simillarCommands(commands, 'nBaN', false); // ['BaN']