【问题标题】:Limiting commands to certain channels将命令限制到某些通道
【发布时间】:2018-12-02 22:17:41
【问题描述】:

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

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

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

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

【问题讨论】:

    标签: node.js discord.js commando


    【解决方案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
          }
      }
      

      希望我能帮上忙!谢谢。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2021-12-13
        • 1970-01-01
        • 2016-07-07
        • 2020-07-07
        • 1970-01-01
        • 2020-06-15
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多