代码之家  ›  专栏  ›  技术社区  ›  Federico Grandi

将命令限制到某些通道

  •  0
  • Federico Grandi  · 技术社区  · 7 年前

    我正试图用一个突击队构建一个机器人,但是我不能想出一个办法让BOT忽略命令(或者更好,删除和忽略)在一个定义的通道中不发送的命令。例如,如果不在botchat中发送命令,则消息将被删除。

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

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

    有没有办法在实际运行函数开始之前为每个命令运行一个check函数?(可能使用command类?)

    3 回复  |  直到 7 年前
        1
  •  1
  •   Federico Grandi    7 年前

    我发现:你可以用 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
    })
    
        2
  •  0
  •   callum siciliano    7 年前

    您的命令是否在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**
        };
    };
    

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

    另外,为了将来的参考,如果你提供了一些你已经得到的代码,它会更容易给出一个相关的答案:

        3
  •  0
  •   James    7 年前

    你需要做的就是:

    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
        }
    }
    

    希望我能帮忙!谢谢。

    推荐文章