当前位置: 首页 > 知识库问答 >
问题:

Discord.js-如何实现前缀以避免错误触发命令响应?

花飞尘
2023-03-14

我正在开发一个带有命令处理程序的不和谐机器人,在那里我将所有命令导入到主文件中。我遇到的问题是,我正在努力在命令中实现前缀,以便所有命令都可以由文本触发。

我的命令处理程序的工作方式是,我在bot中有这段代码。js:

client.on('message', msg => {
if (msg.content.startsWith(prefix)) return;
//Splitting the message from the user
const args = msg.content.split(/ +/);
const command = args.shift().toLowerCase();
console.log(`Called comand: ${command}`);

//See if the commands folder has that command in it
if (!client.commands.has(command)) return;

//Try to execute the command. If we can't, we throw an error instead.
try {
    client.commands.get(command).execute(msg, args);
} catch (error) {
    console.error(error);
    msg.channel.send("I hit an issue trying to issue that command.");
    console.log("A Comnmand was issued, but I hit an issue trying to run it.");
}

在那个文件的顶部我还有

const prefix = '!'

然后我有一个名为index的文件。命令文件夹中的js,如下所示:

module.exports = {
about: require('./about'),
help: require('./help'),
nokill: require('./nokill'),
animeme: require('./animeme'),
showmeme: require('./showmeme'),
roadmap: require('./roadmap'),
changelog: require('./changelog'),
wuvu: require('./wuvu'),
debug: require('./debug'),
dailyquote: require('./dailyquotes'),
dance: require('./dance'),

对于命令,它们看起来像这样:

const GihpyAPIModule = require('./command_modules/fetchGif.js');

module.exports = {
    name: 'dance',
    decription: 'Sends a dancing GIF',
    execute(msg, args) {
        msg.channel.send("Here's your dance!");
        var searchPromise = GihpyAPIModule.getGif("dance");

        searchPromise.then((gif) => {
            msg.channel.send(gif);
        })
    }

在查看了机器人运行的控制台后,我注意到如果我先发送一条带有前缀的消息,比如!跳舞,它甚至不捡起来。它完全忽略了它。

这是我到目前为止尝试的:

>

在bot.js中使用这个:

const args=msg.content.slice(prefix.length)。

因为机器人只是忽略消息!一开始,机器人只是把消息删掉,所以帮助会变成elp。

任何建议都非常感谢!

共有2个答案

费星晖
2023-03-14

如果命令以前缀开头,则表示命令退出。回归;函数将终止函数并使其返回某个值,或者它将停止函数并“返回”到主代码。您所做的是使bot返回到监听命令的状态,而不是实际执行命令。

一个简单的解决方法是

if(!msg.content.startsWith(prefix)) return;

这个开始时的标记非常重要。这意味着如果情况并非如此,则返回监听新消息

潘衡
2023-03-14

您需要替换名为的方法:

if (msg.content.startsWith(prefix)) return;

为此:

if (!msg.content.startsWith(prefix)) return;

我认为它不应该起作用。

 类似资料:
  • 当用户使用一个新的不和谐斜杠命令时,我正试图从我们的不和谐机器人发送一个DM给他们。 代码在下面。Discord文档说`Interaction.Member应该是Discord GuildMember,但是,下面的代码给了我以下错误: TypeError:Interaction.Member.Send不是函数 我可以从data字段调用其他本地函数,但一直无法弄清楚如何将用户DM回来。我假设我做错了

  • 我正在将oracle从10升级到12,对于这个特定的项目,我遇到了以下错误: 似乎它没有识别我在DataSource上添加的配置: 我们使用的是Java 8,我们对代码有这些依赖关系: 问题是它正在为另一个项目工作(与这个项目具有相同的结构,但由于某种原因它在这里不起作用) 是否有任何遗漏或我可以找到问题并解决问题的地方?

  • 我最近做了一个不和谐的机器人,有几个功能,这个机器人有一个先进的命令处理程序,我想知道如何做一个命令,在那里,机器人说什么你告诉它。 示例:“.say(消息)” bot以“(消息)”响应 这是我的命令处理程序 没有关于如何使用高级命令处理程序执行此操作的教程 现在的机器人是为了好玩,但我可能会使它成为适度。

  • 问题内容: 我试图写一个近似平方根的函数(我知道有数学模块……我想自己做),但我被浮点运算搞砸了。如何避免这种情况? 使用它会产生以下结果: 我意识到我可以使用,但是我希望能够做到这一点非常准确。我希望能够计算出6或7位数字。如果我四舍五入,那将是不可能的。我想了解如何在Python中正确处理浮点计算。 问题答案: 这实际上与Python无关- 使用硬件的二进制浮点算法,您会在任何语言中看到相同的

  • 问题内容: 考虑以下代码: 我了解在上面的代码中,如果拥有同步块的所有权,并且同时如果线程尝试获取同步块,则需要内核等待。我想避免这种情况,并在块之前旋转,直到调用等待并离开该块的所有权为止。那可能吗? 问题答案: JVM无需将进入锁定的同步块的步骤实现为硬块和上下文切换。它可以选择使用重量更轻的方法,例如旋转锁。实际上,Oracle JVM竭尽所能避免阻塞。因此,您可能会发现JVM已经为您完成了

  • 我正在为自己建立一个虚拟助手,如果像这里举个例子,要求个人执行每一个命令是错误和无效的: 有没有更有效的方法来检查要执行的命令?