机器人消息未定义的node.js的消息过滤器

时间:2019-02-24 21:52:31

标签: node.js discord.js

我正在用机器人设置游戏的开始。人类输入/ startbrawl的命令来启动游戏的设置(创建平台对象)。但是首先需要确定两个参与者。我从另一个命令发送了一条消息,说“玩家A是@ [用户名A]。播放器B是@ [用户名B]”。在该游戏发生的频道中。我希望该新命令中的机器人查看该频道中发送的第一条消息,该消息始终是“ Player A is etc ...”消息(并且始终由该机器人发送) )并从中提取两个用户名,以便为此新命令指定谁是玩家A和谁是玩家B。我最近(在尝试了多种尝试之后)拥有的代码是:

if (userInput.startsWith("!startbrawl") === true) {
  message.channel.fetchMessages().then(messages => {
  const botMessages = messages.filter(message => message.author.bot);
    console.log(botMessages.mentions.members.first()) //this will be Player A. I'd repeat same for Player B with .last instead.
  }
}

这给了我一个错误:

  

(节点:15368)UnhandledPromiseRejectionWarning:TypeError:无法读取   属性“第一个”未定义。

我已将最后一行设为console.log(botMessages),以获取有关过滤器找到的消息的所有信息。但是尝试仅提取其中的一部分会带来未定义的问题,或者只是未定义且没有错误的结果。无论哪种方式,我认为我需要的东西都无法正常工作。

我辩论过的唯一另一件事是在此新命令之前从命令中导出变量。播放器A和播放器B是在用于创建此新命令所使用的通道的命令中定义的。但是,在其他实例中使用变量时,我从来没有碰过运气。我使用命令处理程序,所以不确定是否会影响导出变量的工作方式。哪种方法最适合设置纸牌游戏?我是一个新手,通常只是在旅途中解决问题,因此非常感谢一些建议(除了学习课程,查找基础知识等)。我参加了一个在线javascript课程,并且我第一手工作就是最好的方法。

谢谢您的帮助!

1 个答案:

答案 0 :(得分:0)

由于botMessages是一个集合,因此您希望通过执行以下操作从其中获取一个Message对象 botMessages.first()

所以尝试记录类似

botMessages.first().mentions.members.first()