aboutsummaryrefslogtreecommitdiff
path: root/src/commands/utilities/steal.ts
diff options
context:
space:
mode:
Diffstat (limited to 'src/commands/utilities/steal.ts')
-rw-r--r--src/commands/utilities/steal.ts50
1 files changed, 34 insertions, 16 deletions
diff --git a/src/commands/utilities/steal.ts b/src/commands/utilities/steal.ts
index 92abcb2..01c39ea 100644
--- a/src/commands/utilities/steal.ts
+++ b/src/commands/utilities/steal.ts
@@ -1,5 +1,5 @@
import { BushCommand, BushMessage } from '@lib';
-import { Emoji } from 'discord.js';
+import { Snowflake } from 'discord-api-types';
export default class StealCommand extends BushCommand {
public constructor() {
@@ -8,20 +8,22 @@ export default class StealCommand extends BushCommand {
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']
+ usage: 'steal <emoji/emoji id/url> [name]',
+ examples: ['steal <:omegaclown:782630946435366942> ironm00n']
},
args: [
{
- id: 'emoji',
- customType: util.arg.union('emoji', 'url'),
+ id: 'emojiOrName',
+ customType: util.arg.union('discordEmoji', 'snowflake', 'url'),
prompt: {
start: 'What emoji would you like to steal?',
- retry: '{error} Pick a valid emoji.',
+ retry: '{error} Pick a valid emoji, emoji id, or image url.',
optional: true
}
},
- { id: 'name', match: 'option', flag: '--name', default: 'stolen_emoji' }
+ {
+ id: 'name2'
+ }
],
slash: false,
channel: 'guild',
@@ -29,22 +31,38 @@ export default class StealCommand extends BushCommand {
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)
+ public override async exec(
+ message: BushMessage,
+ args?: { emojiOrName?: { name: string; id: Snowflake } | Snowflake | URL | string; name2: string }
+ ): Promise<unknown> {
+ if ((!args || !args.emojiOrName) && !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.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
+ : args?.emojiOrName instanceof URL
+ ? args.emojiOrName.href
+ : typeof args?.emojiOrName === 'object'
+ ? `https://cdn.discordapp.com/emojis/${args.emojiOrName.id}`
+ : client.consts.regex.snowflake.test(args?.emojiOrName ?? '')
+ ? `https://cdn.discordapp.com/emojis/${args!.emojiOrName}`
: undefined;
- if (!image) return await message.util.reply(`${util.emojis.error} You must provide an emoji to steal.`);
+ if (image === undefined) return await message.util.reply(`${util.emojis.error} You must provide an emoji to steal.`);
+ if (message.attachments.size && typeof args?.emojiOrName !== 'string')
+ return await message.util.reply(`${util.emojis.error} You cannot attach an image and provide an argument.`);
+
+ const emojiName = message.attachments.size
+ ? (args?.emojiOrName as string) ?? 'stolen_emoji'
+ : args?.emojiOrName instanceof URL
+ ? args?.name2 ?? 'stolen_emoji'
+ : typeof args?.emojiOrName === 'object'
+ ? args?.name2 ?? args.emojiOrName.name ?? 'stolen_emoji'
+ : 'stolen_emoji';
const creationSuccess = await message
- .guild!.emojis.create(image, args.name, {
+ .guild!.emojis.create(image, emojiName, {
reason: `Stolen by ${message.author.tag} (${message.author.id})`
})
.catch((e: Error) => e);