57 lines
2.8 KiB
JavaScript
57 lines
2.8 KiB
JavaScript
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 = `<t:${Math.floor(role.createdTimestamp / 1000)}>`;
|
|
|
|
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;
|
|
}
|