0

我正在尝试使用 Commando 构建一个机器人,但我想不出一种方法让机器人忽略未在定义的通道中发送的命令(或者更好的是,删除和忽略)命令。例如,如果您未在#botchat 中发送命令,则消息将被删除。

我知道我可以拒绝其他频道中机器人的读取权限,但我有其他模块正在运行,它们需要读取频道。

我可以在每个运行函数的开头添加一个检查,但这不会影响默认命令。

有没有办法在实际运行功能开始之前编写为每个命令运行的检查功能?(也许使用 Command 类?)

4

3 回答 3

2

我发现:您可以使用Inhibitors。感谢 Discord.js 公会中的 Gawdl3y#4269

//in main file
client.dispatcher.addInhibitor(msg => {
  return (msg.channel.name == "blockme"); //you return whether the command should be blocked
})
于 2018-06-25T14:15:39.080 回答
1

您需要做的就是:

var Channel = message.channel.name

if (message.content === "command") {
    if(Channel != "Channel name here") {
        message.channel.send('Cannot use command here, ' + message.author);
    } else {
        // Insert command code here
    }
}

希望我有所帮助!谢谢。

于 2019-01-05T03:02:36.127 回答
0

您的命令在 IF/ELSE IF 树中吗?

如果是这样,我要做的就是在它甚至检查命令之前(但在它在服务器上的每条消息上运行的部分)有一个声明为消息通道的变量。就像是;

var ChannelID = message.channel.id

或者如果你不想按名字来做

var ChannelName = message.channel.name

然后,当您的命令依赖于通道时,请执行以下操作:

if(command === "ChannelDependentCommand"){
    if(ChannelID !== "AllowedChannel"){
        message.delete();
    }ELSE {
        //**whatever you want the command to do**
    };
};

我希望这有帮助?显然,如果您以不同的方式做事,则可能需要调整语法和免责声明,这根本没有经过测试,但它应该解释其背后的逻辑和思考。

此外,为了将来参考,如果您提供一些您已经获得的代码,则可以更轻松地给出相关答案:)

于 2018-06-23T22:30:20.063 回答