如何将Discord用户名与鉴别器转换为ID以实现Webhook提及?
解决Discord.js Webhook通过用户名触发用户提及的问题
核心原因
Discord的消息提及机制仅支持基于用户ID的语法(<@用户ID>),直接发送@username#1234只会被当作普通文本渲染,无法触发蓝色提及样式和通知——因为Discord不会通过用户名+鉴别器来解析提及目标。
可行解决方案
要实现通过用户名自动触发提及,必须先将用户名+鉴别器转换为用户ID,具体步骤如下:
1. 借助Discord Bot获取用户ID
Webhook本身没有查询用户信息的权限,需要搭配一个已加入目标服务器的Discord Bot(需拥有GUILD_MEMBERS权限),通过Bot检索服务器成员列表匹配目标用户:
// 假设你已获取Webhook所在的Guild对象 const targetUsername = "username"; const targetDiscriminator = "1234"; // 从服务器成员缓存中匹配用户 const matchedMember = guild.members.cache.find(member => member.user.username === targetUsername && member.user.discriminator === targetDiscriminator ); if (matchedMember) { // 使用用户ID发送标准提及 webhook.send(`<@${matchedMember.user.id}>`); } else { // 目标用户不在当前服务器,无法获取ID,只能发送文本提示 webhook.send(`无法找到用户 @${targetUsername}#${targetDiscriminator}`); }
2. 注意事项
- 若目标用户不在Webhook所在的服务器,Bot无法获取其ID,这种情况下无法触发官方提及,只能显示文本。
- 针对Discord新注册用户(无鉴别器,鉴别器统一为
0),只需匹配用户名即可,但仍需转换为ID才能触发提及。
不存在的捷径
目前Discord没有提供直接通过用户名+鉴别器发送提及的语法,所有有效提及都必须基于用户ID实现。
内容的提问来源于stack exchange,提问作者0x6f6b
相关产品推荐
相关产品推荐

