NodeJS - 我如何制作一个将在命令之后运行的命令?

Posted

技术标签:

【中文标题】NodeJS - 我如何制作一个将在命令之后运行的命令?【英文标题】:NodeJS - How do i make a command that will run after a command? 【发布时间】:2018-05-16 21:40:03 【问题描述】:

我想创建一个在命令被调用后运行的命令 这是我的代码:

ownerID = "12042";
    if (message.content.startsWith(config.prefix+"afk on")) 
      afk = true;
      if (afk == true) 
      message.channel.send("Turned on AFK mode");
        if (message.content.includes(config.ownerID)) 
            message.reply(`X is away. Try again later.`);
          
        
    
    if (message.content.startsWith(config.prefix+"afk off")) 
      afk = false;
      if (afk == false) 
      message.channel.send("Turned off AFK mode");
      
    

我尝试在这里发出“AFK 模式”命令,如果我发送afk on,它会在有人输入12042 时回复X is away

使用该代码,我根本没有得到任何答案,但如果我成功了

if (message.content.includes(config.ownerID)) 
    message.reply(`X is away. Try again later.`);
    

它会毫无问题地回复,但我们都知道它会一直回复

【问题讨论】:

在您的*** if 语句中,您将变量分配给它们各自的值并立即检查该值。您不需要在这里进行分配,因为您知道您的表达式是真实的并且没有替代执行流程。另外,你为什么使用字符串而不是布尔值? @NoMoreQuestions 啊,我的代码实际上是布尔值,因为我是 *** 的新手,在发布此内容时有点困惑,所以我重新编写了代码。请问代码应该是什么样子的? 这是您的message 事件处理程序的全部内容吗? afk的范围是什么? 您在第一个区块中遇到的问题到底在哪里?您的预期输出究竟是什么? @AuxTaco 这不是全部内容,我只想让机器人运行 if (message.content.includes(config.ownerID)) message.reply("X is away. Try again later."); 仅当我运行 afk on 并且如果我运行 afk off 它将不会运行 【参考方案1】:

您的机器人应该寻找三种类型的消息:<prefix>afk on<prefix>afk off,以及包括12042 在内的任何消息。您的代码仅处理<prefix>afk on<prefix>afk off12042 作为“开启”消息的特例。 (如果您尝试发送<prefix>afk on 12042,您应该会看到您离开的消息。)重组您的代码以检查所有三种情况。最简单(但不一定是最好)的方法是

if (message.content.startsWith(config.prefix+"afk on")) 
  // turn on afk mode
 else if (message.content.startsWith(config.prefix+"afk off")) 
  // turn off afk mode
 else if (message.content.includes(config.ownerID)) 
  // send the afk message if afk mode is on

【讨论】:

如果 message.content.includes(config.ownerID)message.content.startsWith(config.prefix+"afk on") 之外,每次提到 ownerID 时,bot 都会发送 afk 消息,这就是为什么我让它 if (afk == true) 但它不起作用 注意该分支中的注释:发送 afk 消息如果 afk 模式开启。您可以将其作为ownerID 分支内的辅助检查或通过将条件更改为afk && message.content.includes(config.ownerID) 来实现。无论哪种方式,它都与afk on 分支无关。 我正在使用afk && message.content....,现在每当我提到ownerID时,机器人都会不断回复,我不知道为什么,我已经制作了afk = true;afk = false并添加了if (afk=true && message.content.includes....它。 最后一个 sn-p 中的等号数量完全错误。零个或三个,不是一个。但是你确定afk 有你认为的吗?如果要跟踪消息之间的 afk 模式,则需要在此处理程序之外定义它。 我不确定,但这是我的猜测。 'var afk' 不会将其值更改为true,也不会更改为false。这就是为什么即使我运行afk off 机器人也会继续回答

以上是关于NodeJS - 我如何制作一个将在命令之后运行的命令?的主要内容,如果未能解决你的问题,请参考以下文章

NodeJS初学

如何在 shell 命令中发送 Jenkins 版本号作为参数,该命令将在构建结束后执行

如何确保 cmake 代码将在子目录之后运行

nodejs如何判断数据库操作是不是执行完毕

如何将在 Lambda 上使用 NodeJS 丰富的对象返回到 API POST 请求

如何制作将在 iOS 5 到 7 上运行的 armv7 arm64 fat 二进制文件?