Discord.JS 13 slash命令在embed中展示目标用户指定角色实现咨询
Discord.JS v13 /profile斜杠命令实现用户DM状态展示修改方案
修改点说明
- 修复原代码变量命名冲突问题:同一作用域先后声明两次
member变量,将目标用户的成员变量重命名为targetMember避免运行报错 - 将回复消息的
ephemeral参数调整为true,满足开发阶段仅触发者可见的需求 - 替换原有测试角色判断逻辑,新增三个DM状态角色的匹配规则,匹配成功后在Embed中插入对应状态字段
- 移除原代码中不必要的外部链接,符合使用要求
具体修改步骤
- 替换原代码中的测试角色判断逻辑:
原逻辑:
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);
- 修改回复参数
找到原回复语句:
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
相关产品推荐
相关产品推荐

