Одна идея, которую я реализовал в своих ботах, которая оказалась бы надежной для вашего вопроса, - это использование нечеткой поисковой механики при проверке ваших сообщений.Я использую библиотеку http://fusejs.io/ для своих нечетких поисков.Сначала вам нужно будет обработать массив команд.Пример:
const Fuse = require('fuse.js');
const commandarray = ['help','ping','commands','etc'];
var options = {
shouldSort: true,
threshold: 0.6,
location: 0,
distance: 100,
maxPatternLength: 32,
minMatchCharLength: 2,
keys: undefined
};
Затем используйте библиотеку нечеткого поиска, чтобы взаимодействовать с входящими сообщениями, которые начинаются с вашего префикса, и отправлять их через нечеткий.Его ответ будет наиболее близким к вашей команде.Это означает, что если вы ввели «! Hep», ответ от нечеткого ответа был бы «help», и вы можете продолжить взаимодействие с отправителем, инициировав команду help.Просто убедитесь, что сначала нечеткие поисковые сообщения отправляются с префиксом, не позволяйте ему искать каждое сообщение, отправленное в канале, или он будет выполнять команду, ближайшую к каждому сообщению, по каждому отправленному слову.что-то вроде:
const prefix = '!';
const fuse = new Fuse(commandarray, options);
client.on('message', message => {
if (message.content.startsWith(`${prefix}`)) {
const fuzzyresult = fuse.search(message);
(now fuzzyresult will return the index of the command thats in the array that is the closest match to the message sent on discord)
(now you grab your array of commands, input the index, and turn it into a string)
let cmdslice = commandarray.slice(fuzzyresult);
let cmdslice.length = 1;
let cmd = cmdslice.toString();
if (cmd === 'help') {
do this function
} else if (cmd === 'ping') {
do this function instead
} etc etc etc
}
});
Это немного грязно, но должно помочь вам выполнить ваш запрос.