Discord.JS 13 斜杠命令显示目标用户的特定用户角色并嵌入,

Posted

技术标签:

【中文标题】Discord.JS 13 斜杠命令显示目标用户的特定用户角色并嵌入,【英文标题】:Discord.JS 13 slash command display a targets users specific user role in and embed, 【发布时间】:2021-11-24 12:27:42 【问题描述】:

我正在尝试制作一个斜杠命令,该命令在发出命令时显示用户的特定角色。

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 member = guild.members.cache.get(UserOption.id);
        const roles = member.roles;
        const userFlags = UserOption.flags.toArray();
        const activity = UserOption.presence?.activities[0];
        //create the EMBED
        const embeduserinfo = new MessageEmbed()
        embeduserinfo.setThumbnail(member.user.displayAvatarURL( dynamic: true, size: 512 ))
        embeduserinfo.setAuthor("Information about:   " + member.user.username + "#" + member.user.discriminator, member.user.displayAvatarURL( dynamic: true ), "https://discord.gg/FQGXbypRf8")
        embeduserinfo.addField('**❱ Username:**',`<@$member.user.id>\n\`$member.user.tag\``,true)
        //embeduserinfo.addField('**❱ ID:**',`\`$member.id\``,true)
        embeduserinfo.addField('**❱ Avatar:**',`[\`Link to avatar\`]($member.user.displayAvatarURL( format: "png" ))`,true)
        embeduserinfo.addField('**❱ Joined Discord:**', "\`"+moment(member.user.createdTimestamp).format("DD/MM/YYYY") + "\`\n" + "`"+ moment(member.user.createdTimestamp).format("hh:mm:ss") + "\`",true)
        embeduserinfo.addField('**❱ Joined MetroVan:**', "\`"+moment(member.joinedTimestamp).format("DD/MM/YYYY") + "\`\n" + "`"+ moment(member.joinedTimestamp).format("hh:mm:ss")+ "\`",true)
        //embeduserinfo.addField(`❱ [$roles.cache.size] Roles: `, roles.cache.size < 25 ? Array.from(roles.cache.values()).sort((a, b) => b.rawPosition - a.rawPosition).map(role => `<@&$role.id>`).join(', ') : roles.cache.size > 25 ? trimArray(roles.cache) : 'None')
        if (roles.cache.find(r => r.id === "893330818624282656"))
        
            embeduserinfo.addField("test")
        
        embeduserinfo.setColor(ee.color)
        embeduserinfo.setFooter(ee.footertext, ee.footericon)
        //send the EMBED
        interaction.reply(embeds: [embeduserinfo], ephemeral: false)
      catch (e)
        console.log(e)
      
 catch (e) 
    console.log(String(e.stack).bgRed)

如果目标成员的角色为 893330818624282656,则显示此 embed.addField

        if (roles.cache.find(r => r.id === "893330818624282656"))
    
        embeduserinfo.addField("test")
    

一步一步的目标

用户 1 使用斜杠命令查看用户 2 的个人资料

用户 1 执行斜杠命令 /profile @user2

一个嵌入被发送到执行命令的通道,并带有 ephemeral: true (一旦编程完成就更改代码)

用户 2 将拥有三个角色之一。

123456789 / 123456788 / 123456787

DMS 打开/DMS 询问/DMS 关闭

Embed 将三个角色之一显示为

DMS 已打开 您必须要求在#CHANNEL 中私信 DMS 已关闭

【问题讨论】:

很难说出你想要什么 - 请澄清你的目标以及你现在做的事情是如何行不通的 有什么问题?从表面上看,您的代码看起来不错 对于上下文,当此代码在服务器 RangeError [EMBED_FIELD_VALUE] 上执行时,我得到一个错误:MessageEmbed 字段值必须是非空字符串。 【参考方案1】:

这就是问题

embeduserinfo.addField("test")

test是字段名但没有值

如果要添加不会引发错误的空值,请执行以下操作:

embeduserinfo.addField("test", "** **")

或者,如果您想将其设为空名称,只需反转参数即可。否则,您应该将其设置为应具有的值。

【讨论】:

以上是关于Discord.JS 13 斜杠命令显示目标用户的特定用户角色并嵌入,的主要内容,如果未能解决你的问题,请参考以下文章

斜杠命令处理程序中的 Discord.js v13 TypeError

Discord.js v13:斜杠命令重复

无法让 Discord.js 在命令中提及用户

discord.js 发送 DM 以响应用户的斜杠命令

带有斜杠命令的 Discord.js 语音通道

DiscordJS 13用户嵌入显示在特定频道发送的最后一条消息