打印用户在 discord.js 中显示用户 ID

Posted

技术标签:

【中文标题】打印用户在 discord.js 中显示用户 ID【英文标题】:Print user is displaying user id in discord.js 【发布时间】: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))) 【参考方案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

【讨论】:

即使邮件中有!,它仍然会变为提及

以上是关于打印用户在 discord.js 中显示用户 ID的主要内容,如果未能解决你的问题,请参考以下文章

Discord.js:将用户 ID(字符串)转换为用户 ID(Snowflake)

Discord.js,通过数组中的 ID 查找用户是不是具有角色

discord.js 如何从用户 ID 获取 Discord 用户名

Discord.js如何使用用户ID获取用户昵称

如何在 discord.js 中通过 id 查找用户

检查 Discord 服务器中是不是存在用户 ID