【发布时间】:2019-07-18 07:24:55
【问题描述】:
我有一个机器人来设置游戏的开始。人类输入 /startbrawl 命令来启动游戏设置(创建套牌对象)。但首先需要确定这两名球员。我从另一个命令发送了一条消息,上面写着“玩家 A 是 @[用户名 A]。玩家 B 是 @[用户名 B]。”在这个游戏发生的频道中。我希望这个新命令中的机器人查看频道中发送的第一条消息,该消息始终是“玩家 A 是等等......”消息(并且总是由机器人发送) 并从中提取两个用户名,以便为这个新命令指定谁是玩家 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: 无法读取 未定义的属性 'first'。
我已将最后一行设为 console.log(botMessages) 以获取有关过滤器找到的消息的所有信息。但是尝试仅提取其中的一部分会导致未定义的问题,或者只是未定义的结果而没有错误。无论哪种方式,有些东西并没有按我认为的那样工作。
我唯一争论过的另一件事是在这个新命令之前从命令中导出变量。播放器 A 和播放器 B 是在用于制作频道的命令中定义的,然后将在其中使用这个新命令。但是,当我在其他实例中使用它时,我从来没有导出变量的运气。我使用命令处理程序,所以我不确定这是否会影响导出变量的工作方式......哪种方法最适合设置纸牌游戏?总的来说,我是一个新手,只是边走边想,所以非常感谢一些建议(除了参加课程,查找基础知识等)。我已经参加了 javascript 的在线课程,并且我最擅长直接弄清楚事情。
提前感谢您的帮助!
【问题讨论】:
-
从错误信息来看,
botMessages.mentions.members是undefined。botMessages.mentions是您所期望的吗?您是否正确引用(检查拼写,确保您不需要使用方法等)? -
我在使用 botMessages.mentions 时收到一条“未定义”的控制台消息。没有错误信息。我很确定我正确地引用了所有内容。
-
botMessages对象的结构如何?你真的打算访问这样的提及吗?你能发布你是如何构造botMessages的吗? -
botMessages 是迄今为止机器人在通道中发送的一条消息的所有信息的集合。它将大量信息打印到控制台。 (i.gyazo.com/72392e56e93d0e5002e6ad4d63ad377e.png 看看它打印的内容)我基本上只需要通过先前发送“玩家 A 是 [用户名],玩家 B 是 [用户名] 的命令”在频道中提到的机器人 (ABBI) 提到的用户名。 "这样我就可以在命令之间保持牌组参考玩家 A 和 B 不变。如果这看起来效率低下(我认为确实如此),请告诉我您将如何处理它。
标签: node.js discord.js