Как я могу создать Discord Bot, который находит ближайший ответ на введенную вами команду? - PullRequest
0 голосов
/ 21 декабря 2018

Итак, я хочу, чтобы мой бот разногласий отвечал самым близким ответом из списка, на то, что просил пользователь.

Я хочу иметь большой список всех возможных ответов, которые бот сможет затем отсканировать и найти наиболее близкое соответствие тому, о чем просит пользователь, и отправить его им.

Итакесли бы я ввел команду "/ hep", она автоматически нашла бы ближайшую команду, которая будет "/help".

. Я знаю, что есть учебники, которые показывают, как настроить это в Java Scrip, но мне нужна помощьзаставить его работать с моим ботом Discord

Бот работает с discord.js

Я новичок в ботах Discord, поэтому любая помощь будет потрясающей!(Если я что-то пропустил, просто дай мне знать:)

1 Ответ

0 голосов
/ 22 декабря 2018

Одна идея, которую я реализовал в своих ботах, которая оказалась бы надежной для вашего вопроса, - это использование нечеткой поисковой механики при проверке ваших сообщений.Я использую библиотеку 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

}
});

Это немного грязно, но должно помочь вам выполнить ваш запрос.

...