aboutsummaryrefslogtreecommitdiff
path: root/src/commands/info
diff options
context:
space:
mode:
authorIRONM00N <64110067+IRONM00N@users.noreply.github.com>2022-06-16 14:32:18 -0400
committerIRONM00N <64110067+IRONM00N@users.noreply.github.com>2022-06-16 14:32:18 -0400
commit0e87bbd3940d89defcb04926587b35c8f4d1947f (patch)
treee50860d4dc25a11d4c3977b583284c4bcad1b077 /src/commands/info
parent661e4c9935aeb8760dafc7ced4bbec6cc356a033 (diff)
downloadtanzanite-0e87bbd3940d89defcb04926587b35c8f4d1947f.tar.gz
tanzanite-0e87bbd3940d89defcb04926587b35c8f4d1947f.tar.bz2
tanzanite-0e87bbd3940d89defcb04926587b35c8f4d1947f.zip
remove util classes, move config out of src
Diffstat (limited to 'src/commands/info')
-rw-r--r--src/commands/info/avatar.ts8
-rw-r--r--src/commands/info/botInfo.ts23
-rw-r--r--src/commands/info/color.ts22
-rw-r--r--src/commands/info/guildInfo.ts50
-rw-r--r--src/commands/info/help.ts27
-rw-r--r--src/commands/info/icon.ts10
-rw-r--r--src/commands/info/links.ts6
-rw-r--r--src/commands/info/ping.ts10
-rw-r--r--src/commands/info/pronouns.ts26
-rw-r--r--src/commands/info/snowflake.ts49
-rw-r--r--src/commands/info/userInfo.ts81
11 files changed, 190 insertions, 122 deletions
diff --git a/src/commands/info/avatar.ts b/src/commands/info/avatar.ts
index 544c30a..3eae98c 100644
--- a/src/commands/info/avatar.ts
+++ b/src/commands/info/avatar.ts
@@ -1,4 +1,4 @@
-import { BushCommand, type CommandMessage, type OptArgType, type SlashMessage } from '#lib';
+import { Arg, BushCommand, clientSendAndPermCheck, colors, type CommandMessage, type OptArgType, type SlashMessage } from '#lib';
import { ApplicationCommandOptionType, EmbedBuilder, GuildMember, PermissionFlagsBits } from 'discord.js';
export default class AvatarCommand extends BushCommand {
@@ -13,7 +13,7 @@ export default class AvatarCommand extends BushCommand {
{
id: 'user',
description: 'The user you would like to find the avatar of.',
- type: util.arg.union('member', 'globalUser'),
+ type: Arg.union('member', 'globalUser'),
readableType: 'member|user',
prompt: 'Who would you like to see the avatar of?',
retry: '{error} Choose a valid user.',
@@ -21,7 +21,7 @@ export default class AvatarCommand extends BushCommand {
slashType: ApplicationCommandOptionType.User
}
],
- clientPermissions: (m) => util.clientSendAndPermCheck(m, [PermissionFlagsBits.EmbedLinks], true),
+ clientPermissions: (m) => clientSendAndPermCheck(m, [PermissionFlagsBits.EmbedLinks], true),
userPermissions: [],
slash: true
});
@@ -37,7 +37,7 @@ export default class AvatarCommand extends BushCommand {
const guildAvatar = member?.avatarURL(params);
- const embed = new EmbedBuilder().setTimestamp().setColor(util.colors.default).setTitle(`${user.tag}'s Avatar`);
+ const embed = new EmbedBuilder().setTimestamp().setColor(colors.default).setTitle(`${user.tag}'s Avatar`);
guildAvatar
? embed.setImage(guildAvatar).setThumbnail(user.avatarURL(params) ?? defaultAvatar)
: embed.setImage(user.avatarURL(params) ?? defaultAvatar);
diff --git a/src/commands/info/botInfo.ts b/src/commands/info/botInfo.ts
index 4a8a36a..decbe04 100644
--- a/src/commands/info/botInfo.ts
+++ b/src/commands/info/botInfo.ts
@@ -1,4 +1,13 @@
-import { BushCommand, type CommandMessage, type SlashMessage } from '#lib';
+import {
+ BushCommand,
+ clientSendAndPermCheck,
+ colors,
+ humanizeDuration,
+ mapIDs,
+ shell,
+ type CommandMessage,
+ type SlashMessage
+} from '#lib';
import assert from 'assert';
import { EmbedBuilder, PermissionFlagsBits, version as discordJSVersion } from 'discord.js';
import * as os from 'os';
@@ -15,7 +24,7 @@ export default class BotInfoCommand extends BushCommand {
usage: ['bot-info'],
examples: ['bot-info'],
slash: true,
- clientPermissions: (m) => util.clientSendAndPermCheck(m, [PermissionFlagsBits.EmbedLinks], true),
+ clientPermissions: (m) => clientSendAndPermCheck(m, [PermissionFlagsBits.EmbedLinks], true),
userPermissions: []
});
}
@@ -35,14 +44,14 @@ export default class BotInfoCommand extends BushCommand {
haiku = 'Haiku'
}
- const developers = (await util.mapIDs(client.config.owners)).map((u) => u?.tag).join('\n');
- const currentCommit = (await util.shell('git rev-parse HEAD')).stdout.replace('\n', '');
- let repoUrl = (await util.shell('git remote get-url origin')).stdout.replace('\n', '');
+ const developers = (await mapIDs(client.config.owners)).map((u) => u?.tag).join('\n');
+ const currentCommit = (await shell('git rev-parse HEAD')).stdout.replace('\n', '');
+ let repoUrl = (await shell('git remote get-url origin')).stdout.replace('\n', '');
if (repoUrl.includes('.git')) repoUrl = repoUrl.substring(0, repoUrl.length - 4);
const embed = new EmbedBuilder()
.setTitle('Bot Info:')
.addFields([
- { name: '**Uptime**', value: util.humanizeDuration(client.uptime!, 2), inline: true },
+ { name: '**Uptime**', value: humanizeDuration(client.uptime!, 2), inline: true },
{
name: '**Memory Usage**',
value: `System: ${prettyBytes(os.totalmem() - os.freemem(), { binary: true })}/${prettyBytes(os.totalmem(), {
@@ -73,7 +82,7 @@ export default class BotInfoCommand extends BushCommand {
{ name: '**Developers**', value: developers, inline: true }
])
.setTimestamp()
- .setColor(util.colors.default);
+ .setColor(colors.default);
await message.util.reply({ embeds: [embed] });
}
}
diff --git a/src/commands/info/color.ts b/src/commands/info/color.ts
index f60e28a..84c4b3c 100644
--- a/src/commands/info/color.ts
+++ b/src/commands/info/color.ts
@@ -1,4 +1,13 @@
-import { AllowedMentions, BushCommand, type ArgType, type CommandMessage, type SlashMessage } from '#lib';
+import {
+ AllowedMentions,
+ Arg,
+ BushCommand,
+ clientSendAndPermCheck,
+ emojis,
+ type ArgType,
+ type CommandMessage,
+ type SlashMessage
+} from '#lib';
import assert from 'assert';
import { ApplicationCommandOptionType, EmbedBuilder, GuildMember, PermissionFlagsBits, Role } from 'discord.js';
import tinycolor from 'tinycolor2';
@@ -16,7 +25,7 @@ export default class ColorCommand extends BushCommand {
{
id: 'color',
description: 'The color string, role, or member to find the color of.',
- type: util.arg.union('tinyColor', 'role', 'member'),
+ type: Arg.union('tinyColor', 'role', 'member'),
readableType: 'color|role|member',
match: 'restContent',
prompt: 'What color code, role, or user would you like to find the color of?',
@@ -25,7 +34,7 @@ export default class ColorCommand extends BushCommand {
}
],
channel: 'guild',
- clientPermissions: (m) => util.clientSendAndPermCheck(m, [PermissionFlagsBits.EmbedLinks], true),
+ clientPermissions: (m) => clientSendAndPermCheck(m, [PermissionFlagsBits.EmbedLinks], true),
userPermissions: []
});
}
@@ -36,10 +45,7 @@ export default class ColorCommand extends BushCommand {
public override async exec(message: CommandMessage | SlashMessage, args: { color: ArgType<'tinyColor' | 'role' | 'member'> }) {
const _color = message.util.isSlashMessage(message)
- ? ((await util.arg.cast(util.arg.union('tinyColor', 'role', 'member'), message, args.color as string)) as
- | string
- | Role
- | GuildMember)
+ ? ((await Arg.cast(Arg.union('tinyColor', 'role', 'member'), message, args.color as string)) as string | Role | GuildMember)
: args.color;
const color =
@@ -51,7 +57,7 @@ export default class ColorCommand extends BushCommand {
if (_color instanceof Role && _color.hexColor === '#000000') {
return await message.util.reply({
- content: `${util.emojis.error} <@&${_color.id}> does not have a color.`,
+ content: `${emojis.error} <@&${_color.id}> does not have a color.`,
allowedMentions: AllowedMentions.none()
});
}
diff --git a/src/commands/info/guildInfo.ts b/src/commands/info/guildInfo.ts
index 572cf06..92999a5 100644
--- a/src/commands/info/guildInfo.ts
+++ b/src/commands/info/guildInfo.ts
@@ -1,9 +1,23 @@
-import { BushCommand, type ArgType, type CommandMessage, type OptArgType, type SlashMessage } from '#lib';
+import {
+ akairo,
+ Arg,
+ BushCommand,
+ clientSendAndPermCheck,
+ colors,
+ emojis,
+ mappings,
+ timestampAndDelta,
+ type ArgType,
+ type CommandMessage,
+ type OptArgType,
+ type SlashMessage
+} from '#lib';
import assert from 'assert';
import {
ApplicationCommandOptionType,
ChannelType,
EmbedBuilder,
+ escapeMarkdown,
Guild,
GuildDefaultMessageNotifications,
GuildExplicitContentFilter,
@@ -29,7 +43,7 @@ export default class GuildInfoCommand extends BushCommand {
{
id: 'guild',
description: 'The guild to find information about.',
- type: util.arg.union('guild', 'snowflake'),
+ type: Arg.union('guild', 'snowflake'),
readableType: 'guild|snowflake',
prompt: 'What server would you like to find information about?',
retry: '{error} Choose a valid server to find information about.',
@@ -38,7 +52,7 @@ export default class GuildInfoCommand extends BushCommand {
}
],
slash: true,
- clientPermissions: (m) => util.clientSendAndPermCheck(m, [PermissionFlagsBits.EmbedLinks], true),
+ clientPermissions: (m) => clientSendAndPermCheck(m, [PermissionFlagsBits.EmbedLinks], true),
userPermissions: []
});
}
@@ -46,7 +60,7 @@ export default class GuildInfoCommand extends BushCommand {
public override async exec(message: CommandMessage | SlashMessage, args: { guild: OptArgType<'guild' | 'snowflake'> }) {
if (!args.guild && !message.inGuild()) {
return await message.util.reply(
- `${util.emojis.error} You must either provide an server to provide info about or run this command in a server.`
+ `${emojis.error} You must either provide an server to provide info about or run this command in a server.`
);
}
@@ -54,7 +68,7 @@ export default class GuildInfoCommand extends BushCommand {
if (typeof guild === 'string') {
const preview = await client.fetchGuildPreview(`${args.guild}` as Snowflake).catch(() => undefined);
if (preview) guild = preview;
- else return await message.util.reply(`${util.emojis.error} That guild is not discoverable or does not exist.`);
+ else return await message.util.reply(`${emojis.error} That guild is not discoverable or does not exist.`);
}
assert(guild);
@@ -63,7 +77,7 @@ export default class GuildInfoCommand extends BushCommand {
await guild.fetch();
}
- const guildInfoEmbed = new EmbedBuilder().setTitle(guild.name).setColor(util.colors.default);
+ const guildInfoEmbed = new EmbedBuilder().setTitle(guild.name).setColor(colors.default);
if (guild.icon) guildInfoEmbed.setThumbnail(guild.iconURL({ size: 2048, extension: 'png' }));
await this.generateAboutField(guildInfoEmbed, guild);
@@ -79,16 +93,16 @@ export default class GuildInfoCommand extends BushCommand {
private generateDescription(embed: EmbedBuilder, guild: Guild | GuildPreview) {
const description: string[] = [];
- const otherEmojis = client.consts.mappings.otherEmojis;
+ const otherEmojis = mappings.otherEmojis;
- const verifiedGuilds = Object.values(client.consts.mappings.guilds);
+ const verifiedGuilds = Object.values(mappings.guilds);
if (verifiedGuilds.includes(guild.id as typeof verifiedGuilds[number])) description.push(otherEmojis.BushVerified);
if (guild instanceof Guild) {
if (guild.premiumTier !== GuildPremiumTier.None) description.push(otherEmojis[`BoostTier${guild.premiumTier}`]);
}
- const features = client.consts.mappings.features;
+ const features = mappings.features;
const guildFeatures = guild.features.sort((a, b): number => {
const aWeight = features[a]?.weight;
const bWeight = features[b]?.weight;
@@ -103,7 +117,7 @@ export default class GuildInfoCommand extends BushCommand {
guildFeatures.forEach((feature) => {
if (features[feature]?.emoji) description.push(`${features[feature].emoji}`);
else if (features[feature]?.name) description.push(`\`${features[feature].name}\``);
- else description.push(`\`${feature.charAt(0) + util.akairo.snakeToCamelCase(feature).substring(1)}\``);
+ else description.push(`\`${feature.charAt(0) + akairo.snakeToCamelCase(feature).substring(1)}\``);
});
}
@@ -125,12 +139,12 @@ export default class GuildInfoCommand extends BushCommand {
] as RTCRegion[];
guildAbout.push(
- `**Owner:** ${util.discord.escapeMarkdown(guild.members.cache.get(guild.ownerId)?.user.tag ?? '¯\\_(ツ)_/¯')}`,
- `**Created** ${util.timestampAndDelta(guild.createdAt, 'd')}`,
- `**Members:** ${guild.memberCount.toLocaleString() ?? 0} (${util.emojis.onlineCircle} ${
+ `**Owner:** ${escapeMarkdown(guild.members.cache.get(guild.ownerId)?.user.tag ?? '¯\\_(ツ)_/¯')}`,
+ `**Created** ${timestampAndDelta(guild.createdAt, 'd')}`,
+ `**Members:** ${guild.memberCount.toLocaleString() ?? 0} (${emojis.onlineCircle} ${
guild.approximatePresenceCount?.toLocaleString() ?? 0
- }, ${util.emojis.offlineCircle} ${(guild.memberCount - (guild.approximatePresenceCount ?? 0)).toLocaleString() ?? 0})`,
- `**Regions:** ${guildRegions.map((region) => client.consts.mappings.regions[region] || region).join(', ')}`
+ }, ${emojis.offlineCircle} ${(guild.memberCount - (guild.approximatePresenceCount ?? 0)).toLocaleString() ?? 0})`,
+ `**Regions:** ${guildRegions.map((region) => mappings.regions[region] || region).join(', ')}`
);
if (guild.premiumSubscriptionCount)
guildAbout.push(`**Boosts:** Level ${guild.premiumTier} with ${guild.premiumSubscriptionCount ?? 0} boosts`);
@@ -144,9 +158,9 @@ export default class GuildInfoCommand extends BushCommand {
if (guild.splash) guildAbout.push(`**Splash:** [link](${guild.splashURL({ size: 4096, extension: 'png' })})`);
} else {
guildAbout.push(
- `**Members:** ${guild.approximateMemberCount?.toLocaleString() ?? 0} (${util.emojis.onlineCircle} ${
+ `**Members:** ${guild.approximateMemberCount?.toLocaleString() ?? 0} (${emojis.onlineCircle} ${
guild.approximatePresenceCount?.toLocaleString() ?? 0
- }, ${util.emojis.offlineCircle} ${(
+ }, ${emojis.offlineCircle} ${(
(guild.approximateMemberCount ?? 0) - (guild.approximatePresenceCount ?? 0)
).toLocaleString()})`,
`**Emojis:** ${(guild as GuildPreview).emojis.size?.toLocaleString() ?? 0}`,
@@ -173,7 +187,7 @@ export default class GuildInfoCommand extends BushCommand {
] as const
).map(
(type) =>
- `${client.consts.mappings.otherEmojis[`Channel${type[0]}`]} ${guild.channels.cache
+ `${mappings.otherEmojis[`Channel${type[0]}`]} ${guild.channels.cache
.filter((channel) => type[1].some((type) => channel.type === type))
.size.toLocaleString()}`
);
diff --git a/src/commands/info/help.ts b/src/commands/info/help.ts
index af44980..051fce5 100644
--- a/src/commands/info/help.ts
+++ b/src/commands/info/help.ts
@@ -1,4 +1,15 @@
-import { BushCommand, type ArgType, type CommandMessage, type OptArgType, type SlashMessage } from '#lib';
+import {
+ BushCommand,
+ clientSendAndPermCheck,
+ colors,
+ format,
+ invite,
+ prefix,
+ type ArgType,
+ type CommandMessage,
+ type OptArgType,
+ type SlashMessage
+} from '#lib';
import assert from 'assert';
import {
ActionRowBuilder,
@@ -48,7 +59,7 @@ export default class HelpCommand extends BushCommand {
}
],
slash: true,
- clientPermissions: (m) => util.clientSendAndPermCheck(m, [PermissionFlagsBits.EmbedLinks], true),
+ clientPermissions: (m) => clientSendAndPermCheck(m, [PermissionFlagsBits.EmbedLinks], true),
userPermissions: []
});
}
@@ -71,11 +82,11 @@ export default class HelpCommand extends BushCommand {
}
private helpAll(message: CommandMessage | SlashMessage, args: HelpArgs, row: ActionRowBuilder<ButtonBuilder>) {
- const prefix = util.prefix(message);
+ const prefix_ = prefix(message);
const embed = new EmbedBuilder()
- .setColor(util.colors.default)
+ .setColor(colors.default)
.setTimestamp()
- .setFooter({ text: `For more information about a command use ${prefix}help <command>` });
+ .setFooter({ text: `For more information about a command use ${prefix_}help <command>` });
for (const [, category] of this.handler.categories) {
const categoryFilter = category.filter((command) => {
if (command.pseudo) return false;
@@ -100,7 +111,7 @@ export default class HelpCommand extends BushCommand {
}
private helpIndividual(message: CommandMessage | SlashMessage, row: ActionRowBuilder<ButtonBuilder>, command: BushCommand) {
- const embed = new EmbedBuilder().setColor(util.colors.default).setTitle(`${command.id} Command`);
+ const embed = new EmbedBuilder().setColor(colors.default).setTitle(`${command.id} Command`);
let description = `${command.description ?? '*This command does not have a description.*'}`;
if (command.note) description += `\n\n${command.note}`;
@@ -200,7 +211,7 @@ export default class HelpCommand extends BushCommand {
if (command.restrictedGuilds?.length)
restrictions.push(
`__Restricted Servers__: ${command.restrictedGuilds
- .map((g) => util.format.inlineCode(client.guilds.cache.find((g1) => g1.id === g)?.name ?? 'Unknown'))
+ .map((g) => format.inlineCode(client.guilds.cache.find((g1) => g1.id === g)?.name ?? 'Unknown'))
.join(' ')}`
);
if (restrictions.length) embed.addFields([{ name: '» Restrictions', value: restrictions.join('\n') }]);
@@ -211,7 +222,7 @@ export default class HelpCommand extends BushCommand {
const row = new ActionRowBuilder<ButtonBuilder>();
if (!client.config.isDevelopment && !client.guilds.cache.some((guild) => guild.ownerId === message.author.id)) {
- row.addComponents([new ButtonBuilder({ style: ButtonStyle.Link, label: 'Invite Me', url: util.invite })]);
+ row.addComponents([new ButtonBuilder({ style: ButtonStyle.Link, label: 'Invite Me', url: invite(this.client) })]);
}
if (!client.guilds.cache.get(client.config.supportGuild.id)?.members.cache.has(message.author.id)) {
row.addComponents([
diff --git a/src/commands/info/icon.ts b/src/commands/info/icon.ts
index 9c9556b..e66f900 100644
--- a/src/commands/info/icon.ts
+++ b/src/commands/info/icon.ts
@@ -1,6 +1,6 @@
-import { BushCommand, type CommandMessage, type SlashMessage } from '#lib';
+import { BushCommand, clientSendAndPermCheck, colors, type CommandMessage, type SlashMessage } from '#lib';
import assert from 'assert';
-import { EmbedBuilder, PermissionFlagsBits } from 'discord.js';
+import { EmbedBuilder, escapeMarkdown, PermissionFlagsBits } from 'discord.js';
export default class IconCommand extends BushCommand {
public constructor() {
@@ -10,7 +10,7 @@ export default class IconCommand extends BushCommand {
description: "A command to get the server's icon",
usage: ['icon'],
examples: ['icon'],
- clientPermissions: (m) => util.clientSendAndPermCheck(m, [PermissionFlagsBits.EmbedLinks], true),
+ clientPermissions: (m) => clientSendAndPermCheck(m, [PermissionFlagsBits.EmbedLinks], true),
userPermissions: [],
channel: 'guild',
slash: true
@@ -22,14 +22,14 @@ export default class IconCommand extends BushCommand {
const embed = new EmbedBuilder()
.setTimestamp()
- .setColor(util.colors.default)
+ .setColor(colors.default)
.setImage(
message.guild.iconURL({
size: 2048,
extension: 'png'
})!
)
- .setTitle(util.discord.escapeMarkdown(message.guild.name));
+ .setTitle(escapeMarkdown(message.guild.name));
await message.util.reply({ embeds: [embed] });
}
}
diff --git a/src/commands/info/links.ts b/src/commands/info/links.ts
index 0d5bd15..a7ff30e 100644
--- a/src/commands/info/links.ts
+++ b/src/commands/info/links.ts
@@ -1,4 +1,4 @@
-import { BushCommand, type CommandMessage, type SlashMessage } from '#lib';
+import { BushCommand, clientSendAndPermCheck, invite, type CommandMessage, type SlashMessage } from '#lib';
import assert from 'assert';
import { ActionRowBuilder, ButtonBuilder, ButtonStyle } from 'discord.js';
import packageDotJSON from '../../../package.json' assert { type: 'json' };
@@ -13,7 +13,7 @@ export default class LinksCommand extends BushCommand {
description: 'Sends bot links',
usage: ['links'],
examples: ['links'],
- clientPermissions: (m) => util.clientSendAndPermCheck(m),
+ clientPermissions: (m) => clientSendAndPermCheck(m),
userPermissions: [],
slash: true
});
@@ -22,7 +22,7 @@ export default class LinksCommand extends BushCommand {
public override async exec(message: CommandMessage | SlashMessage) {
const buttonRow = new ActionRowBuilder<ButtonBuilder>();
if (!client.config.isDevelopment || message.author.isOwner()) {
- buttonRow.addComponents([new ButtonBuilder({ style: ButtonStyle.Link, label: 'Invite Me', url: util.invite })]);
+ buttonRow.addComponents([new ButtonBuilder({ style: ButtonStyle.Link, label: 'Invite Me', url: invite(this.client) })]);
}
buttonRow.addComponents([
new ButtonBuilder({ style: ButtonStyle.Link, label: 'Support Server', url: client.config.supportGuild.invite }),
diff --git a/src/commands/info/ping.ts b/src/commands/info/ping.ts
index ad7fdcc..060b1f6 100644
--- a/src/commands/info/ping.ts
+++ b/src/commands/info/ping.ts
@@ -1,4 +1,4 @@
-import { BushCommand, type CommandMessage, type SlashMessage } from '#lib';
+import { BushCommand, clientSendAndPermCheck, colors, format, type CommandMessage, type SlashMessage } from '#lib';
import { EmbedBuilder, PermissionFlagsBits, type Message } from 'discord.js';
export default class PingCommand extends BushCommand {
@@ -10,7 +10,7 @@ export default class PingCommand extends BushCommand {
usage: ['ping'],
examples: ['ping'],
slash: true,
- clientPermissions: (m) => util.clientSendAndPermCheck(m, [PermissionFlagsBits.EmbedLinks], true),
+ clientPermissions: (m) => clientSendAndPermCheck(m, [PermissionFlagsBits.EmbedLinks], true),
userPermissions: []
});
}
@@ -30,8 +30,8 @@ export default class PingCommand extends BushCommand {
}
private command(message: CommandMessage | SlashMessage, msgLatency: number) {
- const botLatency = util.format.codeBlock(`${Math.round(msgLatency)}ms`);
- const apiLatency = util.format.codeBlock(`${Math.round(message.client.ws.ping)}ms`);
+ const botLatency = format.codeBlock(`${Math.round(msgLatency)}ms`);
+ const apiLatency = format.codeBlock(`${Math.round(message.client.ws.ping)}ms`);
const embed = new EmbedBuilder()
.setTitle('Pong! 🏓')
.addFields([
@@ -39,7 +39,7 @@ export default class PingCommand extends BushCommand {
{ name: 'API Latency', value: apiLatency, inline: true }
])
.setFooter({ text: message.author.username, iconURL: message.author.displayAvatarURL() })
- .setColor(util.colors.default)
+ .setColor(colors.default)
.setTimestamp();
return message.util.reply({
content: null,
diff --git a/src/commands/info/pronouns.ts b/src/commands/info/pronouns.ts
index f916687..e87ca1f 100644
--- a/src/commands/info/pronouns.ts
+++ b/src/commands/info/pronouns.ts
@@ -1,5 +1,13 @@
-import { AllowedMentions, BushCommand, type CommandMessage, type OptArgType, type SlashMessage } from '#lib';
-import { ApplicationCommandOptionType, EmbedBuilder, PermissionFlagsBits } from 'discord.js';
+import {
+ AllowedMentions,
+ BushCommand,
+ clientSendAndPermCheck,
+ getPronounsOf,
+ type CommandMessage,
+ type OptArgType,
+ type SlashMessage
+} from '#lib';
+import { ApplicationCommandOptionType, EmbedBuilder, escapeMarkdown, PermissionFlagsBits } from 'discord.js';
export default class PronounsCommand extends BushCommand {
public constructor() {
@@ -20,7 +28,7 @@ export default class PronounsCommand extends BushCommand {
slashType: ApplicationCommandOptionType.User
}
],
- clientPermissions: (m) => util.clientSendAndPermCheck(m, [PermissionFlagsBits.EmbedLinks], true),
+ clientPermissions: (m) => clientSendAndPermCheck(m, [PermissionFlagsBits.EmbedLinks], true),
userPermissions: [],
slash: true
});
@@ -32,21 +40,19 @@ export default class PronounsCommand extends BushCommand {
if (message.util.isSlashMessage(message)) await message.interaction.deferReply();
- const pronouns = await util.getPronounsOf(user);
+ const pronouns = await getPronounsOf(user);
if (!pronouns) {
return await message.util.reply({
- content: `${
- author ? 'You do' : `${util.discord.escapeMarkdown(user.tag)} does`
- } not appear to have any pronouns set. Please${author ? '' : ' tell them to'} go to https://pronoundb.org/ and set ${
- author ? 'your' : 'their'
- } pronouns.`,
+ content: `${author ? 'You do' : `${escapeMarkdown(user.tag)} does`} not appear to have any pronouns set. Please${
+ author ? '' : ' tell them to'
+ } go to https://pronoundb.org/ and set ${author ? 'your' : 'their'} pronouns.`,
allowedMentions: AllowedMentions.none()
});
} else {
return await message.util.reply({
embeds: [
new EmbedBuilder({
- title: `${author ? 'Your' : `${util.discord.escapeMarkdown(user.tag)}'s`} pronouns:`,
+ title: `${author ? 'Your' : `${escapeMarkdown(user.tag)}'s`} pronouns:`,
description: pronouns,
footer: {
text: 'Data provided by https://pronoundb.org/'
diff --git a/src/commands/info/snowflake.ts b/src/commands/info/snowflake.ts
index e74756f..a28f4c5 100644
--- a/src/commands/info/snowflake.ts
+++ b/src/commands/info/snowflake.ts
@@ -1,9 +1,18 @@
-import { BushCommand, type ArgType, type CommandMessage, type SlashMessage } from '#lib';
+import {
+ BushCommand,
+ clientSendAndPermCheck,
+ colors,
+ timestamp,
+ type ArgType,
+ type CommandMessage,
+ type SlashMessage
+} from '#lib';
import { stripIndent } from '#tags';
import {
ApplicationCommandOptionType,
ChannelType,
EmbedBuilder,
+ escapeMarkdown,
PermissionFlagsBits,
SnowflakeUtil,
type DeconstructedSnowflake,
@@ -31,7 +40,7 @@ export default class SnowflakeCommand extends BushCommand {
slashType: ApplicationCommandOptionType.String
}
],
- clientPermissions: (m) => util.clientSendAndPermCheck(m, [PermissionFlagsBits.EmbedLinks], true),
+ clientPermissions: (m) => clientSendAndPermCheck(m, [PermissionFlagsBits.EmbedLinks], true),
userPermissions: [],
slash: true
});
@@ -39,7 +48,7 @@ export default class SnowflakeCommand extends BushCommand {
public override async exec(message: CommandMessage | SlashMessage, args: { snowflake: ArgType<'snowflake'> }) {
const snowflake = `${args.snowflake}` as Snowflake;
- const snowflakeEmbed = new EmbedBuilder().setTitle('Unknown :snowflake:').setColor(util.colors.default);
+ const snowflakeEmbed = new EmbedBuilder().setTitle('Unknown :snowflake:').setColor(colors.default);
// Channel
if (client.channels.cache.has(snowflake)) {
@@ -47,13 +56,9 @@ export default class SnowflakeCommand extends BushCommand {
const channelInfo = [`**Type:** ${BushChannelType[channel.type] ?? ChannelType[channel.type]}`];
if (channel.type === ChannelType.DM) {
channelInfo.push(
- `**Recipient:** ${util.discord.escapeMarkdown(channel.recipient?.tag ?? '¯\\_(ツ)_/¯')} (${
- channel.recipient?.id ?? '¯\\_(ツ)_/¯'
- })`
- );
- snowflakeEmbed.setTitle(
- `:snowflake: DM with ${util.discord.escapeMarkdown(channel.recipient?.tag ?? '¯\\_(ツ)_/¯')} \`[Channel]\``
+ `**Recipient:** ${escapeMarkdown(channel.recipient?.tag ?? '¯\\_(ツ)_/¯')} (${channel.recipient?.id ?? '¯\\_(ツ)_/¯'})`
);
+ snowflakeEmbed.setTitle(`:snowflake: DM with ${escapeMarkdown(channel.recipient?.tag ?? '¯\\_(ツ)_/¯')} \`[Channel]\``);
} else if (
channel.type === ChannelType.GuildCategory ||
channel.type === ChannelType.GuildNews ||
@@ -63,10 +68,10 @@ export default class SnowflakeCommand extends BushCommand {
channel.isThread()
) {
channelInfo.push(
- `**Channel Name:** <#${channel.id}> (${util.discord.escapeMarkdown(channel.name)})`,
- `**Channel's Server:** ${util.discord.escapeMarkdown(channel.guild.name)} (${channel.guild.id})`
+ `**Channel Name:** <#${channel.id}> (${escapeMarkdown(channel.name)})`,
+ `**Channel's Server:** ${escapeMarkdown(channel.guild.name)} (${channel.guild.id})`
);
- snowflakeEmbed.setTitle(`:snowflake: ${util.discord.escapeMarkdown(channel.name)} \`[Channel]\``);
+ snowflakeEmbed.setTitle(`:snowflake: ${escapeMarkdown(channel.name)} \`[Channel]\``);
}
snowflakeEmbed.addFields([{ name: '» Channel Info', value: channelInfo.join('\n') }]);
}
@@ -75,12 +80,12 @@ export default class SnowflakeCommand extends BushCommand {
if (client.guilds.cache.has(snowflake)) {
const guild: Guild = client.guilds.cache.get(snowflake)!;
const guildInfo = stripIndent`
- **Name:** ${util.discord.escapeMarkdown(guild.name)}
- **Owner:** ${util.discord.escapeMarkdown(client.users.cache.get(guild.ownerId)?.tag ?? '¯\\_(ツ)_/¯')} (${guild.ownerId})
+ **Name:** ${escapeMarkdown(guild.name)}
+ **Owner:** ${escapeMarkdown(client.users.cache.get(guild.ownerId)?.tag ?? '¯\\_(ツ)_/¯')} (${guild.ownerId})
**Members:** ${guild.memberCount?.toLocaleString()}`;
if (guild.icon) snowflakeEmbed.setThumbnail(guild.iconURL({ size: 2048 })!);
snowflakeEmbed.addFields([{ name: '» Server Info', value: guildInfo }]);
- snowflakeEmbed.setTitle(`:snowflake: ${util.discord.escapeMarkdown(guild.name)} \`[Server]\``);
+ snowflakeEmbed.setTitle(`:snowflake: ${escapeMarkdown(guild.name)} \`[Server]\``);
}
// User
@@ -88,28 +93,28 @@ export default class SnowflakeCommand extends BushCommand {
if (client.users.cache.has(snowflake) || fetchedUser) {
const user: User = (client.users.cache.get(snowflake) ?? fetchedUser)!;
const userInfo = stripIndent`
- **Name:** <@${user.id}> (${util.discord.escapeMarkdown(user.tag)})`;
+ **Name:** <@${user.id}> (${escapeMarkdown(user.tag)})`;
if (user.avatar) snowflakeEmbed.setThumbnail(user.avatarURL({ size: 2048 })!);
snowflakeEmbed.addFields([{ name: '» User Info', value: userInfo }]);
- snowflakeEmbed.setTitle(`:snowflake: ${util.discord.escapeMarkdown(user.tag)} \`[User]\``);
+ snowflakeEmbed.setTitle(`:snowflake: ${escapeMarkdown(user.tag)} \`[User]\``);
}
// Emoji
if (client.emojis.cache.has(snowflake)) {
const emoji = client.emojis.cache.get(snowflake)!;
const emojiInfo = stripIndent`
- **Name:** ${util.discord.escapeMarkdown(emoji.name ?? '¯\\_(ツ)_/¯')}
+ **Name:** ${escapeMarkdown(emoji.name ?? '¯\\_(ツ)_/¯')}
**Animated:** ${emoji.animated}`;
if (emoji.url) snowflakeEmbed.setThumbnail(emoji.url);
snowflakeEmbed.addFields([{ name: '» Emoji Info', value: emojiInfo }]);
- snowflakeEmbed.setTitle(`:snowflake: ${util.discord.escapeMarkdown(emoji.name ?? '¯\\_(ツ)_/¯')} \`[Emoji]\``);
+ snowflakeEmbed.setTitle(`:snowflake: ${escapeMarkdown(emoji.name ?? '¯\\_(ツ)_/¯')} \`[Emoji]\``);
}
// Role
if (message.guild && message.guild.roles.cache.has(snowflake)) {
const role: Role = message.guild.roles.cache.get(snowflake)!;
const roleInfo = stripIndent`
- **Name:** <@&${role.id}> (${util.discord.escapeMarkdown(role.name)})
+ **Name:** <@&${role.id}> (${escapeMarkdown(role.name)})
**Members:** ${role.members.size}
**Hoisted:** ${role.hoist}
**Managed:** ${role.managed}
@@ -117,14 +122,14 @@ export default class SnowflakeCommand extends BushCommand {
**Hex Color:** ${role.hexColor}`;
if (role.color) snowflakeEmbed.setColor(role.color);
snowflakeEmbed.addFields([{ name: '» Role Info', value: roleInfo }]);
- snowflakeEmbed.setTitle(`:snowflake: ${util.discord.escapeMarkdown(role.name)} \`[Role]\``);
+ snowflakeEmbed.setTitle(`:snowflake: ${escapeMarkdown(role.name)} \`[Role]\``);
}
// SnowflakeInfo
const deconstructedSnowflake: DeconstructedSnowflake = SnowflakeUtil.deconstruct(snowflake);
const snowflakeInfo = stripIndent`
**Timestamp:** ${deconstructedSnowflake.timestamp}
- **Created:** ${util.timestamp(new Date(Number(deconstructedSnowflake.timestamp)))}
+ **Created:** ${timestamp(new Date(Number(deconstructedSnowflake.timestamp)))}
**Worker ID:** ${deconstructedSnowflake.workerId}
**Process ID:** ${deconstructedSnowflake.processId}
**Increment:** ${deconstructedSnowflake.increment}`;
diff --git a/src/commands/info/userInfo.ts b/src/commands/info/userInfo.ts
index d617756..a39e28a 100644
--- a/src/commands/info/userInfo.ts
+++ b/src/commands/info/userInfo.ts
@@ -1,9 +1,26 @@
-import { BushCommand, Time, type CommandMessage, type OptArgType, type SlashMessage } from '#lib';
+import {
+ Arg,
+ BushCommand,
+ clientSendAndPermCheck,
+ colors,
+ emojis,
+ getPronounsOf,
+ getShared,
+ mappings,
+ oxford,
+ sleep,
+ Time,
+ timestampAndDelta,
+ type CommandMessage,
+ type OptArgType,
+ type SlashMessage
+} from '#lib';
import {
ActivityType,
ApplicationCommandOptionType,
ApplicationFlagsBitField,
EmbedBuilder,
+ escapeMarkdown,
PermissionFlagsBits,
TeamMemberMembershipState,
UserFlags,
@@ -26,7 +43,7 @@ export default class UserInfoCommand extends BushCommand {
{
id: 'user',
description: 'The user you would like to find information about.',
- type: util.arg.union('user', 'snowflake'),
+ type: Arg.union('user', 'snowflake'),
readableType: 'user|snowflake',
prompt: 'What user would you like to find information about?',
retry: '{error} Choose a valid user to find information about.',
@@ -35,7 +52,7 @@ export default class UserInfoCommand extends BushCommand {
}
],
slash: true,
- clientPermissions: (m) => util.clientSendAndPermCheck(m, [PermissionFlagsBits.EmbedLinks], true),
+ clientPermissions: (m) => clientSendAndPermCheck(m, [PermissionFlagsBits.EmbedLinks], true),
userPermissions: []
});
}
@@ -47,7 +64,7 @@ export default class UserInfoCommand extends BushCommand {
: typeof args.user === 'object'
? args.user
: await client.users.fetch(`${args.user}`).catch(() => undefined);
- if (user === undefined) return message.util.reply(`${util.emojis.error} Invalid user.`);
+ if (user === undefined) return message.util.reply(`${emojis.error} Invalid user.`);
const member = message.guild ? await message.guild.members.fetch(user.id).catch(() => undefined) : undefined;
await user.fetch(true); // gets banner info and accent color
@@ -58,23 +75,23 @@ export default class UserInfoCommand extends BushCommand {
public static async makeUserInfoEmbed(user: User, member?: GuildMember, guild?: Guild | null) {
const emojis = [];
- const superUsers = util.getShared('superUsers');
+ const superUsers = getShared('superUsers');
const userEmbed = new EmbedBuilder()
- .setTitle(util.discord.escapeMarkdown(user.tag))
+ .setTitle(escapeMarkdown(user.tag))
.setThumbnail(user.displayAvatarURL({ size: 2048, extension: 'png' }))
.setTimestamp()
.setFooter({ text: user.tag })
- .setColor(member?.displayColor ?? util.colors.default);
+ .setColor(member?.displayColor ?? colors.default);
// Flags
- if (client.config.owners.includes(user.id)) emojis.push(client.consts.mappings.otherEmojis.Developer);
- if (superUsers.includes(user.id)) emojis.push(client.consts.mappings.otherEmojis.Superuser);
+ if (client.config.owners.includes(user.id)) emojis.push(mappings.otherEmojis.Developer);
+ if (superUsers.includes(user.id)) emojis.push(mappings.otherEmojis.Superuser);
const flags = user.flags?.toArray();
if (flags) {
flags.forEach((f) => {
- if (client.consts.mappings.userFlags[f] !== undefined) {
- emojis.push(client.consts.mappings.userFlags[f]);
+ if (mappings.userFlags[f] !== undefined) {
+ emojis.push(mappings.userFlags[f]);
} else emojis.push(`\`${f}\``);
});
}
@@ -82,18 +99,18 @@ export default class UserInfoCommand extends BushCommand {
// Since discord bald I just guess if someone has nitro
if (
Number(user.discriminator) < 10 ||
- client.consts.mappings.maybeNitroDiscrims.includes(user.discriminator) ||
+ mappings.maybeNitroDiscrims.includes(user.discriminator) ||
user.displayAvatarURL()?.endsWith('.gif') ||
user.flags?.has(UserFlags.Partner) ||
user.flags?.has(UserFlags.Staff) ||
member?.avatar // server avatar
) {
- emojis.push(client.consts.mappings.otherEmojis.Nitro);
+ emojis.push(mappings.otherEmojis.Nitro);
}
- if (guild?.ownerId == user.id) emojis.push(client.consts.mappings.otherEmojis.Owner);
- else if (member?.permissions.has(PermissionFlagsBits.Administrator)) emojis.push(client.consts.mappings.otherEmojis.Admin);
- if (member?.premiumSinceTimestamp) emojis.push(client.consts.mappings.otherEmojis.Booster);
+ if (guild?.ownerId == user.id) emojis.push(mappings.otherEmojis.Owner);
+ else if (member?.permissions.has(PermissionFlagsBits.Administrator)) emojis.push(mappings.otherEmojis.Admin);
+ if (member?.premiumSinceTimestamp) emojis.push(mappings.otherEmojis.Booster);
await this.generateGeneralInfoField(userEmbed, user);
@@ -121,12 +138,12 @@ export default class UserInfoCommand extends BushCommand {
const generalInfo = [
`**Mention:** <@${user.id}>`,
`**ID:** ${user.id}`,
- `**Created:** ${util.timestampAndDelta(user.createdAt, 'd')}`
+ `**Created:** ${timestampAndDelta(user.createdAt, 'd')}`
];
if (user.accentColor !== null) generalInfo.push(`**Accent Color:** ${user.hexAccentColor}`);
if (user.banner) generalInfo.push(`**Banner:** [link](${user.bannerURL({ extension: 'png', size: 4096 })})`);
- const pronouns = await Promise.race([util.getPronounsOf(user), util.sleep(2 * Time.Second)]); // cut off request after 2 seconds
+ const pronouns = await Promise.race([getPronounsOf(user), sleep(2 * Time.Second)]); // cut off request after 2 seconds
if (pronouns && typeof pronouns === 'string' && pronouns !== 'Unspecified') generalInfo.push(`**Pronouns:** ${pronouns}`);
@@ -140,21 +157,21 @@ export default class UserInfoCommand extends BushCommand {
const serverUserInfo = [];
if (member.joinedTimestamp)
serverUserInfo.push(
- `**${member.guild!.ownerId == member.user.id ? 'Created Server' : 'Joined'}:** ${util.timestampAndDelta(
+ `**${member.guild!.ownerId == member.user.id ? 'Created Server' : 'Joined'}:** ${timestampAndDelta(
member.joinedAt!,
'd'
)}`
);
- if (member.premiumSince) serverUserInfo.push(`**Booster Since:** ${util.timestampAndDelta(member.premiumSince, 'd')}`);
+ if (member.premiumSince) serverUserInfo.push(`**Booster Since:** ${timestampAndDelta(member.premiumSince, 'd')}`);
if (member.displayHexColor) serverUserInfo.push(`**Display Color:** ${member.displayHexColor}`);
- if (member.user.id == '322862723090219008' && member.guild?.id == client.consts.mappings.guilds.bush)
+ if (member.user.id == '322862723090219008' && member.guild?.id == mappings.guilds.bush)
serverUserInfo.push(`**General Deletions:** 1⅓`);
if (
(['384620942577369088', '496409778822709251'] as const).includes(member.user.id) &&
- member.guild.id == client.consts.mappings.guilds.bush
+ member.guild.id == mappings.guilds.bush
)
serverUserInfo.push(`**General Deletions:** ⅓`);
- if (member?.nickname) serverUserInfo.push(`**Nickname:** ${util.discord.escapeMarkdown(member?.nickname)}`);
+ if (member?.nickname) serverUserInfo.push(`**Nickname:** ${escapeMarkdown(member?.nickname)}`);
if (serverUserInfo.length) embed.addFields([{ name: title, value: serverUserInfo.join('\n') }]);
}
@@ -179,10 +196,10 @@ export default class UserInfoCommand extends BushCommand {
const presenceInfo = [];
if (member?.presence.status) presenceInfo.push(`**Status:** ${member.presence.status}`);
if (devices && devices.length)
- presenceInfo.push(`**${devices.length - 1 ? 'Devices' : 'Device'}:** ${util.oxford(devices, 'and', '')}`);
+ presenceInfo.push(`**${devices.length - 1 ? 'Devices' : 'Device'}:** ${oxford(devices, 'and', '')}`);
if (activitiesNames.length)
- presenceInfo.push(`**Activit${activitiesNames.length - 1 ? 'ies' : 'y'}:** ${util.oxford(activitiesNames, 'and', '')}`);
- if (customStatus && customStatus.length) presenceInfo.push(`**Custom Status:** ${util.discord.escapeMarkdown(customStatus)}`);
+ presenceInfo.push(`**Activit${activitiesNames.length - 1 ? 'ies' : 'y'}:** ${oxford(activitiesNames, 'and', '')}`);
+ if (customStatus && customStatus.length) presenceInfo.push(`**Custom Status:** ${escapeMarkdown(customStatus)}`);
embed.addFields([{ name: title, value: presenceInfo.join('\n') }]);
enum statusEmojis {
@@ -229,8 +246,8 @@ export default class UserInfoCommand extends BushCommand {
perms.push('`Administrator`');
} else if (member?.permissions.toArray().length) {
member.permissions.toArray().forEach((permission) => {
- if (client.consts.mappings.permissions[permission]?.important) {
- perms.push(`\`${client.consts.mappings.permissions[permission].name}\``);
+ if (mappings.permissions[permission]?.important) {
+ perms.push(`\`${mappings.permissions[permission].name}\``);
}
});
}
@@ -247,14 +264,14 @@ export default class UserInfoCommand extends BushCommand {
const flags = new ApplicationFlagsBitField(applicationInfo.flags);
const intent = (check: ApplicationFlagsString, warn: ApplicationFlagsString) => {
- if (flags.has(check)) return util.emojis.check;
- if (flags.has(warn)) return util.emojis.warn;
- return util.emojis.cross;
+ if (flags.has(check)) return emojis.check;
+ if (flags.has(warn)) return emojis.warn;
+ return emojis.cross;
};
const botInfo = [
`**Publicity:** ${applicationInfo.bot_public ? 'Public' : 'Private'}`,
- `**Requires Code Grant:** ${applicationInfo.bot_require_code_grant ? util.emojis.check : util.emojis.cross}`,
+ `**Requires Code Grant:** ${applicationInfo.bot_require_code_grant ? emojis.check : emojis.cross}`,
`**Server Members Intent:** ${intent('GatewayGuildMembers', 'GatewayGuildMembersLimited')}`,
`**Presence Intent:** ${intent('GatewayPresence', 'GatewayPresenceLimited')}`,
`**Message Content Intent:** ${intent('GatewayMessageContent', 'GatewayMessageContentLimited')}`