不和谐的js,欺骗一个提到的用户

时间:2019-10-22 01:30:55

标签: javascript discord discord.js

我可能误解了members对象在这里返回的内容,但是我试图在我的机器人中测试deafen命令-discord.js的文档指出{ {1}}对象包含一个Message属性,该属性保存已发送消息中的所有有效提及,从那里,我可以进一步深入并从{{1}内进入Mentions属性}-返回消息中已经提到的Members的集合-这就是我想要的。当我尝试从返回的集合中获取那些Mentions对象时,就会出现问题-我不太确定自己在做什么错,但是却得到了错误。我的代码如下:

GuildMembers

然后我在终端窗口中得到此错误:

GuildMember

我不确定是否有必要,但是我可以发布与此相关的其他代码-可以在here

中找到discord.js的文档。

1 个答案:

答案 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);
}