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

Posted

技术标签:

【中文标题】如何制作一个 Discord Bot 来找到与您输入的命令最接近的响应【英文标题】:How can I make a Discord Bot that finds the closest response to the command you entered 【发布时间】:2019-05-21 16:09:08 【问题描述】:

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

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

所以如果我输入命令“/hep”,它会自动找到最接近的命令,即“/help”。

我知道有教程向您展示如何在 Java Scrip 中进行设置,但我需要帮助才能让它与我的 Discord Bot 一起工作

机器人与 discord.js 一起工作

我对 Discord Bots 还很陌生,所以任何帮助都会很棒! (如果我错过了什么,请告诉我:)

【问题讨论】:

喜欢 ?***.com/questions/5859561/… Getting the closest string match的可能重复 @xdtTransform 是的,但是我对 JS 很陌生,我不知道如何让它与我的机器人一起工作,如果你能制作一个很棒的演示!跨度> 你好,我猜你错过了一步,我建议阅读tour、How to Ask和minimal reproducible example。这不是关于 js 或新的。 String metrics](en.wikipedia.org/wiki/String_metric) 不是内置的 Js 函数,即使它仍然存在大量规则以及缺少精确和详细的信息。 当然,在寻找将关闭字符串与命令列表匹配的过程中,您至少有一个命令字典。这是找到关闭命令的一大步,但这还不够。确保使用精心构建的命令词典,您的问题就会减少,因为所有单词都可能完全不同。避免像(帮助,地狱和你好)这样的接近词。没有编码魔法,人脑擅长猜测缺失的字符和预期的单词。在这里,您有和不清楚的问题,关于重复的主题,需求太广泛。这是 3 个紧密的原因。 【参考方案1】:

我在我的机器人中实施的一个想法是在你的消息检查中使用模糊搜索机制,这将证明对你的问题是可靠的。我使用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”,来自模糊的响应将是“帮助”,然后您可以通过启动帮助命令继续与发件人交互。只要确保它首先模糊搜索带有前缀的消息,不要让它搜索通道中发送的每条消息,否则它会在发送的每个单词上执行最接近每条消息的命令。类似:

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


);

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

【讨论】:

非常感谢您的帮助!但由于某种原因,我仍然无法让它工作,我不知道我做错了什么。你认为你可以制作一个工作演示,然后我可以下载并定制它以与我的机器人一起工作吗? - 谢谢,

以上是关于如何制作一个 Discord Bot 来找到与您输入的命令最接近的响应的主要内容,如果未能解决你的问题,请参考以下文章

Discord bot如何创建私人文本频道

编译 Java/gradle discord bot

Discord JS bot 如何从 API 获取递归异步函数

如何制作随机反应游戏(discord.py)

您如何公开 Discord Bot?

如何打开终端并运行脚本,然后通过 discord bot 关闭它