【问题标题】:Print user is displaying user id in discord.js打印用户在 discord.js 中显示用户 ID
【发布时间】:2021-10-14 17:49:37
【问题描述】:

我想使用 discord.js 库在 Discord 上列出服务器成员。但是,一些(大部分不活跃的)用户以<@123456789123456789>(他们的id)而不是@Michal(他们的可点击名称和用户配置文件)的形式显示。

可能是因为某些成员未缓存?我尝试在打印之前获取所有成员,即使使用force 选项也是如此。但没有成功。

const executeCommand = async (client, message) => {
    const members = await message.guild.members.fetch({ force: true })

    message.channel.send({ embed: {
        title: 'Members',
        description: members.map(m => `<@${m.id}>`).join(', ')
    } })
}

我的机器人也同时启用了Presence intentServer member intent。我该如何解决?

【问题讨论】:

  • 尝试为您的消息添加.then,看看您的机器人是否将其识别为提及 (.then(m =&gt; console.log(m.mentions.members.first()?.id)))

标签: javascript caching discord discord.js


【解决方案1】:

不幸的是,这是不可能的,因为提及显示为 ID 而不是可点击的用户名实际上是 Discord 客户端而不是机器人本身的问题,但确实在未获取用户时发生。如果您重新启动客户端,请查看相关人员发送的消息,然后返回机器人发送的消息,用户名将显示,并且完全有可能显示为您的 ID 的内容正确显示给某人别的。如果有的话,这必须由 Discord 自己解决,并且超出我们作为机器人开发者的控制范围。

【讨论】:

    【解决方案2】:

    我不知道是什么原因造成的,但有些提及以&lt;@! 开头,而不仅仅是&lt;@

    我建议将该映射函数更改为 members.map(m =&gt; m.toString()),正如您在文档中看到的那样,toString() 方法返回成员的提及字符串。

    https://discord.js.org/#/docs/main/stable/class/GuildMember?scrollTo=toString

    【讨论】:

    • 即使邮件中有!,它仍然会变为提及
    猜你喜欢
    • 1970-01-01
    • 2011-09-24
    • 2019-07-15
    • 2020-07-26
    • 2016-12-14
    • 1970-01-01
    • 1970-01-01
    • 2021-11-01
    • 1970-01-01
    相关资源
    最近更新 更多