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

message filter for bot's messages undefined node.js

我正在让机器人设置游戏的开头。人类输入 /startbrawl 的命令来启动游戏设置(创建甲板对象)。但首先需要确定这两名球员。我有一条消息从另一个命令发送,在这个游戏正在发生的频道中显示 "Player A is @[username A]. Player B is @[username 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.
  }
}

这给了我一个错误:

(node:15368) UnhandledPromiseRejectionWarning: TypeError: Cannot read property 'first' of undefined.

我将最后一行设置为 console.log(botMessages) 以获取有关过滤器找到的邮件的所有信息。但是试图只提取它的一部分会产生关于未定义的问题,或者只是未定义的结果而没有错误。无论哪种方式,我认为我需要的东西都无法正常工作。

我一直在争论的唯一另一件事是在这个新命令之前从命令中导出变量。播放器 A 和播放器 B 在命令中定义,该命令用于创建随后使用此新命令的通道。但是,当我在其他实例中使用它时,我从来没有成功导出变量。我使用命令处理程序,所以我不确定这是否会影响导出变量的工作方式...哪种方法最适合设置纸牌游戏?一般来说,我是一个新手,只是边走边想,所以非常感谢一些建议(除了参加课程、查找基础知识等)。我参加了 javascript 的在线课程,并且我最擅长第一手解决问题。

提前感谢您的帮助!

由于 botMessages 是一个集合,您希望从中获取 Message 对象,方法是 botMessages.first()

所以尝试记录类似

的内容
botMessages.first().mentions.members.first()