【问题标题】:Discord.JS 13 slash command display a targets users specific user role in and embed,Discord.JS 13 斜杠命令显示目标用户的特定用户角色并嵌入,
【发布时间】: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 字段值必须是非空字符串。

标签: javascript node.js discord.js


【解决方案1】:

这就是问题

embeduserinfo.addField("test")

test是字段名但没有值

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

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

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

【讨论】:

    猜你喜欢
    • 2019-04-14
    • 1970-01-01
    • 2015-10-14
    • 2021-11-11
    • 2021-04-04
    • 2021-11-17
    • 1970-01-01
    • 2020-07-22
    相关资源
    最近更新 更多