const { SlashCommandBuilder, EmbedBuilder, PermissionsBitField } = require('discord.js'); module.exports = { data: new SlashCommandBuilder() .setName('roleinfo') .setDescription('Provides information about the targetted role.') .addRoleOption(option => option .setName('role') .setDescription('Which role are you checking?') .setRequired(true)) .setDMPermission(false), async execute(interaction) { const role = interaction.options.getRole('role'); const role_color = role.hexColor !== '#000000' ? role.hexColor : '#99aab5'; const role_color_url_safe = role_color.toString().replace('#', ''); const formattedCreationDate = ``; let managed = role.managed ? 'True' : 'False'; let managed_description = ''; if (managed == 'True') { if (role.tags.botId) { managed_description += `\n**Management Type:** Managed Bot Role\n**Managed By:** <@${String(role.tags.botId)}>`; } else if (role.tags.premiumSubscriberRole) { managed_description += '\n**Management Type:** Nitro Booster Role'; } else if (role.tags.guildConnections) { managed_description += '\n**Management Type:** Guild Connections Role'; } else if (role.tags.availableForPurchase) { managed_description += '\n**Management Type:** Subscription Role'; } } managed += managed_description; const embed = new EmbedBuilder() .setColor(role_color) .setTitle(role.name) .setDescription(`**ID:** ${role.id}\n**Mention:** ${role}\n**Creation Date:** ${formattedCreationDate}\n**Color:** [${role_color}](https://www.color-hex.com/color/${role_color_url_safe})\n**Hoisted:** ${role.hoist ? 'True' : 'False'}\n**Position:** ${role.position}\n **Managed:** ${managed}\n**Mentionable:** ${role.mentionable ? 'True' : 'False'}\n**Administrator:** ${role.permissions.has([PermissionsBitField.Flags.Administrator]) ? 'True' : 'False'}`); if (role.icon) { embed.setThumbnail(role.iconURL()); } else if (role.unicodeEmoji) { embed.setThumbnail(await fetchTwemoji(role.unicodeEmoji)); } await interaction.reply({ embeds: [embed], ephemeral: true }); }, }; async function fetchTwemoji(unicodeEmoji) { const base_url = 'https://cdn.jsdelivr.net/gh/jdecked/twemoji@latest/assets/72x72/'; const emojiCodepoint = unicodeEmoji.split('').map(char => char.charCodeAt(0).toString(16)).join('-'); const segments = emojiCodepoint.split('-'); const validSegments = segments.filter(seg => seg.length >= 4); const emojiUrl = `${base_url}${validSegments[0]}.png`; return emojiUrl; }