如何制作Discord Bot,以找到与您输入的命令最接近的响应

时间:2018-12-21 07:02:24

标签: bots discord.js

因此,我基本上希望我的不和谐机器人以列表中最接近用户要求的响应来响应。

我想列出所有可能的响应,然后机器人可以扫描所有响应,找到与用户要求最接近的匹配项并将其发送给他们。

因此,如果我输入命令“ / hep”,它将自动找到最接近的命令“ / help”。

我知道有一些教程可以向您展示如何在Java Scrip中进行设置,但是我需要帮助使其与Discord Bot一起使用

该机器人与discord.js配合使用

我是Discord Bots的新手,所以任何帮助都很棒! (如果我错过了任何事情,请告诉我:)

1 个答案:

答案 0 :(得分:0)

我在我的机器人中实现的一个想法对您的问题是可靠的,那就是在您的消息检查中使用模糊搜索机制。我使用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

}
});

这有点混乱,但应该可以帮助您实现要求。