You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

discord.js列取服务器成员时显示ID而非可点击@用户名如何解决

问题修复方案

核心原因

Discord 对内容中的提及格式有严格的校验规则,手动拼接<@用户ID>的方式在Embed内容中容易出现识别失败的问题,同时默认的消息发送配置会限制部分提及的渲染,避免滥用提及功能。

修复步骤

  • 替换手动拼接的提及字符串,直接调用discord.js中GuildMember对象内置的toString()方法,生成符合Discord标准的提及格式
  • 发送消息时补充allowedMentions配置,显式允许用户提及的渲染
  • 若使用discord.js v13及以上版本,确认代码初始化客户端时已显式声明所需的权限位,仅在开发者后台开启Intent不会自动生效

修复后代码示例

const { Client, IntentsBitField } = require('discord.js');

// v14版本客户端初始化示例,v13版本对应使用Intents.FLAGS枚举
const client = new Client({
  intents: [
    IntentsBitField.Flags.Guilds,
    IntentsBitField.Flags.GuildMembers,
    IntentsBitField.Flags.GuildMessages,
    IntentsBitField.Flags.MessageContent,
    IntentsBitField.Flags.GuildPresences
  ]
});

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

    await message.channel.send({ 
      // v13及以上版本Embed需放在embeds数组中,旧版本可保留embed字段
      embeds: [{
        title: 'Members',
        description: members.map(member => member.toString()).join(', ')
      }],
      allowedMentions: {
        // 仅允许解析用户提及,避免误触发全员、角色提及
        parse: ['users']
      }
    });
}

额外注意事项

Embed的description字段最大长度为4096字符,若服务器成员数量过多,内容会被Discord自动截断,也会导致部分提及格式显示异常。该场景下建议拆分多条消息发送,或使用分页组件展示成员列表。


内容的提问来源于stack exchange,提问作者Michal

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.08 12:15:03