aboutsummaryrefslogtreecommitdiff
path: root/src/commands/utilities
diff options
context:
space:
mode:
authorIRONM00N <64110067+IRONM00N@users.noreply.github.com>2021-08-19 12:03:21 -0400
committerIRONM00N <64110067+IRONM00N@users.noreply.github.com>2021-08-19 12:03:21 -0400
commitb29a217f76483e000bd9d75d30250d11a0a88c4d (patch)
tree041b13dc115cf94aff81cda17cf088f2290c2a14 /src/commands/utilities
parent5984cc283ca50099d0e266b994324446316c0013 (diff)
downloadtanzanite-b29a217f76483e000bd9d75d30250d11a0a88c4d.tar.gz
tanzanite-b29a217f76483e000bd9d75d30250d11a0a88c4d.tar.bz2
tanzanite-b29a217f76483e000bd9d75d30250d11a0a88c4d.zip
added steal command, revamped error handling and other stuff
Diffstat (limited to 'src/commands/utilities')
-rw-r--r--src/commands/utilities/activity.ts57
-rw-r--r--src/commands/utilities/steal.ts59
-rw-r--r--src/commands/utilities/whoHasRole.ts3
3 files changed, 95 insertions, 24 deletions
diff --git a/src/commands/utilities/activity.ts b/src/commands/utilities/activity.ts
index 8bdfc21..c0ab2a2 100644
--- a/src/commands/utilities/activity.ts
+++ b/src/commands/utilities/activity.ts
@@ -1,4 +1,4 @@
-import { Message, VoiceChannel } from 'discord.js';
+import { DiscordAPIError, Message, VoiceChannel } from 'discord.js';
import { BushCommand, BushMessage, BushSlashMessage } from '../../lib';
const activityMap = {
@@ -19,7 +19,7 @@ function map(phase: string) {
}
// eslint-disable-next-line @typescript-eslint/no-unused-vars
-const activityTypeCaster = (_message: Message, phrase: string) => {
+const activityTypeCaster = (_message: Message | BushMessage | BushSlashMessage, phrase: string) => {
if (!phrase) return null;
const mappedPhrase = map(phrase);
if (mappedPhrase) return mappedPhrase;
@@ -51,7 +51,12 @@ export default class YouTubeCommand extends BushCommand {
{
id: 'activity',
match: 'rest',
- customType: activityTypeCaster
+ customType: activityTypeCaster,
+ prompt: {
+ start: 'What activity would you like to play?',
+ retry:
+ '{error} You must choose one of the following options: `yt`, `youtube`, `chess`, `park`, `poker`, `fish`, `fishing`, `fishington`, or `betrayal`.'
+ }
}
],
slash: true,
@@ -85,29 +90,35 @@ export default class YouTubeCommand extends BushCommand {
message: BushMessage | BushSlashMessage,
args: { channel: VoiceChannel; activity: string }
): Promise<unknown> {
- if (!args.channel?.id || args.channel?.type != 'GUILD_VOICE')
+ const channel = typeof args.channel === 'string' ? message.guild?.channels.cache.get(args.channel) : args.channel;
+ if (!channel || channel.type !== 'GUILD_VOICE')
return await message.util.reply(`${util.emojis.error} Choose a valid voice channel`);
- let target_application_id: string;
- if (message.util.isSlash) target_application_id = args.activity;
- else target_application_id = target_application_id = args.activity;
+ const target_application_id = message.util.isSlash ? args.activity : activityTypeCaster(message, args.activity);
- // @ts-ignore: jank typings
- // prettier-ignore
- const invite = await this.client.api.channels(args.channel.id)
- .invites.post({
- data: {
- validate: null,
- max_age: 604800,
- max_uses: 0,
- target_type: 2,
- target_application_id,
- temporary: false
- }
- })
- .catch(() => false);
- if (!invite || !invite.code)
- return await message.util.reply(`${this.client.util.emojis.error} An error occurred while generating your invite.`);
+ let response: string;
+ const invite = await (client as any).api
+ .channels(channel.id)
+ .invites.post({
+ data: {
+ validate: null,
+ max_age: 604800,
+ max_uses: 0,
+ target_type: 2,
+ target_application_id,
+ temporary: false
+ }
+ })
+ .catch((e: Error | DiscordAPIError) => {
+ if ((e as DiscordAPIError).code === 50013) {
+ response = `${util.emojis.error} I am missing permissions to make an invite in that channel.`;
+ return;
+ } else response = `${util.emojis.error} An error occurred while generating your invite: ${e?.message ?? e}`;
+ });
+ if (response! || !invite || !invite.code)
+ return await message.util.reply(
+ response! ?? `${util.emojis.error} An unknown error occurred while generating your invite.`
+ );
else return await message.util.send(`https://discord.gg/${invite.code}`);
}
}
diff --git a/src/commands/utilities/steal.ts b/src/commands/utilities/steal.ts
new file mode 100644
index 0000000..92abcb2
--- /dev/null
+++ b/src/commands/utilities/steal.ts
@@ -0,0 +1,59 @@
+import { BushCommand, BushMessage } from '@lib';
+import { Emoji } from 'discord.js';
+
+export default class StealCommand extends BushCommand {
+ public constructor() {
+ super('steal', {
+ aliases: ['steal', 'copyemoji'],
+ category: 'utilities',
+ description: {
+ content: 'Steal an emoji from another server and add it to your own.',
+ usage: 'steal <emoji/url> [--name name]',
+ examples: ['steal <:omegaclown:782630946435366942> --name ironm00n']
+ },
+ args: [
+ {
+ id: 'emoji',
+ customType: util.arg.union('emoji', 'url'),
+ prompt: {
+ start: 'What emoji would you like to steal?',
+ retry: '{error} Pick a valid emoji.',
+ optional: true
+ }
+ },
+ { id: 'name', match: 'option', flag: '--name', default: 'stolen_emoji' }
+ ],
+ slash: false,
+ channel: 'guild',
+ clientPermissions: ['SEND_MESSAGES', 'MANAGE_EMOJIS_AND_STICKERS'],
+ userPermissions: ['SEND_MESSAGES', 'MANAGE_EMOJIS_AND_STICKERS']
+ });
+ }
+ public override async exec(message: BushMessage, args: { emoji?: URL | Emoji; name: string }): Promise<unknown> {
+ if ((!args || !args.emoji) && !message.attachments.size)
+ return await message.util.reply(`${util.emojis.error} You must provide an emoji to steal.`);
+ const image =
+ message.attachments.size && message.attachments.first()!.contentType?.includes('image/')
+ ? message.attachments.first()!.url
+ : args?.emoji instanceof Emoji
+ ? `https://cdn.discordapp.com/emojis/${args.emoji.id}`
+ : args?.emoji instanceof URL
+ ? args.emoji.href
+ : undefined;
+
+ if (!image) return await message.util.reply(`${util.emojis.error} You must provide an emoji to steal.`);
+
+ const creationSuccess = await message
+ .guild!.emojis.create(image, args.name, {
+ reason: `Stolen by ${message.author.tag} (${message.author.id})`
+ })
+ .catch((e: Error) => e);
+
+ if (!(creationSuccess instanceof Error))
+ return await message.util.reply(`${util.emojis.success} You successfully stole ${creationSuccess}.`);
+ else
+ return await message.util.reply(
+ `${util.emojis.error} The was an error stealing that emoji \`${creationSuccess.message}\`.`
+ );
+ }
+}
diff --git a/src/commands/utilities/whoHasRole.ts b/src/commands/utilities/whoHasRole.ts
index a6c4665..e507036 100644
--- a/src/commands/utilities/whoHasRole.ts
+++ b/src/commands/utilities/whoHasRole.ts
@@ -33,7 +33,8 @@ export default class WhoHasRoleCommand extends BushCommand {
],
channel: 'guild',
clientPermissions: ['SEND_MESSAGES'],
- userPermissions: ['SEND_MESSAGES']
+ userPermissions: ['SEND_MESSAGES'],
+ typing: true
});
}
public override async exec(message: BushMessage | BushSlashMessage, args: { role: Role }): Promise<unknown> {