【发布时间】: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