【问题标题】:NodeJS - How do i make a command that will run after a command?NodeJS - 我如何制作一个将在命令之后运行的命令?
【发布时间】: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 啊,我的代码实际上是布尔值,因为我是 stackoverflow 的新手,在发布此内容时有点困惑,所以我重新编写了代码。请问代码应该是什么样子的?
  • 这是您的message 事件处理程序的全部内容吗? afk的范围是什么?
  • 您在第一个区块中遇到的问题到底在哪里?您的预期输出究竟是什么?
  • @AuxTaco 这不是全部内容,我只想让机器人运行 if (message.content.includes(config.ownerID)) { message.reply("X is away. Try again later."); } 仅当我运行 afk on 并且如果我运行 afk off 它将不会运行

标签: javascript node.js bots discord discord.js


【解决方案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 机器人也会继续回答
猜你喜欢
  • 2021-09-14
  • 1970-01-01
  • 2017-11-16
  • 2017-04-14
  • 2022-01-24
  • 2017-09-06
  • 1970-01-01
  • 1970-01-01
  • 2020-02-28
相关资源
最近更新 更多