打印用户在 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 intent
和Server member intent
。我该如何解决?
【问题讨论】:
尝试为您的消息添加.then
,看看您的机器人是否将其识别为提及 (.then(m => console.log(m.mentions.members.first()?.id))
)
【参考方案1】:
不幸的是,这是不可能的,因为提及显示为 ID 而不是可点击的用户名实际上是 Discord 客户端而不是机器人本身的问题,但确实在未获取用户时发生。如果您重新启动客户端,请查看相关人员发送的消息,然后返回机器人发送的消息,用户名将显示,并且完全有可能显示为您的 ID 的内容正确显示给某人别的。如果有的话,这必须由 Discord 自己解决,并且超出我们作为机器人开发者的控制范围。
【讨论】:
【参考方案2】:我不知道是什么原因造成的,但有些提及以<@!
开头,而不仅仅是<@
。
我建议将该映射函数更改为 members.map(m => 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 查找用户是不是具有角色