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

Discord.JS 13 slash命令在embed中展示目标用户指定角色实现咨询

Discord.JS v13 /profile斜杠命令实现用户DM状态展示修改方案

修改点说明

  • 修复原代码变量命名冲突问题:同一作用域先后声明两次member变量,将目标用户的成员变量重命名为targetMember避免运行报错
  • 将回复消息的ephemeral参数调整为true,满足开发阶段仅触发者可见的需求
  • 替换原有测试角色判断逻辑,新增三个DM状态角色的匹配规则,匹配成功后在Embed中插入对应状态字段
  • 移除原代码中不必要的外部链接,符合使用要求

具体修改步骤

  1. 替换原代码中的测试角色判断逻辑:
    原逻辑:
if (roles.cache.find(r => r.id === "893330818624282656"))
{
    embeduserinfo.addField("test")
}

替换为新的DM状态判断逻辑:

// DM状态角色判断逻辑
let dmStatus = "未知状态";
if (roles.cache.has("123456789")) { // DMS OPEN角色ID
    dmStatus = "DMS ARE OPEN";
} else if (roles.cache.has("123456788")) { // DMS ASK角色ID
    dmStatus = "YOU MUST ASKED TO DM IN #CHANNEL";
} else if (roles.cache.has("123456787")) { // DMS CLOSED角色ID
    dmStatus = "DMS ARE CLOSED";
}
// 将DM状态添加到Embed中
embeduserinfo.addField('**❱ DM状态:**', `\`${dmStatus}\``, false);
  1. 修改回复参数
    找到原回复语句:
interaction.reply({embeds: [embeduserinfo], ephemeral: false})

将ephemeral参数改为true:

interaction.reply({embeds: [embeduserinfo], ephemeral: true})

完整修改后代码

run: async (client, interaction) => {
try{
    const { member, channelId, guildId, applicationId, 
            commandName, deferred, replied, ephemeral, 
            options, id, createdTimestamp , roles, cache
    } = interaction; 
    const { guild } = member;
    let UserOption = options.getUser("which_user");
    if(!UserOption) UserOption = member.user;
    try{
        await guild.members.fetch();
        const targetMember = guild.members.cache.get(UserOption.id);
        const roles = targetMember.roles;
        const userFlags = UserOption.flags.toArray();
        const activity = UserOption.presence?.activities[0];
        // 创建Embed
        const embeduserinfo = new MessageEmbed()
        embeduserinfo.setThumbnail(targetMember.user.displayAvatarURL({ dynamic: true, size: 512 }))
        embeduserinfo.setAuthor("Information about:   " + targetMember.user.username + "#" + targetMember.user.discriminator, targetMember.user.displayAvatarURL({ dynamic: true }))
        embeduserinfo.addField('**❱ Username:**',`<@${targetMember.user.id}>\n\`${targetMember.user.tag}\``,true)
        embeduserinfo.addField('**❱ Avatar:**',`[\`Link to avatar\`](${targetMember.user.displayAvatarURL({ format: "png" })})`,true)
        embeduserinfo.addField('**❱ Joined Discord:**', "\`"+moment(targetMember.user.createdTimestamp).format("DD/MM/YYYY") + "\`\n" + "`"+ moment(targetMember.user.createdTimestamp).format("hh:mm:ss") + "\`",true)
        embeduserinfo.addField('**❱ Joined MetroVan:**', "\`"+moment(targetMember.joinedTimestamp).format("DD/MM/YYYY") + "\`\n" + "`"+ moment(targetMember.joinedTimestamp).format("hh:mm:ss")+ "\`",true)
        
        // DM状态角色判断逻辑
        let dmStatus = "未知状态";
        if (roles.cache.has("123456789")) { // DMS OPEN角色ID
            dmStatus = "DMS ARE OPEN";
        } else if (roles.cache.has("123456788")) { // DMS ASK角色ID
            dmStatus = "YOU MUST ASKED TO DM IN #CHANNEL";
        } else if (roles.cache.has("123456787")) { // DMS CLOSED角色ID
            dmStatus = "DMS ARE CLOSED";
        }
        embeduserinfo.addField('**❱ DM状态:**', `\`${dmStatus}\``, false);

        embeduserinfo.setColor(ee.color)
        embeduserinfo.setFooter(ee.footertext, ee.footericon)
        // 发送Embed
        interaction.reply({embeds: [embeduserinfo], ephemeral: true})
      }catch (e){
        console.log(e)
      }
} catch (e) {
    console.log(String(e.stack).bgRed)
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 00:57:03