feat(roleinfo): introduced roleinfo command
This commit is contained in:
parent
20ebc7ee90
commit
6e2af93db4
1 changed files with 52 additions and 0 deletions
52
commands/utilities/roleinfo.js
Normal file
52
commands/utilities/roleinfo.js
Normal file
|
@ -0,0 +1,52 @@
|
|||
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;
|
||||
}
|
Loading…
Reference in a new issue