将命令限制到某些通道

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
    

希望我能帮上忙!谢谢。

【讨论】:

以上是关于将命令限制到某些通道的主要内容,如果未能解决你的问题,请参考以下文章

带有 Spring Boot 的 CORS - 将 GET 请求限制到某些域

华为的18-23路由怎么在命令行下限制访问某些网站?

WP7 推送通知通道数限制

Clojure 中的速率限制 core.async 通道

限制数据网格中某些项目的拖放? - 土坯柔性

如何限制对 Access 中某些列的访问