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 斜杠命令显示目标用户的特定用户角色并嵌入,的主要内容,如果未能解决你的问题,请参考以下文章