aboutsummaryrefslogtreecommitdiff
path: root/src/commands/info/snowflake.ts
diff options
context:
space:
mode:
authorIRONM00N <64110067+IRONM00N@users.noreply.github.com>2021-08-31 21:17:27 -0400
committerIRONM00N <64110067+IRONM00N@users.noreply.github.com>2021-08-31 21:17:27 -0400
commit46bbadd71aa99bc657931971f9f5ad5659f0c17c (patch)
treeb95c77578ca0f7d17405be5f89373de3f91af187 /src/commands/info/snowflake.ts
parentf850b708da87e56f2a1469b65560f8342e2c0f2b (diff)
downloadtanzanite-46bbadd71aa99bc657931971f9f5ad5659f0c17c.tar.gz
tanzanite-46bbadd71aa99bc657931971f9f5ad5659f0c17c.tar.bz2
tanzanite-46bbadd71aa99bc657931971f9f5ad5659f0c17c.zip
refactoring and fixes
Diffstat (limited to 'src/commands/info/snowflake.ts')
-rw-r--r--src/commands/info/snowflake.ts152
1 files changed, 152 insertions, 0 deletions
diff --git a/src/commands/info/snowflake.ts b/src/commands/info/snowflake.ts
new file mode 100644
index 0000000..8d6129b
--- /dev/null
+++ b/src/commands/info/snowflake.ts
@@ -0,0 +1,152 @@
+import {
+ CategoryChannel,
+ Channel,
+ DeconstructedSnowflake,
+ DMChannel,
+ Emoji,
+ Guild,
+ MessageEmbed,
+ NewsChannel,
+ Role,
+ Snowflake,
+ SnowflakeUtil,
+ StageChannel,
+ TextChannel,
+ User,
+ VoiceChannel
+} from 'discord.js';
+import { BushCommand, BushMessage, BushSlashMessage } from '../../lib';
+
+export default class SnowflakeCommand extends BushCommand {
+ public constructor() {
+ super('snowflake', {
+ aliases: ['snowflake', 'info', 'sf'],
+ category: 'info',
+ ratelimit: 4,
+ cooldown: 4000,
+ description: {
+ content: 'Provides information about the specified Snowflake.',
+ usage: 'snowflake <snowflake>',
+ examples: ['snowflake 322862723090219008']
+ },
+ args: [
+ {
+ id: 'snowflake',
+ type: 'snowflake',
+ prompt: {
+ start: 'Enter the snowflake you would like to get information about.',
+ retry: '{error} Choose a valid snowflake.',
+ optional: false
+ }
+ }
+ ],
+ clientPermissions: ['EMBED_LINKS', 'SEND_MESSAGES'],
+ slash: true,
+ slashOptions: [
+ {
+ name: 'snowflake',
+ description: 'The snowflake you would like to get information about.',
+ type: 'STRING',
+ required: true
+ }
+ ]
+ });
+ }
+ public override async exec(message: BushMessage | BushSlashMessage, args: { snowflake: Snowflake }): Promise<unknown> {
+ const snowflake = `${args.snowflake}` as Snowflake;
+ const snowflakeEmbed = new MessageEmbed().setTitle('Unknown :snowflake:').setColor(util.colors.default);
+
+ // Channel
+ if (client.channels.cache.has(snowflake)) {
+ const channel: Channel = client.channels.cache.get(snowflake)!;
+ const channelInfo = [`**Type:** ${channel.type}`];
+ if (['dm', 'group'].includes(channel.type)) {
+ const _channel = channel as DMChannel;
+ channelInfo.push(`**Recipient:** ${_channel.recipient.tag} (${_channel.recipient.id})`);
+ snowflakeEmbed.setTitle(`:snowflake: DM with ${(channel as DMChannel).recipient.tag} \`[Channel]\``);
+ } else if (
+ [
+ 'GUILD_CATEGORY',
+ 'GUILD_NEWS',
+ 'GUILD_TEXT',
+ 'GUILD_VOICE',
+ 'GUILD_STORE',
+ 'GUILD_STAGE_VOICE',
+ 'GUILD_NEWS_THREAD',
+ 'GUILD_PUBLIC_THREAD',
+ 'GUILD_PRIVATE_THREAD'
+ ].includes(channel.type)
+ ) {
+ const _channel = channel as TextChannel | VoiceChannel | NewsChannel | StageChannel | CategoryChannel | StageChannel;
+ channelInfo.push(
+ `**Channel Name:** <#${_channel.id}> (${_channel.name})`,
+ `**Channel's Server:** ${_channel.guild.name} (${_channel.guild.id})`
+ );
+ snowflakeEmbed.setTitle(`:snowflake: ${_channel.name} \`[Channel]\``);
+ }
+ snowflakeEmbed.addField('» Channel Info', channelInfo.join('\n'));
+ }
+
+ // Guild
+ if (client.guilds.cache.has(snowflake)) {
+ const guild: Guild = client.guilds.cache.get(snowflake)!;
+ const guildInfo = [
+ `**Name:** ${guild.name}`,
+ `**Owner:** ${client.users.cache.get(guild.ownerId)?.tag ?? '¯\\_(ツ)_/¯'} (${guild.ownerId})`,
+ `**Members:** ${guild.memberCount?.toLocaleString()}`
+ ];
+ if (guild.icon) snowflakeEmbed.setThumbnail(guild.iconURL({ size: 2048, dynamic: true })!);
+ snowflakeEmbed.addField('» Server Info', guildInfo.join('\n'));
+ snowflakeEmbed.setTitle(`:snowflake: ${guild.name} \`[Server]\``);
+ }
+
+ // User
+ const fetchedUser = await client.users.fetch(`${snowflake}`).catch(() => undefined);
+ if (client.users.cache.has(snowflake) || fetchedUser) {
+ const user: User = (client.users.cache.get(snowflake) ?? fetchedUser)!;
+ const userInfo = [`**Name:** <@${user.id}> (${user.tag})`];
+ if (user.avatar) snowflakeEmbed.setThumbnail(user.avatarURL({ size: 2048, dynamic: true })!);
+ snowflakeEmbed.addField('» User Info', userInfo.join('\n'));
+ snowflakeEmbed.setTitle(`:snowflake: ${user.tag} \`[User]\``);
+ }
+
+ // Emoji
+ if (client.emojis.cache.has(snowflake)) {
+ const emoji: Emoji = client.emojis.cache.get(snowflake)!;
+ const emojiInfo = [`**Name:** ${emoji.name}`, `**Animated:** ${emoji.animated}`];
+ if (emoji.url) snowflakeEmbed.setThumbnail(emoji.url);
+ snowflakeEmbed.addField('» Emoji Info', emojiInfo.join('\n'));
+ snowflakeEmbed.setTitle(`:snowflake: ${emoji.name} \`[Emoji]\``);
+ }
+
+ // Role
+ if (message.guild && message.guild.roles.cache.has(snowflake)) {
+ const role: Role = message.guild.roles.cache.get(snowflake)!;
+ const roleInfo = [
+ `**Name:** <@&${role.id}> (${role.name})`,
+ `**Members:** ${role.members.size}`,
+ `**Hoisted:** ${role.hoist}`,
+ `**Managed:** ${role.managed}`,
+ `**Position:** ${role.position}`,
+ `**Hex Color:** ${role.hexColor}`
+ ];
+ if (role.color) snowflakeEmbed.setColor(role.color);
+ snowflakeEmbed.addField('» Role Info', roleInfo.join('\n'));
+ snowflakeEmbed.setTitle(`:snowflake: ${role.name} \`[Role]\``);
+ }
+
+ // SnowflakeInfo
+ const deconstructedSnowflake: DeconstructedSnowflake = SnowflakeUtil.deconstruct(snowflake);
+ const snowflakeInfo = [
+ `**Timestamp:** ${deconstructedSnowflake.timestamp}`,
+ `**Created:** ${deconstructedSnowflake.date.toLocaleString()}`,
+ `**Worker ID:** ${deconstructedSnowflake.workerId}`,
+ `**Process ID:** ${deconstructedSnowflake.processId}`,
+ `**Increment:** ${deconstructedSnowflake.increment}`
+ // `**Binary:** ${deconstructedSnowflake.binary}`
+ ];
+ snowflakeEmbed.addField('» Snowflake Info', snowflakeInfo.join('\n'));
+
+ return await message.util.reply({ embeds: [snowflakeEmbed] });
+ }
+}