我正在用机器人设置游戏的开始。人类输入/ 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课程,并且我第一手工作就是最好的方法。
谢谢您的帮助!
答案 0 :(得分:0)
由于botMessages
是一个集合,因此您希望通过执行以下操作从其中获取一个Message对象
botMessages.first()
所以尝试记录类似
botMessages.first().mentions.members.first()