我可能误解了members
对象在这里返回的内容,但是我试图在我的机器人中测试deafen
命令-discord.js的文档指出{ {1}}对象包含一个Message
属性,该属性保存已发送消息中的所有有效提及,从那里,我可以进一步深入并从{{1}内进入Mentions
属性}-返回消息中已经提到的Members
的集合-这就是我想要的。当我尝试从返回的集合中获取那些Mentions
对象时,就会出现问题-我不太确定自己在做什么错,但是却得到了错误。我的代码如下:
GuildMembers
然后我在终端窗口中得到此错误:
GuildMember
我不确定是否有必要,但是我可以发布与此相关的其他代码-可以在here
中找到discord.js的文档。答案 0 :(得分:1)
message.mentions.members
返回一个Collection of GuildMembers and a Snowflake (some unique identifier。集合是Map class的扩展,其中地图是一个数组,每个项目都有一个键和一个值属性。
当在地图上循环时,就像您对for(const member of taggedMembers)
所做的那样,每个项(或您的情况下的member
)都是键和值对。然后,您尝试在该对上调用setDeaf
方法,如您所见,它不起作用。
您想要的是仅遍历集合中的值。使用.forEach
可以轻松完成此操作。我将在下面添加一些示例代码:
taggedMembers.forEach((member) => {
member.setDeaf(true)
.then(() => console.log(`Deafened ${member.displayName}`))
.catch(console.error);
});
试试看,如果遇到其他问题,请通知我。
编辑:正如slothiful在评论中指出的那样,即使在附加了.forEach
之后,使用.catch()
也不会捕获任何Promise拒绝。要解决此问题,您可以使用for ... of
循环,但要破坏该对。在下面的示例中可以看到:
for (let [, member] of taggedMembers) {
member.setDeaf(true)
.then(() => console.log(`Deafened ${member.displayName}`))
.catch(console.error);
}