将命令限制到某些通道
Posted
技术标签:
【中文标题】将命令限制到某些通道【英文标题】:Limiting commands to certain channels 【发布时间】:2018-12-02 22:17:41 【问题描述】:我正在尝试使用 Commando 构建一个机器人,但我无法找到一种方法让机器人忽略未在定义的通道中发送的命令(或者更好的是,删除和忽略)命令。例如,如果您不在#botchat 中发送命令,则消息将被删除。
我知道我可以拒绝机器人在其他通道中的读取权限,但我有其他模块正在运行,它们需要读取通道。
我可以在每个运行函数的开头添加一个检查,但这不会影响默认命令。
有没有办法编写一个检查函数,在实际运行函数开始之前为每个命令运行? (也许使用 Command 类?)
【问题讨论】:
【参考方案1】:您的命令是否位于 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**
;
;
我希望这会有所帮助吗?显然,如果您以不同的方式做事,则可能需要调整语法和免责声明,这根本没有经过测试,但它应该解释其背后的逻辑和思考。
此外,为了将来参考,如果您提供一些您已经获得的代码,则更容易给出相关答案:)
【讨论】:
我知道如何在 Discord.js 中做到这一点,但我想知道如何使用 Commando 来处理它...在 Commando 中,一旦加载了命令,就会自动运行 啊,对不起,我错过了突击队的部分,我不确定那是什么。对不起! 别担心,这不是问题! ?【参考方案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
)
【讨论】:
【参考方案3】:您需要做的就是:
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
希望我能帮上忙!谢谢。
【讨论】:
以上是关于将命令限制到某些通道的主要内容,如果未能解决你的问题,请参考以下文章