simillar-commands

1.0.2 • Public • Published

simillar-commands


NPM version NPM downloads GitHub Version GitHub Version

NPM info

A simple npm utility module for obtaining similar commands in Discord Bots projects.

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']

Package Sidebar

Install

npm i simillar-commands

Weekly Downloads

2

Version

1.0.2

License

MIT

Unpacked Size

1.34 MB

Total Files

5

Last publish

Collaborators

  • mssjim