diff options
121 files changed, 530 insertions, 397 deletions
diff --git a/package.json b/package.json index 6d0eb64..87a384e 100644 --- a/package.json +++ b/package.json @@ -50,6 +50,8 @@ "eslint-config-prettier": "^8.3.0" }, "dependencies": { + "@sentry/node": "^6.13.3", + "@sentry/tracing": "^6.13.3", "canvas": "^2.8.0", "chalk": "^4.1.2", "discord-akairo": "npm:@notenoughupdates/discord-akairo@dev", diff --git a/src/commands/_fake-command/ironmoon.ts b/src/commands/_fake-command/ironmoon.ts index d7e737f..612db85 100644 --- a/src/commands/_fake-command/ironmoon.ts +++ b/src/commands/_fake-command/ironmoon.ts @@ -4,7 +4,7 @@ export default class IronmoonCommand extends BushCommand { public constructor() { super('ironmoon', { category: 'fake-commands', - description: { content: '', examples: '', usage: '' }, + description: { content: '', examples: [''], usage: [''] }, pseudo: true, clientPermissions: [], userPermissions: [] @@ -16,7 +16,7 @@ export default class IronmoonCommand extends BushCommand { else return false; } - public override async exec(message: BushMessage | BushSlashMessage): Promise<unknown> { + public override async exec(message: BushMessage | BushSlashMessage) { return await message.util.reply('Your message included the word ironmoon.'); } } diff --git a/src/commands/admin/channelPermissions.ts b/src/commands/admin/channelPermissions.ts index bae1133..dc35c87 100644 --- a/src/commands/admin/channelPermissions.ts +++ b/src/commands/admin/channelPermissions.ts @@ -1,5 +1,5 @@ -import { BushCommand, BushMessage, ButtonPaginator } from '@lib'; -import { GuildMember, MessageEmbed, Role } from 'discord.js'; +import { BushCommand, BushMessage, BushSlashMessage, ButtonPaginator } from '@lib'; +import { GuildMember, MessageEmbed, PermissionString, Role } from 'discord.js'; export default class ChannelPermissionsCommand extends BushCommand { public constructor() { @@ -8,9 +8,9 @@ export default class ChannelPermissionsCommand extends BushCommand { category: 'admin', typing: true, description: { - content: 'Use to mass change the channel ', - usage: 'ChannelPerms <role_id> <perm> <state>', - examples: ['ChannelPerms 783794633129197589 read_messages deny'] + content: 'Use to mass change the channel permissions.', + usage: ['channel-perms <role_id> <perm> <state>'], + examples: ['channel-perms 783794633129197589 read_messages deny'] }, args: [ { @@ -18,7 +18,7 @@ export default class ChannelPermissionsCommand extends BushCommand { customType: util.arg.union('member', 'member'), prompt: { start: 'What user/role would you like to change?', - retry: 'Invalid response. What user/role would you like to change?' + retry: '{error} Choose a valid user/role to change.' } }, { @@ -44,39 +44,79 @@ export default class ChannelPermissionsCommand extends BushCommand { ], clientPermissions: (m) => util.clientSendAndPermCheck(m, ['MANAGE_CHANNELS']), userPermissions: ['ADMINISTRATOR'], - channel: 'guild' + channel: 'guild', + slash: true, + slashOptions: [ + { + name: 'target', + description: 'What user/role would you like to change?', + type: 'MENTIONABLE', + required: true + }, + { + name: 'permission', + description: 'What permission would you like to change?', + type: 'STRING', + required: true + }, + { + name: 'state', + description: 'What should that permission be set to?', + type: 'STRING', + choices: [ + { + name: 'Enabled', + value: 'true' + }, + { + name: 'Disabled', + value: 'false' + }, + { + name: 'Neutral', + value: 'neutral' + } + ], + required: true + } + ] }); } public override async exec( - message: BushMessage, - { - target, - permission, - state - }: { + message: BushMessage | BushSlashMessage, + args: { target: Role | GuildMember; - permission: string; + permission: PermissionString | string; state: 'true' | 'false' | 'neutral'; } - ): Promise<unknown> { + ) { + if (!message.guild) return await message.util.reply(`${util.emojis.error} This command can only be run in a server.`); + if (!message.member!.permissions.has('ADMINISTRATOR') && !message.member!.user.isOwner()) + return await message.util.reply(`${util.emojis.error} You must have admin perms to use this command.`); + if (message.util.isSlashMessage(message)) await message.interaction.deferReply(); + + const permission: PermissionString = message.util.isSlashMessage(message) + ? await util.arg.cast('permission', message, args.permission) + : args.permission; + if (!permission) return await message.util.reply(`${util.emojis.error} Invalid permission.`); const failedChannels = []; - for (const channel of message.guild!.channels.cache.values()) { + for (const [, channel] of message.guild!.channels.cache) { try { if (channel.isThread()) return; if (channel.permissionsLocked) return; - const permissionState = state === 'true' ? true : state === 'false' ? false : null; + const permissionState = args.state === 'true' ? true : args.state === 'false' ? false : null; await channel.permissionOverwrites.create( - target.id, + args.target.id, { [permission]: permissionState }, { reason: 'Changing overwrites for mass channel perms command' } ); } catch (e) { - client.console.debug(e.stack); + void client.console.error('channelPermissions', e.stack); failedChannels.push(channel); } } - const failure = failedChannels.map((e) => `<#${e.id}>`).join(' '); + const failure = failedChannels.map((c) => `<#${c.id}>`).join(' '); if (failure.length > 2000) { const paginate: MessageEmbed[] = []; for (let i = 0; i < failure.length; i += 4000) { diff --git a/src/commands/admin/roleAll.ts b/src/commands/admin/roleAll.ts index 73369fc..1e67874 100644 --- a/src/commands/admin/roleAll.ts +++ b/src/commands/admin/roleAll.ts @@ -1,4 +1,4 @@ -import { AllowedMentions, BushCommand, BushMessage } from '@lib'; +import { AllowedMentions, BushCommand, BushMessage, BushSlashMessage } from '@lib'; import { GuildMember, Role } from 'discord.js'; export default class RoleAllCommand extends BushCommand { @@ -8,8 +8,8 @@ export default class RoleAllCommand extends BushCommand { category: 'admin', description: { content: 'Give a role to every member on the server.', - usage: 'roleAll <role> [another role]... [--bots]', - examples: ['roleAll 783794633129197589 --bots'] + usage: ['role-all <role> [--bots]'], + examples: ['role-all 783794633129197589 --bots'] }, args: [ { @@ -30,14 +30,30 @@ export default class RoleAllCommand extends BushCommand { channel: 'guild', clientPermissions: (m) => util.clientSendAndPermCheck(m, ['MANAGE_ROLES']), userPermissions: ['ADMINISTRATOR'], - typing: true + typing: true, + slash: true, + slashOptions: [ + { + name: 'role', + description: 'What role would you like to give to every member on the server?', + type: 'ROLE', + required: true + }, + { + name: 'bots', + description: 'Would you like to also give roles to bots?', + type: 'BOOLEAN', + required: false + } + ] }); } - public override async exec(message: BushMessage, args: { role: Role; bot?: boolean }): Promise<unknown> { + public override async exec(message: BushMessage | BushSlashMessage, args: { role: Role; bots: boolean }) { if (!message.guild) return await message.util.reply(`${util.emojis.error} This command can only be run in a server.`); if (!message.member!.permissions.has('ADMINISTRATOR') && !message.member!.user.isOwner()) return await message.util.reply(`${util.emojis.error} You must have admin perms to use this command.`); + if (message.util.isSlashMessage(message)) await message.interaction.deferReply(); if (args.role.comparePositionTo(message.guild.me!.roles.highest) >= 0 && !args.role) { return await message.util.reply(`${util.emojis.error} I cannot assign a role higher or equal to my highest role.`); @@ -47,7 +63,7 @@ export default class RoleAllCommand extends BushCommand { members = members.filter((member: GuildMember) => { try { - if (member.user.bot && !args.bot) return false; + if (member.user.bot && !args.bots) return false; if (member.roles.cache.has(args.role.id)) return false; } catch { return false; @@ -66,7 +82,7 @@ export default class RoleAllCommand extends BushCommand { if (!failed.length) { await message.util.reply({ content: `${util.emojis.success} Finished adding <@&${args.role.id}> to **${members.size}** member${ - members.size ? 's' : '' + members.size > 1 ? 's' : '' }.`, allowedMentions: AllowedMentions.none() }); @@ -74,7 +90,7 @@ export default class RoleAllCommand extends BushCommand { const array = [...members.values()]; await message.util.reply({ content: `${util.emojis.warn} Finished adding <@&${args.role.id}> to **${members.size - failed.length}** member${ - members.size - failed.length ? 's' : '' + members.size - failed.length > 1 ? 's' : '' }! Failed members:\n${failed.map((_, index) => `<@${array[index].id}>`).join(' ')}`, allowedMentions: AllowedMentions.none() }); diff --git a/src/commands/config/blacklist.ts b/src/commands/config/blacklist.ts index ef0c94e..d6d7c18 100644 --- a/src/commands/config/blacklist.ts +++ b/src/commands/config/blacklist.ts @@ -9,7 +9,7 @@ export default class BlacklistCommand extends BushCommand { category: 'config', description: { content: 'A command to blacklist users and channels.', - usage: 'blacklist|unblacklist <user|channel>', + usage: ['blacklist|unblacklist <user|channel>'], examples: ['blacklist @user', 'unblacklist #channel'] }, args: [ @@ -18,8 +18,7 @@ export default class BlacklistCommand extends BushCommand { customType: Argument.union('channel', 'user'), prompt: { start: 'What channel or user that you would like to blacklist/unblacklist?', - retry: '{error} Pick a valid command.', - optional: false + retry: '{error} Pick a valid user or channel.' } }, { @@ -56,7 +55,7 @@ export default class BlacklistCommand extends BushCommand { public override async exec( message: BushMessage | BushSlashMessage, args: { action: 'blacklist' | 'unblacklist'; target: Channel | User | string; global: boolean } - ): Promise<unknown> { + ) { let action: 'blacklist' | 'unblacklist' | 'toggle' = args.action ?? (message?.util?.parsed?.alias as 'blacklist' | 'unblacklist') ?? 'toggle'; const global = args.global && message.author.isOwner(); @@ -92,9 +91,7 @@ export default class BlacklistCommand extends BushCommand { }); else return await message.util.reply({ - content: `${util.emojis.success} Successfully **${action}ed** ${util.format.bold( - target?.tag ?? target.name - )} globally.`, + content: `${util.emojis.success} Successfully ${action}ed ${util.format.bold(target?.tag ?? target.name)} globally.`, allowedMentions: AllowedMentions.none() }); // guild disable diff --git a/src/commands/config/config.ts b/src/commands/config/config.ts index 0fdd615..0ca8ef8 100644 --- a/src/commands/config/config.ts +++ b/src/commands/config/config.ts @@ -24,9 +24,11 @@ export default class SettingsCommand extends BushCommand { category: 'config', description: { content: 'Configure server settings.', - usage: `settings (${settingsArr.map((s) => `\`${s}\``).join(', ')}) (${['view', 'set', 'add', 'remove'].map( - (s) => `\`${s}\`` - )})`, + usage: [ + `settings (${settingsArr.map((s) => `\`${s}\``).join(', ')}) (${['view', 'set', 'add', 'remove'].map( + (s) => `\`${s}\`` + )})` + ], examples: ['settings', 'config prefix set -'] }, slash: true, @@ -181,7 +183,7 @@ export default class SettingsCommand extends BushCommand { subcommand?: Action; value: string | Channel | Role; } - ): Promise<unknown> { + ) { if (!message.guild) return await message.util.reply(`${util.emojis.error} This command can only be used in servers.`); if (!message.member?.permissions.has('MANAGE_GUILD') && !message.member?.user.isOwner()) return await message.util.reply( diff --git a/src/commands/config/customAutomodPhrases.ts b/src/commands/config/customAutomodPhrases.ts index 51e219a..e02d52b 100644 --- a/src/commands/config/customAutomodPhrases.ts +++ b/src/commands/config/customAutomodPhrases.ts @@ -7,7 +7,7 @@ // category: 'config', // description: { // content: 'Configure additional phrases to be used for automod.', -// usage: 'custom-automod-phrases <requiredArg> [optionalArg]', +// usage: ['custom-automod-phrases <requiredArg> [optionalArg]'], // examples: ['custom-automod-phrases 1 2'] // }, // args: [ @@ -57,7 +57,7 @@ // public override async exec( // message: BushMessage | BushSlashMessage, // args: { required_argument: string; optional_argument: string } -// ): Promise<unknown> { +// ) { // return await message.util.reply(`${util.emojis.error} Do not use the template command.`); // args; // } diff --git a/src/commands/config/disable.ts b/src/commands/config/disable.ts index bca1207..2e3ce74 100644 --- a/src/commands/config/disable.ts +++ b/src/commands/config/disable.ts @@ -7,7 +7,7 @@ export default class DisableCommand extends BushCommand { category: 'config', description: { content: 'A command to disable and enable commands.', - usage: 'disable|enable <command>', + usage: ['disable|enable <command>'], examples: ['enable ban', 'disable kick'] }, args: [ @@ -62,7 +62,7 @@ export default class DisableCommand extends BushCommand { public override async exec( message: BushMessage | BushSlashMessage, args: { action: 'enable' | 'disable'; command: BushCommand | string; global: boolean } - ): Promise<unknown> { + ) { let action = (args.action ?? message?.util?.parsed?.alias ?? 'toggle') as 'disable' | 'enable' | 'toggle'; const global = args.global && message.author.isOwner(); const commandID = (args.command as BushCommand).id; diff --git a/src/commands/config/features.ts b/src/commands/config/features.ts index 3c3075c..8285845 100644 --- a/src/commands/config/features.ts +++ b/src/commands/config/features.ts @@ -8,7 +8,7 @@ export default class FeaturesCommand extends BushCommand { category: 'config', description: { content: 'Toggle features the server.', - usage: 'features', + usage: ['features'], examples: ['features'] }, slash: true, @@ -18,7 +18,7 @@ export default class FeaturesCommand extends BushCommand { }); } - public override async exec(message: BushMessage | BushSlashMessage): Promise<unknown> { + public override async exec(message: BushMessage | BushSlashMessage) { if (!message.guild) return await message.util.reply(`${util.emojis.error} This command can only be used in servers.`); const featureEmbed = new MessageEmbed().setTitle(`${message.guild!.name}'s Features`).setColor(util.colors.default); diff --git a/src/commands/config/levelRoles.ts b/src/commands/config/levelRoles.ts index ee5f255..c8f0bf3 100644 --- a/src/commands/config/levelRoles.ts +++ b/src/commands/config/levelRoles.ts @@ -58,7 +58,7 @@ // public override async exec( // message: BushMessage | BushSlashMessage, // args: { required_argument: string; optional_argument: string } -// ): Promise<unknown> { +// ) { // return await message.util.reply(`${util.emojis.error} Do not use the template command.`); // args; // } diff --git a/src/commands/config/log.ts b/src/commands/config/log.ts index 363620a..c364a35 100644 --- a/src/commands/config/log.ts +++ b/src/commands/config/log.ts @@ -9,7 +9,7 @@ export default class LogCommand extends BushCommand { category: 'config', description: { content: 'Set or remove a log channel.', - usage: 'log <logType> [channel]', + usage: ['log <logType> [channel]'], examples: ['log automod #automod-logs'] }, slash: true, @@ -60,10 +60,7 @@ export default class LogCommand extends BushCommand { return { log_type, channel }; } - public override async exec( - message: BushMessage | BushSlashMessage, - args: { log_type: GuildLogType; channel: TextChannel } - ): Promise<unknown> { + public override async exec(message: BushMessage | BushSlashMessage, args: { log_type: GuildLogType; channel: TextChannel }) { if (!message.guild) return await message.util.reply(`${util.emojis.error} This command can only be used in servers.`); const currentLogs = await message.guild.getSetting('logChannels'); const oldChannel = currentLogs[args.log_type] ?? undefined; diff --git a/src/commands/dev/__template.ts b/src/commands/dev/__template.ts index b9d9114..0d25766 100644 --- a/src/commands/dev/__template.ts +++ b/src/commands/dev/__template.ts @@ -7,7 +7,7 @@ export default class TemplateCommand extends BushCommand { category: 'template', description: { content: 'Command description.', - usage: 'template <requiredArg> [optionalArg]', + usage: ['template <requiredArg> [optionalArg]'], examples: ['template 1 2'] }, args: [ @@ -53,11 +53,10 @@ export default class TemplateCommand extends BushCommand { userPermissions: [] }); } - public override async exec( message: BushMessage | BushSlashMessage, args: { required_argument: string; optional_argument: string } - ): Promise<unknown> { + ) { return await message.util.reply(`${util.emojis.error} Do not use the template command.`); args; } diff --git a/src/commands/dev/eval.ts b/src/commands/dev/eval.ts index 46fe889..5bb99e7 100644 --- a/src/commands/dev/eval.ts +++ b/src/commands/dev/eval.ts @@ -11,7 +11,7 @@ export default class EvalCommand extends BushCommand { category: 'dev', description: { content: 'Evaluate code.', - usage: 'eval <code> [--depth #] [--sudo] [--silent] [--delete] [--proto] [--hidden] [--ts]', + usage: ['eval <code> [--depth #] [--sudo] [--silent] [--delete] [--proto] [--hidden] [--ts]'], examples: ['eval message.channel.delete()'] }, args: [ @@ -64,7 +64,7 @@ export default class EvalCommand extends BushCommand { show_proto: boolean; show_methods: boolean; } - ): Promise<unknown> { + ) { if (!message.author.isOwner()) return await message.util.reply(`${util.emojis.error} Only my developers can run this command.`); if (message.util.isSlashMessage(message)) { @@ -161,9 +161,9 @@ export default class EvalCommand extends BushCommand { } else { try { await message.author.send({ embeds: [embed] }); - if (!args.deleteMSG) await message.react(emojis.successFull); + if (!args.deleteMSG) await (message as BushMessage).react(emojis.successFull); } catch { - if (!args.deleteMSG) await message.react(emojis.errorFull); + if (!args.deleteMSG) await (message as BushMessage).react(emojis.errorFull); } } if (args.deleteMSG && (message as BushMessage).deletable) await (message as BushMessage).delete(); diff --git a/src/commands/dev/reload.ts b/src/commands/dev/reload.ts index 43b8ab6..a95106f 100644 --- a/src/commands/dev/reload.ts +++ b/src/commands/dev/reload.ts @@ -7,7 +7,7 @@ export default class ReloadCommand extends BushCommand { category: 'dev', description: { content: 'Reloads the bot', - usage: 'reload', + usage: ['reload'], examples: ['reload'] }, // args: [ @@ -33,7 +33,7 @@ export default class ReloadCommand extends BushCommand { }); } - public override async exec(message: BushMessage | BushSlashMessage /* { fast }: { fast: boolean } */): Promise<unknown> { + public override async exec(message: BushMessage | BushSlashMessage /* { fast }: { fast: boolean } */) { if (!message.author.isOwner()) return await message.util.reply(`${util.emojis.error} Only my developers can run this command.`); diff --git a/src/commands/dev/say.ts b/src/commands/dev/say.ts index f1695f8..947f3c2 100644 --- a/src/commands/dev/say.ts +++ b/src/commands/dev/say.ts @@ -8,7 +8,7 @@ export default class SayCommand extends BushCommand { category: 'dev', description: { content: 'A command make the bot say something.', - usage: 'say <message>', + usage: ['say <message>'], examples: ['say hello'] }, args: [ @@ -27,7 +27,7 @@ export default class SayCommand extends BushCommand { }); } - public override async exec(message: BushMessage, args: { content: string }): Promise<unknown> { + public override async exec(message: BushMessage, args: { content: string }) { if (!message.author.isOwner()) return await message.util.reply(`${util.emojis.error} Only my developers can run this command.`); @@ -35,7 +35,7 @@ export default class SayCommand extends BushCommand { await message.util.send({ content: args.content, allowedMentions: AllowedMentions.none() }).catch(() => null); } - public override async execSlash(message: AkairoMessage, args: { content: string }): Promise<unknown> { + public override async execSlash(message: AkairoMessage, args: { content: string }) { if (!client.config.owners.includes(message.author.id)) { return await message.interaction.reply({ content: `${util.emojis.error} Only my developers can run this command.`, diff --git a/src/commands/dev/servers.ts b/src/commands/dev/servers.ts index 5097695..e26d2c7 100644 --- a/src/commands/dev/servers.ts +++ b/src/commands/dev/servers.ts @@ -8,7 +8,7 @@ export default class ServersCommand extends BushCommand { category: 'dev', description: { content: 'Displays all the severs the bot is in', - usage: 'servers', + usage: ['servers'], examples: ['servers'] }, clientPermissions: (m) => util.clientSendAndPermCheck(m), @@ -17,7 +17,7 @@ export default class ServersCommand extends BushCommand { }); } - public override async exec(message: BushMessage | BushSlashMessage): Promise<unknown> { + public override async exec(message: BushMessage | BushSlashMessage) { const guilds = [...client.guilds.cache.sort((a, b) => (a.memberCount < b.memberCount ? 1 : -1)).values()]; const chunkedGuilds: Guild[][] = util.chunk(guilds, 10); const embeds: MessageEmbedOptions[] = chunkedGuilds.map((chunk) => { diff --git a/src/commands/dev/sh.ts b/src/commands/dev/sh.ts index 3fca2b2..11cd28d 100644 --- a/src/commands/dev/sh.ts +++ b/src/commands/dev/sh.ts @@ -19,7 +19,7 @@ export default class ShCommand extends BushCommand { category: 'dev', description: { content: 'Run shell commands.', - usage: 'sh <command>', + usage: ['sh <command>'], examples: ['sh git pull'] }, args: [ @@ -39,7 +39,7 @@ export default class ShCommand extends BushCommand { }); } - public override async exec(message: BushMessage | BushSlashMessage, { command }: { command: string }): Promise<unknown> { + public override async exec(message: BushMessage | BushSlashMessage, { command }: { command: string }) { if (!client.config.owners.includes(message.author.id)) return await message.util.reply(`${util.emojis.error} Only my developers can run this command.`); const input = clean(command); diff --git a/src/commands/dev/superUser.ts b/src/commands/dev/superUser.ts index fcdec53..147a6c4 100644 --- a/src/commands/dev/superUser.ts +++ b/src/commands/dev/superUser.ts @@ -9,7 +9,7 @@ export default class SuperUserCommand extends BushCommand { category: 'dev', description: { content: 'A command to manage superusers.', - usage: 'superuser <add/remove> <user>', + usage: ['superuser <add/remove> <user>'], examples: ['superuser add IRONM00N'] }, clientPermissions: (m) => util.clientSendAndPermCheck(m), @@ -44,7 +44,7 @@ export default class SuperUserCommand extends BushCommand { public override async exec( message: BushMessage | BushSlashMessage, { action, user }: { action: 'add' | 'remove'; user: User } - ): Promise<unknown> { + ) { if (!message.author.isOwner()) return await message.util.reply(`${util.emojis.error} Only my developers can run this command.`); diff --git a/src/commands/dev/test.ts b/src/commands/dev/test.ts index 2ab266d..e3aa20d 100644 --- a/src/commands/dev/test.ts +++ b/src/commands/dev/test.ts @@ -15,7 +15,7 @@ export default class TestCommand extends BushCommand { category: 'dev', description: { content: 'A command to stuff.', - usage: 'test [feature]', + usage: ['test [feature]'], examples: ['test lots of buttons', 'test buttons'] }, args: [ @@ -36,7 +36,7 @@ export default class TestCommand extends BushCommand { }); } - public override async exec(message: BushMessage, args: { feature: string }): Promise<unknown> { + public override async exec(message: BushMessage, args: { feature: string }) { const responses = [ 'Yes master.', 'Test it your self bitch, I am hungry.', diff --git a/src/commands/fun/coinflip.ts b/src/commands/fun/coinflip.ts index 42e7167..2d1f70c 100644 --- a/src/commands/fun/coinflip.ts +++ b/src/commands/fun/coinflip.ts @@ -7,15 +7,16 @@ export default class CoinFlipCommand extends BushCommand { category: 'fun', description: { content: 'Flip a virtual coin.', - usage: 'coinflip', + usage: ['coinflip'], examples: ['coinflip'] }, clientPermissions: (m) => util.clientSendAndPermCheck(m), - userPermissions: [] + userPermissions: [], + slash: true }); } - public override async exec(message: BushMessage | BushSlashMessage): Promise<void> { + public override async exec(message: BushMessage | BushSlashMessage) { const random = Math.random(); let result: string; const fall = message.author.id === '322862723090219008' ? 0.1 : 0.001; //dw about it diff --git a/src/commands/fun/dice.ts b/src/commands/fun/dice.ts index 9f18657..5058617 100644 --- a/src/commands/fun/dice.ts +++ b/src/commands/fun/dice.ts @@ -7,7 +7,7 @@ export default class EightBallCommand extends BushCommand { category: 'fun', description: { content: 'Roll virtual dice.', - usage: 'dice', + usage: ['dice'], examples: ['dice'] }, clientPermissions: (m) => util.clientSendAndPermCheck(m), @@ -16,7 +16,7 @@ export default class EightBallCommand extends BushCommand { }); } - public override async exec(message: BushMessage | BushSlashMessage): Promise<unknown> { + public override async exec(message: BushMessage | BushSlashMessage) { const responses = ['1', '2', '3', '4', '5', '6']; const answer = responses[Math.floor(Math.random() * responses.length)]; return await message.util.reply(`You rolled a **${answer}**.`); diff --git a/src/commands/fun/eightBall.ts b/src/commands/fun/eightBall.ts index 4e79beb..e96e006 100644 --- a/src/commands/fun/eightBall.ts +++ b/src/commands/fun/eightBall.ts @@ -7,7 +7,7 @@ export default class EightBallCommand extends BushCommand { category: 'fun', description: { content: 'Ask questions for a randomly generated response.', - usage: '8Ball <question>', + usage: ['8Ball <question>'], examples: ['8Ball does anyone love me?'] }, args: [ @@ -35,7 +35,7 @@ export default class EightBallCommand extends BushCommand { }); } - public override async exec(message: BushMessage | BushSlashMessage): Promise<void> { + public override async exec(message: BushMessage | BushSlashMessage) { const responses = [ 'It is certain', 'Without a doubt', diff --git a/src/commands/fun/minesweeper.ts b/src/commands/fun/minesweeper.ts index b45dcda..c9b0a8c 100644 --- a/src/commands/fun/minesweeper.ts +++ b/src/commands/fun/minesweeper.ts @@ -8,7 +8,7 @@ export default class MinesweeperCommand extends BushCommand { category: 'fun', description: { content: 'minesweeper command.', - usage: 'minesweeper <rows> <columns> <mines> [--spaces] [--revealFirstCell]', + usage: ['minesweeper <rows> <columns> <mines> [--spaces] [--revealFirstCell]'], examples: ['minesweeper 10 10 2'] }, args: [ @@ -66,7 +66,7 @@ export default class MinesweeperCommand extends BushCommand { public override async exec( message: BushMessage | BushSlashMessage, args: { rows: number; columns: number; mines: number; spaces: boolean; reveal_first_cell: boolean } - ): Promise<unknown> { + ) { const minesweeper = new Minesweeper({ rows: args.rows ?? 9, columns: args.columns ?? 9, diff --git a/src/commands/info/avatar.ts b/src/commands/info/avatar.ts index 40debf0..44e1556 100644 --- a/src/commands/info/avatar.ts +++ b/src/commands/info/avatar.ts @@ -8,8 +8,8 @@ export default class AvatarCommand extends BushCommand { category: 'info', description: { content: "A command to get a user's avatar", - usage: 'avatar [user]', - examples: 'avatar' + usage: ['avatar [user]'], + examples: ['avatar', 'av IRONM00N'] }, args: [ { @@ -36,7 +36,7 @@ export default class AvatarCommand extends BushCommand { }); } - override async exec(message: BushMessage | BushSlashMessage, args: { user: GuildMember | User }): Promise<void> { + override async exec(message: BushMessage | BushSlashMessage, args: { user: GuildMember | User }) { const params: { size: 2048; format: 'png'; dynamic: true } = { size: 2048, format: 'png', dynamic: true }; const defaultAvatar = `https://cdn.discordapp.com/embed/avatars/${Math.ceil(Math.random() * 6) - 1}.png`; diff --git a/src/commands/info/botInfo.ts b/src/commands/info/botInfo.ts index ffb785c..a072224 100644 --- a/src/commands/info/botInfo.ts +++ b/src/commands/info/botInfo.ts @@ -5,13 +5,13 @@ import prettyBytes from 'pretty-bytes'; export default class BotInfoCommand extends BushCommand { public constructor() { - super('botinfo', { - aliases: ['botinfo', 'stats'], + super('botInfo', { + aliases: ['bot-info', 'stats'], category: 'info', description: { content: 'Shows information about the bot', - usage: 'botinfo', - examples: ['botinfo'] + usage: ['bot-info'], + examples: ['bot-info'] }, slash: true, clientPermissions: (m) => util.clientSendAndPermCheck(m, ['EMBED_LINKS'], true), @@ -19,7 +19,7 @@ export default class BotInfoCommand extends BushCommand { }); } - public override async exec(message: BushMessage | BushSlashMessage): Promise<void> { + public override async exec(message: BushMessage | BushSlashMessage) { enum Platform { aix = 'AIX', android = 'Android', diff --git a/src/commands/info/color.ts b/src/commands/info/color.ts index 958aadd..021f319 100644 --- a/src/commands/info/color.ts +++ b/src/commands/info/color.ts @@ -16,7 +16,7 @@ export default class ColorCommand extends BushCommand { category: 'info', description: { content: 'Find the color of a hex code, user, or role.', - usage: 'color <color|role|user>', + usage: ['color <color|role|user>'], examples: ['color #0000FF'] }, args: [ @@ -40,10 +40,7 @@ export default class ColorCommand extends BushCommand { return color.substr(4, color.length - 5); } - public override async exec( - message: BushMessage | BushSlashMessage, - args: { color: string | BushRole | BushGuildMember } - ): Promise<unknown> { + public override async exec(message: BushMessage | BushSlashMessage, args: { color: string | BushRole | BushGuildMember }) { const color = typeof args.color === 'string' ? tinycolor(args.color) diff --git a/src/commands/info/guildInfo.ts b/src/commands/info/guildInfo.ts index 2945050..3a592e9 100644 --- a/src/commands/info/guildInfo.ts +++ b/src/commands/info/guildInfo.ts @@ -4,12 +4,12 @@ import { BaseGuildVoiceChannel, Guild, GuildPreview, MessageEmbed, Snowflake, Va export default class GuildInfoCommand extends BushCommand { public constructor() { super('guildInfo', { - aliases: ['guildinfo', 'serverinfo', 'guild', 'server', 'g'], + aliases: ['guild-info', 'serverinfo', 'guild', 'server', 'g'], category: 'info', description: { content: 'Get info about a server.', - usage: 'guildinfo [guild]', - examples: ['guildinfo 516977525906341928'] + usage: ['guild-info [guild]'], + examples: ['guild-info 516977525906341928'] }, args: [ { @@ -36,10 +36,7 @@ export default class GuildInfoCommand extends BushCommand { }); } - public override async exec( - message: BushMessage | BushSlashMessage, - args: { guild: Guild | Snowflake | GuildPreview } - ): Promise<unknown> { + public override async exec(message: BushMessage | BushSlashMessage, args: { guild: Guild | Snowflake | GuildPreview }) { if (!args?.guild && !message.guild) { 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.` diff --git a/src/commands/info/icon.ts b/src/commands/info/icon.ts index 08538d7..0eb7bfc 100644 --- a/src/commands/info/icon.ts +++ b/src/commands/info/icon.ts @@ -8,8 +8,8 @@ export default class IconCommand extends BushCommand { category: 'info', description: { content: "A command to get the server's icon", - usage: 'icon', - examples: 'icon' + usage: ['icon'], + examples: ['icon'] }, clientPermissions: (m) => util.clientSendAndPermCheck(m, ['EMBED_LINKS'], true), userPermissions: [], @@ -18,7 +18,7 @@ export default class IconCommand extends BushCommand { }); } - override async exec(message: BushMessage | BushSlashMessage): Promise<void> { + override async exec(message: BushMessage | BushSlashMessage) { const embed = new MessageEmbed() .setTimestamp() .setColor(util.colors.default) diff --git a/src/commands/info/links.ts b/src/commands/info/links.ts index 754b22b..7b52fef 100644 --- a/src/commands/info/links.ts +++ b/src/commands/info/links.ts @@ -9,7 +9,7 @@ export default class LinksCommand extends BushCommand { category: 'info', description: { content: 'Sends bot links', - usage: 'links', + usage: ['links'], examples: ['links'] }, clientPermissions: (m) => util.clientSendAndPermCheck(m), @@ -18,7 +18,7 @@ export default class LinksCommand extends BushCommand { }); } - public override async exec(message: BushMessage | BushSlashMessage): Promise<unknown> { + public override async exec(message: BushMessage | BushSlashMessage) { if (client.config.isDevelopment) return await message.util.reply(`${util.emojis.error} The dev bot cannot be invited.`); const ButtonRow = new MessageActionRow().addComponents( new MessageButton({ diff --git a/src/commands/info/ping.ts b/src/commands/info/ping.ts index 82db2ff..8d05307 100644 --- a/src/commands/info/ping.ts +++ b/src/commands/info/ping.ts @@ -8,7 +8,7 @@ export default class PingCommand extends BushCommand { category: 'info', description: { content: 'Gets the latency of the bot', - usage: 'ping', + usage: ['ping'], examples: ['ping'] }, slash: true, @@ -17,7 +17,7 @@ export default class PingCommand extends BushCommand { }); } - public override async exec(message: BushMessage): Promise<void> { + public override async exec(message: BushMessage) { const sentMessage = (await message.util.send('Pong!')) as Message; const timestamp: number = message.editedTimestamp ? message.editedTimestamp : message.createdTimestamp; const botLatency = `${'```'}\n ${Math.round(sentMessage.createdTimestamp - timestamp)}ms ${'```'}`; @@ -35,7 +35,7 @@ export default class PingCommand extends BushCommand { }); } - public override async execSlash(message: BushSlashMessage): Promise<void> { + public override async execSlash(message: BushSlashMessage) { const timestamp1 = message.interaction.createdTimestamp; await message.interaction.reply('Pong!'); const timestamp2 = await message.interaction.fetchReply().then((m) => (m as Message).createdTimestamp); diff --git a/src/commands/info/pronouns.ts b/src/commands/info/pronouns.ts index cd66530..132b719 100644 --- a/src/commands/info/pronouns.ts +++ b/src/commands/info/pronouns.ts @@ -7,9 +7,9 @@ export default class PronounsCommand extends BushCommand { aliases: ['pronouns', 'pronoun'], category: 'info', description: { - usage: 'pronouns <user>', - examples: ['pronouns IRONM00N'], - content: 'Finds the pronouns of a user using https://pronoundb.org.' + content: 'Finds the pronouns of a user using https://pronoundb.org.', + usage: ['pronouns <user>'], + examples: ['pronouns IRONM00N'] }, args: [ { @@ -35,7 +35,7 @@ export default class PronounsCommand extends BushCommand { slash: true }); } - override async exec(message: BushMessage | BushSlashMessage, args: { user?: User }): Promise<unknown> { + override async exec(message: BushMessage | BushSlashMessage, args: { user?: User }) { const user = args.user ?? message.author; const author = user.id === message.author.id; diff --git a/src/commands/info/snowflake.ts b/src/commands/info/snowflake.ts index b203d94..2b75b30 100644 --- a/src/commands/info/snowflake.ts +++ b/src/commands/info/snowflake.ts @@ -24,7 +24,7 @@ export default class SnowflakeCommand extends BushCommand { category: 'info', description: { content: 'Provides information about the specified Snowflake.', - usage: 'snowflake <snowflake>', + usage: ['snowflake <snowflake>'], examples: ['snowflake 322862723090219008'] }, args: [ @@ -51,7 +51,7 @@ export default class SnowflakeCommand extends BushCommand { ] }); } - public override async exec(message: BushMessage | BushSlashMessage, args: { snowflake: Snowflake }): Promise<unknown> { + public override async exec(message: BushMessage | BushSlashMessage, args: { snowflake: Snowflake }) { const snowflake = `${args.snowflake}` as Snowflake; const snowflakeEmbed = new MessageEmbed().setTitle('Unknown :snowflake:').setColor(util.colors.default); diff --git a/src/commands/info/userInfo.ts b/src/commands/info/userInfo.ts index 17be687..b3c8a67 100644 --- a/src/commands/info/userInfo.ts +++ b/src/commands/info/userInfo.ts @@ -8,9 +8,9 @@ export default class UserInfoCommand extends BushCommand { aliases: ['user-info', 'user', 'u'], category: 'info', description: { - usage: 'user-info [user]', - examples: ['user-info 322862723090219008'], - content: 'Gives information about a specified user.' + content: 'Gives information about a specified user.', + usage: ['user-info [user]'], + examples: ['user-info 322862723090219008'] }, args: [ { @@ -37,7 +37,7 @@ export default class UserInfoCommand extends BushCommand { }); } - public override async exec(message: BushMessage | BushSlashMessage, args: { user: BushUser | Snowflake }): Promise<unknown> { + public override async exec(message: BushMessage | BushSlashMessage, args: { user: BushUser | Snowflake }) { const user = args?.user === undefined || args?.user === null ? message.author diff --git a/src/commands/leveling/leaderboard.ts b/src/commands/leveling/leaderboard.ts index 3f7fac8..61d3769 100644 --- a/src/commands/leveling/leaderboard.ts +++ b/src/commands/leveling/leaderboard.ts @@ -8,7 +8,7 @@ export default class LeaderboardCommand extends BushCommand { category: 'leveling', description: { content: 'Allows you to see the users with the highest levels in the server.', - usage: 'leaderboard [page]', + usage: ['leaderboard [page]'], examples: ['leaderboard 5'] }, args: [ @@ -37,7 +37,7 @@ export default class LeaderboardCommand extends BushCommand { }); } - public override async exec(message: BushMessage | BushSlashMessage, args: { page: number }): Promise<unknown> { + public override async exec(message: BushMessage | BushSlashMessage, args: { page: number }) { if (!message.guild) return await message.util.reply(`${util.emojis.error} This command can only be run in a server.`); if (!(await message.guild.hasFeature('leveling'))) return await message.util.reply( diff --git a/src/commands/leveling/level.ts b/src/commands/leveling/level.ts index 219aab1..faaf201 100644 --- a/src/commands/leveling/level.ts +++ b/src/commands/leveling/level.ts @@ -21,7 +21,7 @@ export default class LevelCommand extends BushCommand { category: 'leveling', description: { content: 'Shows the level of a user', - usage: 'level [user]', + usage: ['level [user]'], examples: ['level', 'level @Tyman'] }, args: [ @@ -50,7 +50,7 @@ export default class LevelCommand extends BushCommand { }); } - public override async exec(message: BushMessage | BushSlashMessage, args: { user?: BushUser }): Promise<unknown> { + public override async exec(message: BushMessage | BushSlashMessage, args: { user?: BushUser }) { if (!message.guild) return await message.util.reply(`${util.emojis.error} This command can only be run in a server.`); if (!(await message.guild.hasFeature('leveling'))) return await message.util.reply( diff --git a/src/commands/leveling/setLevel.ts b/src/commands/leveling/setLevel.ts index d3ee162..e085a8e 100644 --- a/src/commands/leveling/setLevel.ts +++ b/src/commands/leveling/setLevel.ts @@ -8,7 +8,7 @@ export default class SetLevelCommand extends BushCommand { category: 'leveling', description: { content: 'Sets the level of a user', - usage: 'set-level <user> <level>', + usage: ['set-level <user> <level>'], examples: ['set-level @Moulberry 69'] //nice }, args: [ @@ -50,10 +50,7 @@ export default class SetLevelCommand extends BushCommand { }); } - public override async exec( - message: BushMessage | BushSlashMessage, - { user, level }: { user: User; level: number } - ): Promise<unknown> { + public override async exec(message: BushMessage | BushSlashMessage, { user, level }: { user: User; level: number }) { if (!message.guild) return await message.util.reply(`${util.emojis.error} This command can only be run in a guild.`); if (!user.id) throw new Error('user.id is null'); diff --git a/src/commands/leveling/setXp.ts b/src/commands/leveling/setXp.ts index a140bfc..4bcaff6 100644 --- a/src/commands/leveling/setXp.ts +++ b/src/commands/leveling/setXp.ts @@ -8,7 +8,7 @@ export default class SetXpCommand extends BushCommand { category: 'leveling', description: { content: 'Sets the xp of a user', - usage: 'set-xp <user> <xp>', + usage: ['set-xp <user> <xp>'], examples: ['set-xp @Moulberry 69k'] //nice }, args: [ @@ -53,10 +53,7 @@ export default class SetXpCommand extends BushCommand { }); } - public override async exec( - message: BushMessage | BushSlashMessage, - { user, xp }: { user: User; xp: number } - ): Promise<unknown> { + public override async exec(message: BushMessage | BushSlashMessage, { user, xp }: { user: User; xp: number }) { if (!message.guild) return await message.util.reply(`${util.emojis.error} This command can only be run in a guild.`); if (!user.id) throw new Error('user.id is null'); diff --git a/src/commands/moderation/_lockdown.ts b/src/commands/moderation/_lockdown.ts index 0086ff6..34d5698 100644 --- a/src/commands/moderation/_lockdown.ts +++ b/src/commands/moderation/_lockdown.ts @@ -7,7 +7,7 @@ export default class LockdownCommand extends BushCommand { category: 'moderation', description: { content: 'Allows you to lockdown a channel or all configured channels..', - usage: 'lockdown [--all]', + usage: ['lockdown [--all]'], examples: ['lockdown', 'lockdown --all'] }, args: [ @@ -33,7 +33,7 @@ export default class LockdownCommand extends BushCommand { }); } - public override async exec(message: BushMessage | BushSlashMessage, args: { all: boolean }): Promise<unknown> { + public override async exec(message: BushMessage | BushSlashMessage, args: { all: boolean }) { return await message.util.reply('Unfortunately my developer is too lazy to implement this command.'); if (!args.all) { if (!['GUILD_TEXT', 'GUILD_NEWS'].includes(message.channel!.type)) diff --git a/src/commands/moderation/ban.ts b/src/commands/moderation/ban.ts index a267b78..5569069 100644 --- a/src/commands/moderation/ban.ts +++ b/src/commands/moderation/ban.ts @@ -8,7 +8,7 @@ export default class BanCommand extends BushCommand { category: 'moderation', description: { content: 'Ban a member from the server.', - usage: 'ban <member> <reason> [--delete ]', + usage: ['ban <member> <reason> [--delete]'], examples: ['ban ironm00n 1 day commands in #general --delete 7'] }, args: [ @@ -83,12 +83,12 @@ export default class BanCommand extends BushCommand { message: BushMessage | BushSlashMessage, args: { user: User | Snowflake; - reason?: { duration: number | null; contentWithoutTime: string }; - days?: number; + reason: { duration: number | null; contentWithoutTime: string } | null; + days: number | null; force: boolean; } - ): Promise<unknown> { - if (typeof args.reason === 'object') args.reason.duration ??= 0; + ) { + if (args.reason && typeof args.reason === 'object') args.reason.duration ??= 0; args.days ??= 0; if (!message.guild) return message.util.reply(`${util.emojis.error} This command cannot be used in dms.`); diff --git a/src/commands/moderation/evidence.ts b/src/commands/moderation/evidence.ts index a681bc1..0a297de 100644 --- a/src/commands/moderation/evidence.ts +++ b/src/commands/moderation/evidence.ts @@ -8,7 +8,7 @@ export default class EvidenceCommand extends BushCommand { category: 'moderation', description: { content: 'Add evidence to a modlog case.', - usage: 'evidence <case_id> <evidence>', + usage: ['evidence <case_id> <evidence>'], examples: ['evidence '] }, slash: true, @@ -60,7 +60,7 @@ export default class EvidenceCommand extends BushCommand { public override async exec( message: BushMessage | BushSlashMessage, { case_id: caseID, evidence }: { case_id: string; evidence?: string } - ): Promise<unknown> { + ) { const entry = await ModLog.findByPk(caseID); if (!entry || entry.pseudo) return message.util.send(`${util.emojis.error} Invalid modlog entry.`); if (entry.guild !== message.guild!.id) diff --git a/src/commands/moderation/hideCase.ts b/src/commands/moderation/hideCase.ts index 981a8bc..a873784 100644 --- a/src/commands/moderation/hideCase.ts +++ b/src/commands/moderation/hideCase.ts @@ -7,8 +7,8 @@ export default class HideCaseCommand extends BushCommand { category: 'moderation', description: { content: 'Hide a particular modlog case from the modlog command unless the `--hidden` flag is specified', - usage: 'hideCase <case_id>', - examples: ['hideCase 9210b1ea-91f5-4ea2-801b-02b394469c77'] + usage: ['hide-case <case_id>'], + examples: ['hide-case 9210b1ea-91f5-4ea2-801b-02b394469c77'] }, args: [ { @@ -35,10 +35,7 @@ export default class HideCaseCommand extends BushCommand { }); } - public override async exec( - message: BushMessage | BushSlashMessage, - { case_id: caseID }: { case_id: string } - ): Promise<unknown> { + public override async exec(message: BushMessage | BushSlashMessage, { case_id: caseID }: { case_id: string }) { const entry = await ModLog.findByPk(caseID); if (!entry || entry.pseudo) return message.util.send(`${util.emojis.error} Invalid entry.`); if (entry.guild !== message.guild!.id) diff --git a/src/commands/moderation/kick.ts b/src/commands/moderation/kick.ts index d4edb07..34c1b76 100644 --- a/src/commands/moderation/kick.ts +++ b/src/commands/moderation/kick.ts @@ -7,7 +7,7 @@ export default class KickCommand extends BushCommand { category: 'moderation', description: { content: 'Kick a user.', - usage: 'kick <member> <reason>', + usage: ['kick <member> <reason>'], examples: ['kick @user bad'] }, args: [ @@ -58,7 +58,7 @@ export default class KickCommand extends BushCommand { public override async exec( message: BushMessage | BushSlashMessage, { user, reason, force }: { user: BushUser; reason?: string; force: boolean } - ): Promise<unknown> { + ) { const member = await message.guild!.members.fetch(user.id); if (!member) diff --git a/src/commands/moderation/modlog.ts b/src/commands/moderation/modlog.ts index 6840f4e..2bd0f5a 100644 --- a/src/commands/moderation/modlog.ts +++ b/src/commands/moderation/modlog.ts @@ -8,7 +8,7 @@ export default class ModlogCommand extends BushCommand { category: 'moderation', description: { content: "View a user's modlogs, or view a specific case.", - usage: 'modlogs <search> [--hidden]', + usage: ['modlogs <search> [--hidden]'], examples: ['modlogs @Tyman'] }, args: [ @@ -62,7 +62,7 @@ export default class ModlogCommand extends BushCommand { public override async exec( message: BushMessage | BushSlashMessage, { search, hidden }: { search: BushUser | string; hidden: boolean } - ): Promise<unknown> { + ) { const foundUser = search instanceof User ? search : await util.resolveUserAsync(search); if (foundUser) { const logs = await ModLog.findAll({ diff --git a/src/commands/moderation/mute.ts b/src/commands/moderation/mute.ts index 897e95a..844809b 100644 --- a/src/commands/moderation/mute.ts +++ b/src/commands/moderation/mute.ts @@ -7,7 +7,7 @@ export default class MuteCommand extends BushCommand { category: 'moderation', description: { content: 'Mute a user.', - usage: 'mute <member> [reason] [duration]', + usage: ['mute <member> [reason] [duration]'], examples: ['mute ironm00n 1 day commands in #general'] }, args: [ @@ -29,7 +29,11 @@ export default class MuteCommand extends BushCommand { optional: true } }, - { id: 'force', flag: '--force', match: 'flag' } + { + id: 'force', + flag: '--force', + match: 'flag' + } ], slash: true, slashOptions: [ @@ -55,7 +59,7 @@ export default class MuteCommand extends BushCommand { public override async exec( message: BushMessage | BushSlashMessage, args: { user: BushUser; reason?: { duration: number | null; contentWithoutTime: string } | string; force: boolean } - ): Promise<unknown> { + ) { const reason: { duration: number | null; contentWithoutTime: string } = args.reason ? typeof args.reason === 'string' ? await util.arg.cast('contentWithDuration', message, args.reason) diff --git a/src/commands/moderation/purge.ts b/src/commands/moderation/purge.ts index 472665c..e5fea8e 100644 --- a/src/commands/moderation/purge.ts +++ b/src/commands/moderation/purge.ts @@ -8,8 +8,8 @@ export default class PurgeCommand extends BushCommand { category: 'moderation', description: { content: 'A command to mass delete messages.', - usage: 'purge <amount>', - examples: ['Purge 20'] + usage: ['purge <amount>'], + examples: ['purge 20'] }, args: [ { @@ -25,11 +25,20 @@ export default class PurgeCommand extends BushCommand { match: 'flag', flag: '--bot' }, - { id: 'user', match: 'option', flag: '--user' } + { + id: 'user', + match: 'option', + flag: '--user' + } ], slash: true, slashOptions: [ - { name: 'amount', description: 'How many messages would you like to purge?', type: 'INTEGER', required: true }, + { + name: 'amount', + description: 'How many messages would you like to purge?', + type: 'INTEGER', + required: true + }, { name: 'bot', description: 'Would you like to only delete messages that are from bots?', @@ -43,7 +52,7 @@ export default class PurgeCommand extends BushCommand { }); } - public override async exec(message: BushMessage, args: { amount: number; bot: boolean }): Promise<unknown> { + public override async exec(message: BushMessage, args: { amount: number; bot: boolean }) { if (message.channel.type === 'DM') return message.util.reply(`${util.emojis.error} You cannot run this command in dms.`); if (args.amount > 100 || args.amount < 1) return message.util.reply(`${util.emojis.error} `); diff --git a/src/commands/moderation/removeReactionEmoji.ts b/src/commands/moderation/removeReactionEmoji.ts index 63e20bd..3e14aa2 100644 --- a/src/commands/moderation/removeReactionEmoji.ts +++ b/src/commands/moderation/removeReactionEmoji.ts @@ -8,7 +8,7 @@ export default class RemoveReactionEmojiCommand extends BushCommand { category: 'moderation', description: { content: 'Deleted all the reactions of a certain emoji from a message.', - usage: 'remove-reaction-emoji <message> <emoji>', + usage: ['remove-reaction-emoji <message> <emoji>'], examples: ['remove-reaction-emoji 791413052347252786 <:omegaclown:782630946435366942>'] }, args: [ @@ -39,7 +39,7 @@ export default class RemoveReactionEmojiCommand extends BushCommand { public override async exec( message: BushMessage, { messageToRemoveFrom, emoji }: { messageToRemoveFrom: BushMessage; emoji: Emoji | Snowflake } - ): Promise<unknown> { + ) { const id = !['string'].includes(typeof emoji); const emojiID = !id ? `${emoji}` : (emoji as Emoji).id; const success = await messageToRemoveFrom.reactions.cache diff --git a/src/commands/moderation/role.ts b/src/commands/moderation/role.ts index d6a85af..a0d6518 100644 --- a/src/commands/moderation/role.ts +++ b/src/commands/moderation/role.ts @@ -8,7 +8,7 @@ export default class RoleCommand extends BushCommand { category: 'moderation', description: { content: "Manages users' roles.", - usage: 'role <add|remove> <user> <role> [duration]', + usage: ['role <add|remove> <user> <role> [duration]'], examples: ['role add spammer nogiveaways 7days', 'ra tyman muted', 'rr tyman staff'] }, slash: true, @@ -95,7 +95,7 @@ export default class RoleCommand extends BushCommand { role, duration }: { action: 'add' | 'remove'; user: BushGuildMember; role: BushRole; duration?: number | null } - ): Promise<unknown> { + ) { if (duration === null) duration = 0; if ( !message.member!.permissions.has('MANAGE_ROLES') && diff --git a/src/commands/moderation/slowmode.ts b/src/commands/moderation/slowmode.ts index 75d795c..4192ecf 100644 --- a/src/commands/moderation/slowmode.ts +++ b/src/commands/moderation/slowmode.ts @@ -9,7 +9,7 @@ export default class SlowModeCommand extends BushCommand { category: 'moderation', description: { content: 'A command to set the slowmode of a channel.', - usage: 'slowmode <length>', + usage: ['slowmode <length>'], examples: ['slowmode 3'] }, args: [ @@ -56,7 +56,7 @@ export default class SlowModeCommand extends BushCommand { length: number | 'off' | 'none' | 'disable'; channel: TextChannel | ThreadChannel | BushTextChannel | BushNewsChannel | BushThreadChannel | NewsChannel; } - ): Promise<unknown> { + ) { if (message.channel!.type === 'DM') return await message.util.reply(`${util.emojis.error} This command cannot be run in dms.`); if (!channel) channel = message.channel as any; diff --git a/src/commands/moderation/unban.ts b/src/commands/moderation/unban.ts index 9d52dd2..3d61e82 100644 --- a/src/commands/moderation/unban.ts +++ b/src/commands/moderation/unban.ts @@ -7,7 +7,7 @@ export default class UnbanCommand extends BushCommand { category: 'moderation', description: { content: 'Unban a member from the server.', - usage: 'unban <member> <reason> [--delete ]', + usage: ['unban <member> <reason> [--delete]'], examples: ['unban 322862723090219008 I changed my mind, commands are allowed in #general'] }, args: [ @@ -50,10 +50,7 @@ export default class UnbanCommand extends BushCommand { userPermissions: ['BAN_MEMBERS'] }); } - public override async exec( - message: BushMessage | BushSlashMessage, - { user, reason }: { user: BushUser; reason?: string } - ): Promise<unknown> { + public override async exec(message: BushMessage | BushSlashMessage, { user, reason }: { user: BushUser; reason?: string }) { const responseCode = await message.guild!.bushUnban({ user, moderator: message.author, diff --git a/src/commands/moderation/unmute.ts b/src/commands/moderation/unmute.ts index 3b4f5bd..ca7861c 100644 --- a/src/commands/moderation/unmute.ts +++ b/src/commands/moderation/unmute.ts @@ -7,7 +7,7 @@ export default class UnmuteCommand extends BushCommand { category: 'moderation', description: { content: 'unmute a user.', - usage: 'unmute <member> [reason]', + usage: ['unmute <member> [reason]'], examples: ['unmute 322862723090219008 1 day commands in #general'] }, args: [ @@ -59,7 +59,7 @@ export default class UnmuteCommand extends BushCommand { public override async exec( message: BushMessage | BushSlashMessage, { user, reason, force }: { user: BushUser; reason?: string; force: boolean } - ): Promise<unknown> { + ) { const error = util.emojis.error; const member = message.guild!.members.cache.get(user.id) as BushGuildMember; diff --git a/src/commands/moderation/warn.ts b/src/commands/moderation/warn.ts index c510929..d326806 100644 --- a/src/commands/moderation/warn.ts +++ b/src/commands/moderation/warn.ts @@ -7,7 +7,7 @@ export default class WarnCommand extends BushCommand { category: 'moderation', description: { content: 'Warn a user.', - usage: 'warn <member> [reason]', + usage: ['warn <member> [reason]'], examples: ['warn @Tyman being cool'] }, args: [ @@ -58,7 +58,7 @@ export default class WarnCommand extends BushCommand { public override async exec( message: BushMessage | BushSlashMessage, { user, reason, force }: { user: BushUser; reason: string; force: boolean } - ): Promise<unknown> { + ) { const member = message.guild!.members.cache.get(user.id) as BushGuildMember; if (!member) return message.util.reply(`${util.emojis.error} I cannot warn users that are not in the server.`); const useForce = force && message.author.isOwner(); diff --git a/src/commands/moulberry-bush/capePerms.ts b/src/commands/moulberry-bush/capePerms.ts index 4b7a3eb..ddd975d 100644 --- a/src/commands/moulberry-bush/capePerms.ts +++ b/src/commands/moulberry-bush/capePerms.ts @@ -9,7 +9,7 @@ export default class CapePermissionsCommand extends BushCommand { category: "Moulberry's Bush", description: { content: 'A command to see what capes someone has access to.', - usage: 'cape-perms <user>', + usage: ['cape-perms <user>'], examples: ['cape-perms IRONM00N'] }, args: [ @@ -38,7 +38,7 @@ export default class CapePermissionsCommand extends BushCommand { }); } - public override async exec(message: BushMessage | BushSlashMessage, args: { ign: string }): Promise<unknown> { + public override async exec(message: BushMessage | BushSlashMessage, args: { ign: string }) { interface CapePerms { success: boolean; perms: User[]; diff --git a/src/commands/moulberry-bush/capes.ts b/src/commands/moulberry-bush/capes.ts index 96b4685..d5d8531 100644 --- a/src/commands/moulberry-bush/capes.ts +++ b/src/commands/moulberry-bush/capes.ts @@ -2,31 +2,6 @@ import { BushCommand, BushMessage, ButtonPaginator, DeleteButton } from '@lib'; import { MessageEmbedOptions } from 'discord.js'; import got from 'got'; -export interface GithubFile { - path: string; - mode: string; - type: string; - sha: string; - size: number; - url: string; -} - -export interface GithubBlob { - encoding: string; - content: string; - sha: string; - node_id: string; - url: string; - size: number; -} - -export interface GithubTreeApi { - sha: string; - url: string; - tree: GithubFile[]; - truncated: boolean; -} - export default class CapesCommand extends BushCommand { public constructor() { super('capes', { @@ -34,7 +9,7 @@ export default class CapesCommand extends BushCommand { category: "Moulberry's Bush", description: { content: 'A command to see what a cape looks like.', - usage: 'cape [cape]', + usage: ['cape [cape]'], examples: ['capes', 'cape space'] }, args: [ @@ -63,7 +38,7 @@ export default class CapesCommand extends BushCommand { }); } - public override async exec(message: BushMessage, args: { cape: string | null }): Promise<void> { + public override async exec(message: BushMessage, args: { cape: string | null }) { const { tree: neuFileTree }: GithubTreeApi = await got .get('https://api.github.com/repos/Moulberry/NotEnoughUpdates/git/trees/master?recursive=1') .json(); @@ -132,3 +107,28 @@ export default class CapesCommand extends BushCommand { }; } } + +export interface GithubFile { + path: string; + mode: string; + type: string; + sha: string; + size: number; + url: string; +} + +export interface GithubBlob { + encoding: string; + content: string; + sha: string; + node_id: string; + url: string; + size: number; +} + +export interface GithubTreeApi { + sha: string; + url: string; + tree: GithubFile[]; + truncated: boolean; +} diff --git a/src/commands/moulberry-bush/giveawayPing.ts b/src/commands/moulberry-bush/giveawayPing.ts index d6005b0..7aa3001 100644 --- a/src/commands/moulberry-bush/giveawayPing.ts +++ b/src/commands/moulberry-bush/giveawayPing.ts @@ -7,7 +7,7 @@ export default class GiveawayPingCommand extends BushCommand { category: "Moulberry's Bush", description: { content: 'Pings the giveaway role.', - usage: 'giveaway-ping', + usage: ['giveaway-ping'], examples: ['giveaway-ping'] }, clientPermissions: (m) => util.clientSendAndPermCheck(m, ['MANAGE_MESSAGES'], true), @@ -23,7 +23,7 @@ export default class GiveawayPingCommand extends BushCommand { }); } - public override async exec(message: BushMessage): Promise<unknown> { + public override async exec(message: BushMessage) { if (!message.member!.permissions.has('MANAGE_GUILD') && !message.member!.user.isOwner()) await message.util.reply(`${util.emojis.error} You are missing the **MANAGE_GUILD** permission.`); diff --git a/src/commands/moulberry-bush/moulHammer.ts b/src/commands/moulberry-bush/moulHammer.ts index 26841cb..5f1c11a 100644 --- a/src/commands/moulberry-bush/moulHammer.ts +++ b/src/commands/moulberry-bush/moulHammer.ts @@ -8,8 +8,8 @@ export default class MoulHammerCommand extends BushCommand { category: "Moulberry's Bush", description: { content: 'A command to moul hammer members.', - usage: 'moulHammer <user>', - examples: ['moulHammer @IRONM00N'] + usage: ['moul-hammer <user>'], + examples: ['moul-hammer @IRONM00N'] }, args: [ { @@ -27,7 +27,7 @@ export default class MoulHammerCommand extends BushCommand { }); } - public override async exec(message: BushMessage, { user }: { user: User }): Promise<void> { + public override async exec(message: BushMessage, { user }: { user: User }) { await message.delete(); const embed = new MessageEmbed() .setTitle('L') diff --git a/src/commands/moulberry-bush/report.ts b/src/commands/moulberry-bush/report.ts index 24aa4aa..ae6d8c7 100644 --- a/src/commands/moulberry-bush/report.ts +++ b/src/commands/moulberry-bush/report.ts @@ -8,9 +8,9 @@ export default class ReportCommand extends BushCommand { aliases: ['report'], category: "Moulberry's Bush", description: { - content: 'A command to report a user..', - usage: 'report <user> <reason/evidence>', - examples: ['report IRONM00N'] + content: 'A command to report a user.', + usage: ['report <user> <reason/evidence>'], + examples: ['report IRONM00N commands in #general'] }, args: [ { @@ -27,8 +27,8 @@ export default class ReportCommand extends BushCommand { type: 'string', match: 'rest', prompt: { - start: 'What evidence do you have?', - retry: `{error} Provide what did they do wrong.`, + start: 'What did the user do wrong?', + retry: `{error} Provide evidence.`, optional: true } } @@ -37,7 +37,7 @@ export default class ReportCommand extends BushCommand { slashOptions: [ { name: 'user', - description: 'The user you would like to report.', + description: 'Who would you like to report?', type: 'USER', required: true }, @@ -54,10 +54,7 @@ export default class ReportCommand extends BushCommand { }); } - public override async exec( - message: BushMessage, - { member, evidence }: { member: GuildMember; evidence: string } - ): Promise<unknown> { + public override async exec(message: BushMessage, { member, evidence }: { member: GuildMember; evidence: string }) { if (!message.guild || !(await message.guild.hasFeature('reporting'))) return await message.util.reply( `${util.emojis.error} This command can only be used in servers where reporting is enabled.` diff --git a/src/commands/moulberry-bush/rule.ts b/src/commands/moulberry-bush/rule.ts index 909ea92..42745bb 100644 --- a/src/commands/moulberry-bush/rule.ts +++ b/src/commands/moulberry-bush/rule.ts @@ -58,7 +58,7 @@ export default class RuleCommand extends BushCommand { category: "Moulberry's Bush", description: { content: 'A command to state a rule.', - usage: 'rule <rule> [user]', + usage: ['rule <rule> [user]'], examples: ['rule 1 IRONM00N', 'rule 2', 'rules'] }, args: [ @@ -104,7 +104,7 @@ export default class RuleCommand extends BushCommand { }); } - public override async exec(message: BushMessage, { rule, user }: { rule: undefined | number; user: User }): Promise<unknown> { + public override async exec(message: BushMessage, { rule, user }: { rule: undefined | number; user: User }) { const rulesEmbed = new MessageEmbed() .setColor('#ef3929') .setFooter(`Triggered by ${message.author.tag}`, message.author.avatarURL({ dynamic: true }) ?? undefined) @@ -126,7 +126,7 @@ export default class RuleCommand extends BushCommand { await message.delete().catch(() => {}); } return; - async function respond(): Promise<unknown> { + async function respond() { if (!user) { return ( // If the original message was a reply -> imitate it diff --git a/src/commands/moulberry-bush/serverStatus.ts b/src/commands/moulberry-bush/serverStatus.ts index 6c3664e..f656e4c 100644 --- a/src/commands/moulberry-bush/serverStatus.ts +++ b/src/commands/moulberry-bush/serverStatus.ts @@ -8,9 +8,9 @@ export default class ServerStatusCommand extends BushCommand { aliases: ['server-status', 'ss'], category: "Moulberry's Bush", description: { - usage: 'serverstatus', - examples: ['serverstatus', 'ss'], - content: "Gives the status of moulberry's server" + content: "Gives the status of moulberry's server", + usage: ['server-status'], + examples: ['server-status', 'ss'] }, clientPermissions: (m) => util.clientSendAndPermCheck(m, ['EMBED_LINKS'], true), userPermissions: [], @@ -18,7 +18,7 @@ export default class ServerStatusCommand extends BushCommand { }); } - public override async exec(message: BushMessage): Promise<void> { + public override async exec(message: BushMessage) { const msgEmbed: MessageEmbed = new MessageEmbed() .setTitle('Server status') .setDescription(`Checking server:\n${util.emojis.loading}`) diff --git a/src/commands/utilities/activity.ts b/src/commands/utilities/activity.ts index 4066934..a2ca3e2 100644 --- a/src/commands/utilities/activity.ts +++ b/src/commands/utilities/activity.ts @@ -105,10 +105,7 @@ export default class YouTubeCommand extends BushCommand { }); } - public override async exec( - message: BushMessage | BushSlashMessage, - args: { channel: VoiceChannel; activity: string } - ): Promise<unknown> { + public override async exec(message: BushMessage | BushSlashMessage, args: { channel: VoiceChannel; activity: string }) { 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`); diff --git a/src/commands/utilities/calculator.ts b/src/commands/utilities/calculator.ts index 743e9b2..861a356 100644 --- a/src/commands/utilities/calculator.ts +++ b/src/commands/utilities/calculator.ts @@ -9,7 +9,7 @@ export default class CalculatorCommand extends BushCommand { category: 'utilities', description: { content: 'Calculates math expressions.', - usage: 'calculator <expression>', + usage: ['calculator <expression>'], examples: ['calculator 9+10'] }, args: [ @@ -37,7 +37,7 @@ export default class CalculatorCommand extends BushCommand { userPermissions: [] }); } - public override async exec(message: BushMessage | BushSlashMessage, args: { expression: string }): Promise<unknown> { + public override async exec(message: BushMessage | BushSlashMessage, args: { expression: string }) { const decodedEmbed = new MessageEmbed().addField( '📥 Input', await util.inspectCleanRedactCodeblock(args.expression, 'mma') diff --git a/src/commands/utilities/decode.ts b/src/commands/utilities/decode.ts index c497183..6812d91 100644 --- a/src/commands/utilities/decode.ts +++ b/src/commands/utilities/decode.ts @@ -12,7 +12,7 @@ export default class DecodeCommand extends BushCommand { category: 'utilities', description: { content: 'Decode / encode.', - usage: 'decode <from> <to> <data>', + usage: ['decode <from> <to> <data>'], examples: ['decode base64 ascii TmVyZApJbWFnaW5lIGRlY29kaW5nIHRoaXMgbG1hbw=='] }, args: [ @@ -73,7 +73,7 @@ export default class DecodeCommand extends BushCommand { public override async exec( message: BushMessage | AkairoMessage, { from, to, data }: { from: BufferEncoding; to: BufferEncoding; data: string } - ): Promise<unknown> { + ) { const encodeOrDecode = util.capitalizeFirstLetter(message?.util?.parsed?.alias ?? 'decoded'); const decodedEmbed = new MessageEmbed() .setTitle(`${encodeOrDecode} Information`) diff --git a/src/commands/utilities/hash.ts b/src/commands/utilities/hash.ts index a8fdee1..646ed28 100644 --- a/src/commands/utilities/hash.ts +++ b/src/commands/utilities/hash.ts @@ -9,7 +9,7 @@ export default class HashCommand extends BushCommand { category: 'utilities', description: { content: 'Gets the file hash of the given discord link', - usage: 'hash <file url>', + usage: ['hash <fileUrl>'], examples: ['hash https://cdn.discordapp.com/emojis/782630946435366942.png?v=1'] //nice }, args: [ @@ -27,7 +27,7 @@ export default class HashCommand extends BushCommand { }); } - public override async exec(message: BushMessage, { url }: { url: string }): Promise<void> { + public override async exec(message: BushMessage, { url }: { url: string }) { try { const req = await got.get(url); const rawHash = crypto.createHash('md5'); diff --git a/src/commands/utilities/price.ts b/src/commands/utilities/price.ts index 059533b..a232e56 100644 --- a/src/commands/utilities/price.ts +++ b/src/commands/utilities/price.ts @@ -3,58 +3,15 @@ import { MessageEmbed } from 'discord.js'; import Fuse from 'fuse.js'; import got from 'got'; -interface Summary { - amount: number; - pricePerUnit: number; - orders: number; -} - -interface Bazaar { - success: boolean; - lastUpdated: number; - products: { - [key: string]: { - product_id: string; - sell_summary: Summary[]; - buy_summary: Summary[]; - quick_status: { - productId: string; - sellPrice: number; - sellVolume: number; - sellMovingWeek: number; - sellOrders: number; - buyPrice: number; - buyVolume: number; - buyMovingWeek: number; - buyOrders: number; - }; - }; - }; -} - -interface LowestBIN { - [key: string]: number; -} - -interface AuctionAverages { - [key: string]: { - price?: number; - count?: number; - sales?: number; - clean_price?: number; - clean_sales?: number; - }; -} - export default class PriceCommand extends BushCommand { public constructor() { super('price', { aliases: ['price'], category: 'utilities', description: { - usage: 'price <item id>', - examples: ['price ASPECT_OF_THE_END'], - content: 'Finds the price information of an item.' + content: 'Finds the price information of an item.', + usage: ['price <item id>'], + examples: ['price ASPECT_OF_THE_END'] }, args: [ { @@ -94,7 +51,7 @@ export default class PriceCommand extends BushCommand { }); } - public override async exec(message: BushMessage, { item, strict }: { item: string; strict: boolean }): Promise<unknown> { + public override async exec(message: BushMessage, { item, strict }: { item: string; strict: boolean }) { if (message.util.isSlashMessage(message)) await message.interaction.deferReply(); const errors = new Array<string>(); @@ -189,3 +146,46 @@ export default class PriceCommand extends BushCommand { } } } + +interface Summary { + amount: number; + pricePerUnit: number; + orders: number; +} + +interface Bazaar { + success: boolean; + lastUpdated: number; + products: { + [key: string]: { + product_id: string; + sell_summary: Summary[]; + buy_summary: Summary[]; + quick_status: { + productId: string; + sellPrice: number; + sellVolume: number; + sellMovingWeek: number; + sellOrders: number; + buyPrice: number; + buyVolume: number; + buyMovingWeek: number; + buyOrders: number; + }; + }; + }; +} + +interface LowestBIN { + [key: string]: number; +} + +interface AuctionAverages { + [key: string]: { + price?: number; + count?: number; + sales?: number; + clean_price?: number; + clean_sales?: number; + }; +} diff --git a/src/commands/utilities/steal.ts b/src/commands/utilities/steal.ts index 767534e..b92a2da 100644 --- a/src/commands/utilities/steal.ts +++ b/src/commands/utilities/steal.ts @@ -8,7 +8,7 @@ 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/emoji id/url> [name]', + usage: ['steal <emoji/emojiId/url> [name]'], examples: ['steal <:omegaclown:782630946435366942> ironm00n'] }, args: [ @@ -34,7 +34,7 @@ export default class StealCommand extends BushCommand { 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.`); diff --git a/src/commands/utilities/suicide.ts b/src/commands/utilities/suicide.ts index 31bdca0..3709e37 100644 --- a/src/commands/utilities/suicide.ts +++ b/src/commands/utilities/suicide.ts @@ -8,7 +8,7 @@ export default class TemplateCommand extends BushCommand { category: 'utilities', description: { content: 'Mental Health Resources. Credit to https://github.com/dexbiobot/Zeppelin.', - usage: 'suicide', + usage: ['suicide'], examples: ['suicide'] }, slash: true, @@ -18,7 +18,7 @@ export default class TemplateCommand extends BushCommand { }); } - public override async exec(message: BushMessage | BushSlashMessage): Promise<unknown> { + public override async exec(message: BushMessage | BushSlashMessage) { // stolen from https://github.com/dexbiobot/Zeppelin const suicideEmbed = new MessageEmbed() .setTitle('Mental Health Resources') diff --git a/src/commands/utilities/uuid.ts b/src/commands/utilities/uuid.ts index 823d1ff..56566d4 100644 --- a/src/commands/utilities/uuid.ts +++ b/src/commands/utilities/uuid.ts @@ -7,7 +7,7 @@ export default class UuidCommand extends BushCommand { category: 'utilities', description: { content: "Find someone's minecraft uuid", - usage: 'uuid <ign>', + usage: ['uuid <ign>'], examples: ['uuid ironm00n'] }, args: [ @@ -21,12 +21,21 @@ export default class UuidCommand extends BushCommand { } } ], + slash: true, + slashOptions: [ + { + name: 'ign', + description: 'What ign would you like to find the uuid of?', + type: 'STRING', + required: false + } + ], clientPermissions: (m) => util.clientSendAndPermCheck(m), userPermissions: [] }); } - public override async exec(message: BushMessage, { ign }: { ign: { match: any[]; matches: any[] } }): Promise<unknown> { + public override async exec(message: BushMessage, { ign }: { ign: { match: any[]; matches: any[] } }) { if (!ign) return await message.util.reply(`${util.emojis.error} Please enter a valid ign.`); const readableIGN = ign.match[0]; try { diff --git a/src/commands/utilities/viewRaw.ts b/src/commands/utilities/viewRaw.ts index 60529c5..3667d40 100644 --- a/src/commands/utilities/viewRaw.ts +++ b/src/commands/utilities/viewRaw.ts @@ -7,9 +7,9 @@ export default class ViewRawCommand extends BushCommand { aliases: ['view-raw', 'vr'], category: 'utilities', description: { - usage: 'viewraw <message id> <channel>', - examples: ['viewraw 322862723090219008'], - content: 'Shows raw information about a message.' + content: 'Shows raw information about a message.', + usage: ['viewraw <message id> <channel>'], + examples: ['viewraw 322862723090219008'] }, args: [ { @@ -77,7 +77,7 @@ export default class ViewRawCommand extends BushCommand { public override async exec( message: BushMessage | BushSlashMessage, args: { message: Snowflake; channel: TextChannel | NewsChannel | DMChannel; json?: boolean; js: boolean } - ): Promise<unknown> { + ) { if (!args.channel) args.channel = (message.channel as TextChannel | NewsChannel | DMChannel)!; const newMessage = await args.channel.messages.fetch(`${args.message}` as Snowflake).catch(() => null); if (!newMessage) diff --git a/src/commands/utilities/whoHasRole.ts b/src/commands/utilities/whoHasRole.ts index be27c7c..ce7a70e 100644 --- a/src/commands/utilities/whoHasRole.ts +++ b/src/commands/utilities/whoHasRole.ts @@ -8,8 +8,8 @@ export default class WhoHasRoleCommand extends BushCommand { category: 'utilities', description: { content: 'Allows you to view what users have a certain role.', - usage: 'template <requiredArg> [optionalArg]', - examples: ['template 1 2'] + usage: ['who-has-role <role>'], + examples: ['who-has-role admin'] }, args: [ { @@ -37,7 +37,7 @@ export default class WhoHasRoleCommand extends BushCommand { typing: true }); } - public override async exec(message: BushMessage | BushSlashMessage, args: { role: Role }): Promise<unknown> { + public override async exec(message: BushMessage | BushSlashMessage, args: { role: Role }) { if (message.util.isSlash) await (message.interaction as CommandInteraction).deferReply(); const roleMembers = args.role.members.map((member) => `${member.user} (${Util.escapeMarkdown(member.user.tag)})`); diff --git a/src/commands/utilities/wolframAlpha.ts b/src/commands/utilities/wolframAlpha.ts index 426a0c7..ea055e8 100644 --- a/src/commands/utilities/wolframAlpha.ts +++ b/src/commands/utilities/wolframAlpha.ts @@ -9,11 +9,15 @@ export default class WolframAlphaCommand extends BushCommand { category: 'utilities', description: { content: 'Queries Wolfram|Alpha for a result.', - usage: 'wolfram-alpha <expression>', + usage: ['wolfram-alpha <expression>'], examples: ['wolfram-alpha what is the population of france'] }, args: [ - { id: 'image', match: 'flag', flag: '--image' }, + { + id: 'image', + match: 'flag', + flag: '--image' + }, { id: 'expression', type: 'string', @@ -44,10 +48,7 @@ export default class WolframAlphaCommand extends BushCommand { userPermissions: [] }); } - public override async exec( - message: BushMessage | BushSlashMessage, - args: { expression: string; image: boolean } - ): Promise<unknown> { + public override async exec(message: BushMessage | BushSlashMessage, args: { expression: string; image: boolean }) { if (message.util.isSlashMessage(message)) await message.interaction.deferReply(); args.image && void message.util.reply({ content: `${util.emojis.loading} Loading...`, embeds: [] }); diff --git a/src/context-menu-commands/message/viewRaw.ts b/src/context-menu-commands/message/viewRaw.ts index 15d7582..24dfb97 100644 --- a/src/context-menu-commands/message/viewRaw.ts +++ b/src/context-menu-commands/message/viewRaw.ts @@ -12,7 +12,7 @@ export default class ViewRawContextMenuCommand extends ContextMenuCommand { }); } - public override async exec(interaction: ContextMenuInteraction): Promise<unknown> { + public override async exec(interaction: ContextMenuInteraction) { await interaction.deferReply({ ephemeral: true }); const embed = await ViewRawCommand.getRawData(interaction.options.getMessage('message') as BushMessage, { json: false, diff --git a/src/lib/common/AutoMod.ts b/src/lib/common/AutoMod.ts index adc629a..38c488b 100644 --- a/src/lib/common/AutoMod.ts +++ b/src/lib/common/AutoMod.ts @@ -15,7 +15,7 @@ export class AutoMod { void this.handle(); } - private async handle(): Promise<void> { + private async handle() { if (this.message.channel.type === 'DM' || !this.message.guild) return; if (!(await this.message.guild.hasFeature('automod'))) return; diff --git a/src/lib/common/ButtonPaginator.ts b/src/lib/common/ButtonPaginator.ts index 6d4c49a..da595d5 100644 --- a/src/lib/common/ButtonPaginator.ts +++ b/src/lib/common/ButtonPaginator.ts @@ -31,7 +31,7 @@ export class ButtonPaginator { text: string | null = null, deleteOnExit = true, startOn = 1 - ): Promise<void> { + ) { // no need to paginate if there is only one page if (embeds.length === 1) return DeleteButton.send(message, { embeds: embeds }); diff --git a/src/lib/extensions/discord-akairo/BushClient.ts b/src/lib/extensions/discord-akairo/BushClient.ts index 6133dba..32f43be 100644 --- a/src/lib/extensions/discord-akairo/BushClient.ts +++ b/src/lib/extensions/discord-akairo/BushClient.ts @@ -296,7 +296,7 @@ export class BushClient<Ready extends boolean = boolean> extends AkairoClient<Re } // Initialize everything - async #init(): Promise<void> { + async #init() { this.commandHandler.useListenerHandler(this.listenerHandler); this.commandHandler.useInhibitorHandler(this.inhibitorHandler); this.commandHandler.ignorePermissions = this.config.owners; @@ -344,7 +344,7 @@ export class BushClient<Ready extends boolean = boolean> extends AkairoClient<Re this.stats.commandsUsed = await UpdateStatsTask.init(); } - public async dbPreInit(): Promise<void> { + public async dbPreInit() { try { await this.db.authenticate(); Global.initModel(this.db); @@ -369,7 +369,7 @@ export class BushClient<Ready extends boolean = boolean> extends AkairoClient<Re /** * Starts the bot */ - public async start(): Promise<void> { + public async start() { eventsIntercept.patch(this); //@ts-expect-error: no typings this.intercept('ready', async (arg, done) => { diff --git a/src/lib/extensions/discord-akairo/BushClientUtil.ts b/src/lib/extensions/discord-akairo/BushClientUtil.ts index a833c75..32081ed 100644 --- a/src/lib/extensions/discord-akairo/BushClientUtil.ts +++ b/src/lib/extensions/discord-akairo/BushClientUtil.ts @@ -510,7 +510,7 @@ export class BushClientUtil extends ClientUtil { /** * Wait an amount in seconds. */ - public async sleep(s: number): Promise<unknown> { + public async sleep(s: number) { return new Promise((resolve) => setTimeout(resolve, s * 1000)); } diff --git a/src/lib/extensions/discord-akairo/BushCommand.ts b/src/lib/extensions/discord-akairo/BushCommand.ts index 22d4aae..e3066aa 100644 --- a/src/lib/extensions/discord-akairo/BushCommand.ts +++ b/src/lib/extensions/discord-akairo/BushCommand.ts @@ -148,8 +148,8 @@ export interface BushCommandOptions extends Omit<CommandOptions, 'userPermission restrictedGuilds?: Snowflake[]; description: { content: string; - usage: string | string[]; - examples: string | string[]; + usage: string[]; + examples: string[]; }; args?: BushArgumentOptions[] & CustomBushArgumentOptions[]; category: string; @@ -168,6 +168,12 @@ export class BushCommand extends Command { public declare handler: BushCommandHandler; + public declare description: { + content: string; + usage: string[]; + examples: string[]; + }; + /** The command's options */ public options: BushCommandOptions; diff --git a/src/lib/utils/BushLogger.ts b/src/lib/utils/BushLogger.ts index f00c19c..2aaba5b 100644 --- a/src/lib/utils/BushLogger.ts +++ b/src/lib/utils/BushLogger.ts @@ -62,7 +62,7 @@ export class BushLogger { } /** Sends a message to the log channel */ - public static async channelLog(message: BushSendMessageType): Promise<void> { + public static async channelLog(message: BushSendMessageType) { const channel = await util.getConfigChannel('log'); await channel.send(message).catch(() => {}); } @@ -100,7 +100,7 @@ export class BushLogger { * @param sendChannel - Should this also be logged to discord? Defaults to false. * @param depth - The depth the content will inspected. Defaults to 0. */ - public static async verbose(header: string, content: any, sendChannel = false, depth = 0): Promise<void> { + public static async verbose(header: string, content: any, sendChannel = false, depth = 0) { if (!client.config.logging.verbose) return; const newContent = this.#inspectContent(content, depth, true); console.info( @@ -121,7 +121,7 @@ export class BushLogger { * @param sendChannel - Should this also be logged to discord? Defaults to false. * @param depth - The depth the content will inspected. Defaults to 0. */ - public static async info(header: string, content: any, sendChannel = true, depth = 0): Promise<void> { + public static async info(header: string, content: any, sendChannel = true, depth = 0) { if (!client.config.logging.info) return; const newContent = this.#inspectContent(content, depth, true); console.info( @@ -142,7 +142,7 @@ export class BushLogger { * @param sendChannel - Should this also be logged to discord? Defaults to false. * @param depth - The depth the content will inspected. Defaults to 0. */ - public static async warn(header: string, content: any, sendChannel = true, depth = 0): Promise<void> { + public static async warn(header: string, content: any, sendChannel = true, depth = 0) { const newContent = this.#inspectContent(content, depth, true); console.warn( `${chalk.bgYellow(this.#getTimeStamp())} ${chalk.yellow(`[${header}]`)} ${this.#parseFormatting( @@ -166,7 +166,7 @@ export class BushLogger { * @param sendChannel - Should this also be logged to discord? Defaults to false. * @param depth - The depth the content will inspected. Defaults to 0. */ - public static async error(header: string, content: any, sendChannel = true, depth = 0): Promise<void> { + public static async error(header: string, content: any, sendChannel = true, depth = 0) { const newContent = this.#inspectContent(content, depth, true); console.error( `${chalk.bgRedBright(this.#getTimeStamp())} ${chalk.redBright(`[${header}]`)} ${this.#parseFormatting( @@ -190,7 +190,7 @@ export class BushLogger { * @param sendChannel - Should this also be logged to discord? Defaults to false. * @param depth - The depth the content will inspected. Defaults to 0. */ - public static async success(header: string, content: any, sendChannel = true, depth = 0): Promise<void> { + public static async success(header: string, content: any, sendChannel = true, depth = 0) { const newContent = this.#inspectContent(content, depth, true); console.log( `${chalk.bgGreen(this.#getTimeStamp())} ${chalk.greenBright(`[${header}]`)} ${this.#parseFormatting( diff --git a/src/listeners/client/interactionCreate.ts b/src/listeners/client/interactionCreate.ts index c2d12b2..be6cede 100644 --- a/src/listeners/client/interactionCreate.ts +++ b/src/listeners/client/interactionCreate.ts @@ -9,7 +9,7 @@ export default class InteractionCreateListener extends BushListener { }); } - public override async exec(...[interaction]: BushClientEvents['interactionCreate']): Promise<unknown> { + public override async exec(...[interaction]: BushClientEvents['interactionCreate']) { if (!interaction) return; void client.console.verbose( 'interactionVerbose', diff --git a/src/listeners/client/ready.ts b/src/listeners/client/ready.ts index 6f98ceb..a6188d1 100644 --- a/src/listeners/client/ready.ts +++ b/src/listeners/client/ready.ts @@ -10,7 +10,7 @@ export default class ReadyListener extends BushListener { }); } - public override async exec(): Promise<void> { + public override async exec() { process.emit('ready' as any); const tag = `<<${client.user?.tag}>>`, diff --git a/src/listeners/commands/commandBlocked.ts b/src/listeners/commands/commandBlocked.ts index 8329c83..074b6d6 100644 --- a/src/listeners/commands/commandBlocked.ts +++ b/src/listeners/commands/commandBlocked.ts @@ -9,7 +9,7 @@ export default class CommandBlockedListener extends BushListener { }); } - public override async exec(...[message, command, reason]: BushCommandHandlerEvents['commandBlocked']): Promise<unknown> { + public override async exec(...[message, command, reason]: BushCommandHandlerEvents['commandBlocked']) { return await CommandBlockedListener.handleBlocked(message, command, reason); } @@ -17,7 +17,7 @@ export default class CommandBlockedListener extends BushListener { message: Message | BushMessage | BushSlashMessage, command: BushCommand | null, reason?: string - ): Promise<unknown> { + ) { const isSlash = !!command && !!message.util?.isSlash; void client.console.info( diff --git a/src/listeners/commands/commandCooldown.ts b/src/listeners/commands/commandCooldown.ts index 9a57ac0..118b676 100644 --- a/src/listeners/commands/commandCooldown.ts +++ b/src/listeners/commands/commandCooldown.ts @@ -9,7 +9,7 @@ export default class CommandCooldownListener extends BushListener { }); } - public override async exec(...[message, command, remaining]: BushCommandHandlerEvents['cooldown']): Promise<void> { + public override async exec(...[message, command, remaining]: BushCommandHandlerEvents['cooldown']) { void client.console.info( 'commandCooldown', `<<${message.author.tag}>> tried to run <<${ diff --git a/src/listeners/commands/commandError.ts b/src/listeners/commands/commandError.ts index fb1bebe..0ef4ebd 100644 --- a/src/listeners/commands/commandError.ts +++ b/src/listeners/commands/commandError.ts @@ -11,13 +11,13 @@ export default class CommandErrorListener extends BushListener { }); } - public override exec(...[error, message, command]: BushCommandHandlerEvents['error']): Promise<unknown> { + public override exec(...[error, message, command]: BushCommandHandlerEvents['error']) { return CommandErrorListener.handleError(error, message, command); } public static async handleError( ...[error, message, _command]: BushCommandHandlerEvents['error'] | BushCommandHandlerEvents['slashError'] - ): Promise<void> { + ) { const isSlash = message.util!.isSlash; const errorNum = Math.floor(Math.random() * 6969696969) + 69; // hehe funny number const channel = diff --git a/src/listeners/commands/commandMissingPermissions.ts b/src/listeners/commands/commandMissingPermissions.ts index 1917ce0..0bbf916 100644 --- a/src/listeners/commands/commandMissingPermissions.ts +++ b/src/listeners/commands/commandMissingPermissions.ts @@ -9,9 +9,7 @@ export default class CommandMissingPermissionsListener extends BushListener { }); } - public override async exec( - ...[message, command, type, missing]: BushCommandHandlerEvents['missingPermissions'] - ): Promise<unknown> { + public override async exec(...[message, command, type, missing]: BushCommandHandlerEvents['missingPermissions']) { return await CommandMissingPermissionsListener.handleMissing(message, command, type, missing); } @@ -19,7 +17,7 @@ export default class CommandMissingPermissionsListener extends BushListener { ...[message, command, type, missing]: | BushCommandHandlerEvents['missingPermissions'] | BushCommandHandlerEvents['slashMissingPermissions'] - ): Promise<unknown> { + ) { const niceMissing = (missing.includes('ADMINISTRATOR') ? (['ADMINISTRATOR'] as 'ADMINISTRATOR'[]) : missing).map( (perm) => client.consts.mappings.permissions[perm]?.name ?? missing ); diff --git a/src/listeners/commands/messageBlocked.ts b/src/listeners/commands/messageBlocked.ts index fc64802..0b1001c 100644 --- a/src/listeners/commands/messageBlocked.ts +++ b/src/listeners/commands/messageBlocked.ts @@ -8,7 +8,7 @@ export default class MessageBlockedListener extends BushListener { }); } - public override async exec(...[message, reason]: BushCommandHandlerEvents['messageBlocked']): Promise<unknown> { + public override async exec(...[message, reason]: BushCommandHandlerEvents['messageBlocked']) { const reasons = client.consts.BlockedReasons; if ([reasons.CLIENT, reasons.BOT].includes(reason)) return; // return await CommandBlockedListener.handleBlocked(message as Message, null, reason); diff --git a/src/listeners/commands/slashBlocked.ts b/src/listeners/commands/slashBlocked.ts index 851cb5e..6c94187 100644 --- a/src/listeners/commands/slashBlocked.ts +++ b/src/listeners/commands/slashBlocked.ts @@ -10,7 +10,7 @@ export default class SlashBlockedListener extends BushListener { }); } - public override async exec(...[message, command, reason]: BushCommandHandlerEvents['slashBlocked']): Promise<unknown> { + public override async exec(...[message, command, reason]: BushCommandHandlerEvents['slashBlocked']) { return await CommandBlockedListener.handleBlocked(message, command, reason); } } diff --git a/src/listeners/commands/slashCommandError.ts b/src/listeners/commands/slashCommandError.ts index 5ab195f..9b194e5 100644 --- a/src/listeners/commands/slashCommandError.ts +++ b/src/listeners/commands/slashCommandError.ts @@ -9,7 +9,7 @@ export default class SlashCommandErrorListener extends BushListener { category: 'commands' }); } - public override async exec(...[error, message, command]: BushCommandHandlerEvents['slashError']): Promise<void> { + public override async exec(...[error, message, command]: BushCommandHandlerEvents['slashError']) { return await CommandErrorListener.handleError(error, message, command); } } diff --git a/src/listeners/commands/slashMissingPermissions.ts b/src/listeners/commands/slashMissingPermissions.ts index a01b1fa..33a9363 100644 --- a/src/listeners/commands/slashMissingPermissions.ts +++ b/src/listeners/commands/slashMissingPermissions.ts @@ -10,9 +10,7 @@ export default class SlashMissingPermissionsListener extends BushListener { }); } - public override async exec( - ...[message, command, type, missing]: BushCommandHandlerEvents['slashMissingPermissions'] - ): Promise<unknown> { + public override async exec(...[message, command, type, missing]: BushCommandHandlerEvents['slashMissingPermissions']) { return await CommandMissingPermissionsListener.handleMissing(message, command, type, missing); } } diff --git a/src/listeners/commands/slashNotFound.ts b/src/listeners/commands/slashNotFound.ts index 2179c9b..c5d92bd 100644 --- a/src/listeners/commands/slashNotFound.ts +++ b/src/listeners/commands/slashNotFound.ts @@ -9,7 +9,7 @@ export default class SlashNotFoundListener extends BushListener { }); } - public override async exec(...[interaction]: BushCommandHandlerEvents['slashNotFound']): Promise<void> { + public override async exec(...[interaction]: BushCommandHandlerEvents['slashNotFound']) { void client.console.info('slashNotFound', `<<${interaction?.commandName}>> could not be found.`); } } diff --git a/src/listeners/commands/slashStarted.ts b/src/listeners/commands/slashStarted.ts index aaeecbc..e9e4028 100644 --- a/src/listeners/commands/slashStarted.ts +++ b/src/listeners/commands/slashStarted.ts @@ -8,7 +8,7 @@ export default class SlashStartedListener extends BushListener { category: 'commands' }); } - public override async exec(...[message, command]: BushCommandHandlerEvents['slashStarted']): Promise<unknown> { + public override async exec(...[message, command]: BushCommandHandlerEvents['slashStarted']) { return void client.logger.info( 'slashStarted', `The <<${command.id}>> command was used by <<${message.author.tag}>> in ${ diff --git a/src/listeners/custom/bushBan.ts b/src/listeners/custom/bushBan.ts index 09be0a0..ee5ebcf 100644 --- a/src/listeners/custom/bushBan.ts +++ b/src/listeners/custom/bushBan.ts @@ -10,9 +10,7 @@ export default class BushBanListener extends BushListener { }); } - public override async exec( - ...[victim, moderator, guild, reason, caseID, duration, dmSuccess]: BushClientEvents['bushBan'] - ): Promise<unknown> { + public override async exec(...[victim, moderator, guild, reason, caseID, duration, dmSuccess]: BushClientEvents['bushBan']) { const logChannel = await guild.getLogChannel('moderation'); if (!logChannel) return; const user = victim instanceof GuildMember ? victim.user : victim; diff --git a/src/listeners/custom/bushKick.ts b/src/listeners/custom/bushKick.ts index 8df354c..74d90e4 100644 --- a/src/listeners/custom/bushKick.ts +++ b/src/listeners/custom/bushKick.ts @@ -10,9 +10,7 @@ export default class BushKickListener extends BushListener { }); } - public override async exec( - ...[victim, moderator, guild, reason, caseID, dmSuccess]: BushClientEvents['bushKick'] - ): Promise<unknown> { + public override async exec(...[victim, moderator, guild, reason, caseID, dmSuccess]: BushClientEvents['bushKick']) { const logChannel = await guild.getLogChannel('moderation'); if (!logChannel) return; const user = victim instanceof GuildMember ? victim.user : victim; diff --git a/src/listeners/custom/bushMute.ts b/src/listeners/custom/bushMute.ts index ad95cd6..c5b1d74 100644 --- a/src/listeners/custom/bushMute.ts +++ b/src/listeners/custom/bushMute.ts @@ -10,9 +10,7 @@ export default class BushMuteListener extends BushListener { }); } - public override async exec( - ...[victim, moderator, guild, reason, caseID, duration, dmSuccess]: BushClientEvents['bushMute'] - ): Promise<unknown> { + public override async exec(...[victim, moderator, guild, reason, caseID, duration, dmSuccess]: BushClientEvents['bushMute']) { const logChannel = await guild.getLogChannel('moderation'); if (!logChannel) return; const user = victim instanceof GuildMember ? victim.user : victim; diff --git a/src/listeners/custom/bushPunishRole.ts b/src/listeners/custom/bushPunishRole.ts index 943fce5..f34f1d8 100644 --- a/src/listeners/custom/bushPunishRole.ts +++ b/src/listeners/custom/bushPunishRole.ts @@ -10,9 +10,7 @@ export default class BushPunishRoleListener extends BushListener { }); } - public override async exec( - ...[victim, moderator, guild, reason, caseID, duration]: BushClientEvents['bushPunishRole'] - ): Promise<unknown> { + public override async exec(...[victim, moderator, guild, reason, caseID, duration]: BushClientEvents['bushPunishRole']) { const logChannel = await guild.getLogChannel('moderation'); if (!logChannel) return; const user = victim instanceof GuildMember ? victim.user : victim; diff --git a/src/listeners/custom/bushPunishRoleRemove.ts b/src/listeners/custom/bushPunishRoleRemove.ts index 8c48e0e..fa09f44 100644 --- a/src/listeners/custom/bushPunishRoleRemove.ts +++ b/src/listeners/custom/bushPunishRoleRemove.ts @@ -10,9 +10,7 @@ export default class BushPunishRoleRemoveListener extends BushListener { }); } - public override async exec( - ...[victim, moderator, guild, reason, caseID, role]: BushClientEvents['bushPunishRoleRemove'] - ): Promise<unknown> { + public override async exec(...[victim, moderator, guild, reason, caseID, role]: BushClientEvents['bushPunishRoleRemove']) { const logChannel = await guild.getLogChannel('moderation'); if (!logChannel) return; const user = victim instanceof GuildMember ? victim.user : victim; diff --git a/src/listeners/custom/bushPurge.ts b/src/listeners/custom/bushPurge.ts index 7114f4f..ac81916 100644 --- a/src/listeners/custom/bushPurge.ts +++ b/src/listeners/custom/bushPurge.ts @@ -10,7 +10,7 @@ export default class BushPurgeListener extends BushListener { }); } - public override async exec(...[moderator, guild, channel, messages]: BushClientEvents['bushPurge']): Promise<unknown> { + public override async exec(...[moderator, guild, channel, messages]: BushClientEvents['bushPurge']) { const logChannel = await guild.getLogChannel('moderation'); if (!logChannel) return; diff --git a/src/listeners/custom/bushUnban.ts b/src/listeners/custom/bushUnban.ts index 59b0fc9..b2007fd 100644 --- a/src/listeners/custom/bushUnban.ts +++ b/src/listeners/custom/bushUnban.ts @@ -10,9 +10,7 @@ export default class BushUnbanListener extends BushListener { }); } - public override async exec( - ...[victim, moderator, guild, reason, caseID, dmSuccess]: BushClientEvents['bushUnban'] - ): Promise<unknown> { + public override async exec(...[victim, moderator, guild, reason, caseID, dmSuccess]: BushClientEvents['bushUnban']) { const logChannel = await guild.getLogChannel('moderation'); if (!logChannel) return; const user = victim instanceof GuildMember ? victim.user : victim; diff --git a/src/listeners/custom/bushUnmute.ts b/src/listeners/custom/bushUnmute.ts index ba1042b..c34cc14 100644 --- a/src/listeners/custom/bushUnmute.ts +++ b/src/listeners/custom/bushUnmute.ts @@ -10,9 +10,7 @@ export default class BushUnmuteListener extends BushListener { }); } - public override async exec( - ...[victim, moderator, guild, reason, caseID, dmSuccess]: BushClientEvents['bushUnmute'] - ): Promise<unknown> { + public override async exec(...[victim, moderator, guild, reason, caseID, dmSuccess]: BushClientEvents['bushUnmute']) { const logChannel = await guild.getLogChannel('moderation'); if (!logChannel) return; const user = victim instanceof GuildMember ? victim.user : victim; diff --git a/src/listeners/custom/bushUpdateModlog.ts b/src/listeners/custom/bushUpdateModlog.ts index d51696a..62979ae 100644 --- a/src/listeners/custom/bushUpdateModlog.ts +++ b/src/listeners/custom/bushUpdateModlog.ts @@ -10,9 +10,7 @@ export default class BushUpdateModlogListener extends BushListener { }); } - public override async exec( - ...[moderator, modlogID, key, oldModlog, newModlog]: BushClientEvents['bushUpdateModlog'] - ): Promise<unknown> { + public override async exec(...[moderator, modlogID, key, oldModlog, newModlog]: BushClientEvents['bushUpdateModlog']) { const logChannel = await moderator.guild.getLogChannel('moderation'); if (!logChannel) return; diff --git a/src/listeners/custom/bushUpdateSettings.ts b/src/listeners/custom/bushUpdateSettings.ts index 39638cc..b95c077 100644 --- a/src/listeners/custom/bushUpdateSettings.ts +++ b/src/listeners/custom/bushUpdateSettings.ts @@ -10,9 +10,7 @@ export default class BushUpdateSettingsListener extends BushListener { }); } - public override async exec( - ...[setting, guild, oldSettings, newSettings, moderator]: BushClientEvents['bushUpdateSettings'] - ): Promise<unknown> { + public override async exec(...[setting, guild, oldSettings, newSettings, moderator]: BushClientEvents['bushUpdateSettings']) { const logChannel = await guild.getLogChannel('moderation'); if (!logChannel) return; diff --git a/src/listeners/custom/bushWarn.ts b/src/listeners/custom/bushWarn.ts index 16c1d1e..b787b5c 100644 --- a/src/listeners/custom/bushWarn.ts +++ b/src/listeners/custom/bushWarn.ts @@ -10,9 +10,7 @@ export default class BushWarnListener extends BushListener { }); } - public override async exec( - ...[victim, moderator, guild, reason, caseID, dmSuccess]: BushClientEvents['bushWarn'] - ): Promise<unknown> { + public override async exec(...[victim, moderator, guild, reason, caseID, dmSuccess]: BushClientEvents['bushWarn']) { const logChannel = await guild.getLogChannel('moderation'); if (!logChannel) return; const user = victim instanceof GuildMember ? victim.user : victim; diff --git a/src/listeners/guild/guildCreate.ts b/src/listeners/guild/guildCreate.ts index 62149c3..68e9216 100644 --- a/src/listeners/guild/guildCreate.ts +++ b/src/listeners/guild/guildCreate.ts @@ -9,7 +9,7 @@ export default class GuildCreateListener extends BushListener { }); } - public override async exec(...[guild]: BushClientEvents['guildCreate']): Promise<void> { + public override async exec(...[guild]: BushClientEvents['guildCreate']) { void client.console.info( 'guildCreate', `Joined <<${guild.name}>> with <<${guild.memberCount?.toLocaleString()}>> members.` diff --git a/src/listeners/guild/guildMemberAdd.ts b/src/listeners/guild/guildMemberAdd.ts index 867101b..2b964f4 100644 --- a/src/listeners/guild/guildMemberAdd.ts +++ b/src/listeners/guild/guildMemberAdd.ts @@ -10,12 +10,12 @@ export default class GuildMemberAddListener extends BushListener { }); } - public override async exec(...[member]: BushClientEvents['guildMemberAdd']): Promise<void> { + public override async exec(...[member]: BushClientEvents['guildMemberAdd']) { void this.sendWelcomeMessage(member); void this.joinAndStickyRoles(member); } - public async sendWelcomeMessage(member: BushGuildMember): Promise<void> { + public async sendWelcomeMessage(member: BushGuildMember) { if (client.config.isDevelopment) return; const welcomeChannel = await member.guild.getSetting('welcomeChannel'); if (!welcomeChannel) return; @@ -45,7 +45,7 @@ export default class GuildMemberAddListener extends BushListener { ); } - public async joinAndStickyRoles(member: BushGuildMember): Promise<void> { + public async joinAndStickyRoles(member: BushGuildMember) { if (client.config.isDevelopment) return; if (await member.guild.hasFeature('stickyRoles')) { const hadRoles = await StickyRole.findOne({ where: { guild: member.guild.id, user: member.id } }); diff --git a/src/listeners/guild/guildMemberRemove.ts b/src/listeners/guild/guildMemberRemove.ts index ff8d2ac..57ed5ce 100644 --- a/src/listeners/guild/guildMemberRemove.ts +++ b/src/listeners/guild/guildMemberRemove.ts @@ -10,12 +10,12 @@ export default class GuildMemberRemoveListener extends BushListener { }); } - public override async exec(...[member]: BushClientEvents['guildMemberRemove']): Promise<void> { + public override async exec(...[member]: BushClientEvents['guildMemberRemove']) { void this.sendWelcomeMessage(member); void this.stickyRoles(member); } - public async sendWelcomeMessage(member: BushGuildMember | PartialBushGuildMember): Promise<void> { + public async sendWelcomeMessage(member: BushGuildMember | PartialBushGuildMember) { if (client.config.isDevelopment) return; const user = member.partial ? await client.users.fetch(member.id) : member.user; await util.sleep(0.05); // ban usually triggers after member leave @@ -47,7 +47,7 @@ export default class GuildMemberRemoveListener extends BushListener { ); } - public async stickyRoles(member: BushGuildMember | PartialBushGuildMember): Promise<void> { + public async stickyRoles(member: BushGuildMember | PartialBushGuildMember) { if (!(await member.guild.hasFeature('stickyRoles'))) return; if (member.partial) { await member.guild.members.fetch(); // try to prevent in the future diff --git a/src/listeners/guild/syncUnban.ts b/src/listeners/guild/syncUnban.ts index 48f068f..db654b8 100644 --- a/src/listeners/guild/syncUnban.ts +++ b/src/listeners/guild/syncUnban.ts @@ -9,7 +9,7 @@ export default class SyncUnbanListener extends BushListener { }); } - public override async exec(...[ban]: BushClientEvents['guildBanRemove']): Promise<void> { + public override async exec(...[ban]: BushClientEvents['guildBanRemove']) { const bans = await ActivePunishment.findAll({ where: { user: ban.user.id, diff --git a/src/listeners/message/autoPublisher.ts b/src/listeners/message/autoPublisher.ts index aa91f5d..fa5cb51 100644 --- a/src/listeners/message/autoPublisher.ts +++ b/src/listeners/message/autoPublisher.ts @@ -9,7 +9,7 @@ export default class autoPublisherListener extends BushListener { }); } - public override async exec(...[message]: BushClientEvents['messageCreate']): Promise<void> { + public override async exec(...[message]: BushClientEvents['messageCreate']) { if (!message.guild || !(await message.guild.hasFeature('autoPublish'))) return; const autoPublishChannels = await message.guild.getSetting('autoPublishChannels'); if (autoPublishChannels) { diff --git a/src/listeners/message/automodCreate.ts b/src/listeners/message/automodCreate.ts index 9619cf8..0bf4c29 100644 --- a/src/listeners/message/automodCreate.ts +++ b/src/listeners/message/automodCreate.ts @@ -9,7 +9,7 @@ export default class AutomodMessageCreateListener extends BushListener { }); } - public override async exec(...[message]: BushClientEvents['messageCreate']): Promise<unknown> { + public override async exec(...[message]: BushClientEvents['messageCreate']) { return new AutoMod(message); } } diff --git a/src/listeners/message/automodUpdate.ts b/src/listeners/message/automodUpdate.ts index 18fbb2e..ff89a09 100644 --- a/src/listeners/message/automodUpdate.ts +++ b/src/listeners/message/automodUpdate.ts @@ -9,7 +9,7 @@ export default class AutomodMessageUpdateListener extends BushListener { }); } - public override async exec(...[_, newMessage]: BushClientEvents['messageUpdate']): Promise<unknown> { + public override async exec(...[_, newMessage]: BushClientEvents['messageUpdate']) { const fullMessage = newMessage.partial ? await newMessage.fetch() : (newMessage as BushMessage); return new AutoMod(fullMessage); } diff --git a/src/listeners/message/blacklistedFile.ts b/src/listeners/message/blacklistedFile.ts index dd72d88..11af787 100644 --- a/src/listeners/message/blacklistedFile.ts +++ b/src/listeners/message/blacklistedFile.ts @@ -64,7 +64,7 @@ export default class BlacklistedFileListener extends BushListener { }); } - public override async exec(...[message]: BushClientEvents['messageCreate']): Promise<void> { + public override async exec(...[message]: BushClientEvents['messageCreate']) { if (!message.guild || !(await message.guild.hasFeature('blacklistedFile'))) return; const embedAttachments = message.embeds.filter((e) => ['image', 'video', 'gifv'].includes(e.type)); const foundEmojis = [...message.content.matchAll(/<(?<animated>a?):\w+:(?<id>\d+)>/g)]; diff --git a/src/listeners/message/boosterMessage.ts b/src/listeners/message/boosterMessage.ts index cb595d4..a161784 100644 --- a/src/listeners/message/boosterMessage.ts +++ b/src/listeners/message/boosterMessage.ts @@ -9,7 +9,7 @@ export default class BoosterMessageListener extends BushListener { }); } - public override async exec(...[message]: BushClientEvents['messageCreate']): Promise<unknown> { + public override async exec(...[message]: BushClientEvents['messageCreate']) { if (!message.guild || !(await message.guild?.hasFeature('boosterMessageReact'))) return; if (message.type === 'USER_PREMIUM_GUILD_SUBSCRIPTION') { return await message.react('<:nitroboost:785160348885975062>').catch(() => { diff --git a/src/listeners/message/directMessage.ts b/src/listeners/message/directMessage.ts index f0cb532..41e4792 100644 --- a/src/listeners/message/directMessage.ts +++ b/src/listeners/message/directMessage.ts @@ -10,7 +10,7 @@ export default class DirectMessageListener extends BushListener { }); } - public override async exec(...[message]: BushClientEvents['messageCreate']): Promise<void> { + public override async exec(...[message]: BushClientEvents['messageCreate']) { if (message.channel.type === 'DM') { if (!(message.author.id == client.user!.id) && message.author.bot) return; if (client.cache.global.blacklistedUsers.includes(message.author.id)) return; diff --git a/src/listeners/message/level.ts b/src/listeners/message/level.ts index f263ff2..06e0485 100644 --- a/src/listeners/message/level.ts +++ b/src/listeners/message/level.ts @@ -10,7 +10,7 @@ export default class LevelListener extends BushListener { category: 'message' }); } - public override async exec(...[message]: BushCommandHandlerEvents['messageInvalid']): Promise<void> { + public override async exec(...[message]: BushCommandHandlerEvents['messageInvalid']) { if (message.author.bot || !message.author || !message.guild) return; if (this.#levelCooldowns.has(`${message.guild.id}-${message.author.id}`)) return; diff --git a/src/listeners/other/consoleListener.ts b/src/listeners/other/consoleListener.ts index 6092f05..fab9119 100644 --- a/src/listeners/other/consoleListener.ts +++ b/src/listeners/other/consoleListener.ts @@ -10,7 +10,7 @@ export default class ConsoleListener extends BushListener { }); } - public override async exec(line: string): Promise<void> { + public override async exec(line: string) { if (line.startsWith('eval ') || line.startsWith('ev ')) { /* eslint-disable @typescript-eslint/no-unused-vars */ const sh = promisify(exec), diff --git a/src/listeners/other/exit.ts b/src/listeners/other/exit.ts index e860eda..4ea6068 100644 --- a/src/listeners/other/exit.ts +++ b/src/listeners/other/exit.ts @@ -8,7 +8,7 @@ export default class ExitListener extends BushListener { }); } - public override async exec(code: number): Promise<void> { + public override async exec(code: number) { await client.console.error('processExit', `Process ended with code <<${code}>>.`); } } diff --git a/src/listeners/other/promiseRejection.ts b/src/listeners/other/promiseRejection.ts index dc21c3f..45e647e 100644 --- a/src/listeners/other/promiseRejection.ts +++ b/src/listeners/other/promiseRejection.ts @@ -9,7 +9,7 @@ export default class PromiseRejectionListener extends BushListener { }); } - public override async exec(error: Error): Promise<void> { + public override async exec(error: Error) { void client.console.error( 'promiseRejection', `An unhanded promise rejection occurred:\n${typeof error == 'object' ? error.stack : error}`, diff --git a/src/listeners/other/uncaughtException.ts b/src/listeners/other/uncaughtException.ts index 4ba47bd..8eb4294 100644 --- a/src/listeners/other/uncaughtException.ts +++ b/src/listeners/other/uncaughtException.ts @@ -9,7 +9,7 @@ export default class UncaughtExceptionListener extends BushListener { }); } - public override async exec(error: Error): Promise<void> { + public override async exec(error: Error) { void client.console.error( 'uncaughtException', `An uncaught exception occurred:\n${typeof error == 'object' ? error.stack : error}`, diff --git a/src/listeners/other/warning.ts b/src/listeners/other/warning.ts index d85e9e3..51f67ba 100644 --- a/src/listeners/other/warning.ts +++ b/src/listeners/other/warning.ts @@ -9,7 +9,7 @@ export default class WarningListener extends BushListener { }); } - public override async exec(error: Error): Promise<void> { + public override async exec(error: Error) { void client.console.warn('warning', `A warning occurred:\n${typeof error == 'object' ? error.stack : error}`, false); void client.console.channelError({ embeds: [ diff --git a/src/tasks/cpuUsage.ts b/src/tasks/cpuUsage.ts index a7398d7..b22923a 100644 --- a/src/tasks/cpuUsage.ts +++ b/src/tasks/cpuUsage.ts @@ -8,7 +8,7 @@ export default class CpuUsageTask extends BushTask { runOnStart: true }); } - public override async exec(): Promise<void> { + public override async exec() { const cpu = await osu.cpu.usage(client.stats.cpu === undefined ? 100 : 60_000); client.stats.cpu = cpu; } diff --git a/src/tasks/removeExpiredPunishements.ts b/src/tasks/removeExpiredPunishements.ts index a5f9d73..b39cdb7 100644 --- a/src/tasks/removeExpiredPunishements.ts +++ b/src/tasks/removeExpiredPunishements.ts @@ -8,7 +8,7 @@ export default class RemoveExpiredPunishmentsTask extends BushTask { runOnStart: true }); } - public override async exec(): Promise<void> { + public override async exec() { const expiredEntries = await ActivePunishment.findAll({ where: { expires: { diff --git a/src/tasks/updateCache.ts b/src/tasks/updateCache.ts index b8df336..11d6ca9 100644 --- a/src/tasks/updateCache.ts +++ b/src/tasks/updateCache.ts @@ -9,18 +9,18 @@ export default class UpdateCacheTask extends BushTask { runOnStart: false // done in preinit task }); } - public override async exec(): Promise<void> { + public override async exec() { await UpdateCacheTask.updateGlobalCache(client); await UpdateCacheTask.#updateGuildCache(client); void client.logger.verbose(`UpdateCache`, `Updated cache.`); } - public static async init(client: BushClient): Promise<void> { + public static async init(client: BushClient) { await UpdateCacheTask.updateGlobalCache(client); await UpdateCacheTask.#updateGuildCache(client); } - private static async updateGlobalCache(client: BushClient): Promise<void> { + private static async updateGlobalCache(client: BushClient) { const environment = config.environment; const row: { [x: string]: any } = ((await Global.findByPk(environment)) ?? (await Global.create({ environment }))).toJSON(); @@ -32,7 +32,7 @@ export default class UpdateCacheTask extends BushTask { } } - static async #updateGuildCache(client: BushClient): Promise<void> { + static async #updateGuildCache(client: BushClient) { const rows = await Guild.findAll(); for (const row of rows) { client.cache.guilds.set(row.id, row.toJSON() as Guild); diff --git a/src/tasks/updateStats.ts b/src/tasks/updateStats.ts index 74a8114..ad3cb45 100644 --- a/src/tasks/updateStats.ts +++ b/src/tasks/updateStats.ts @@ -8,7 +8,7 @@ export default class UpdateStatsTask extends BushTask { runOnStart: true }); } - public override async exec(): Promise<void> { + public override async exec() { const row = (await Stat.findByPk(client.config.environment)) ?? (await Stat.create({ environment: client.config.environment })); row.commandsUsed = client.stats.commandsUsed; diff --git a/src/tasks/updateSuperUsers.ts b/src/tasks/updateSuperUsers.ts index e0e51f5..19dbb1e 100644 --- a/src/tasks/updateSuperUsers.ts +++ b/src/tasks/updateSuperUsers.ts @@ -8,7 +8,7 @@ export default class UpdateSuperUsersTask extends BushTask { runOnStart: true }); } - public override async exec(): Promise<void> { + public override async exec() { const superUsers = client.guilds.cache .get(client.config.supportGuild.id) ?.members.cache.filter( @@ -187,6 +187,88 @@ __metadata: languageName: node linkType: hard +"@sentry/core@npm:6.13.3": + version: 6.13.3 + resolution: "@sentry/core@npm:6.13.3" + dependencies: + "@sentry/hub": 6.13.3 + "@sentry/minimal": 6.13.3 + "@sentry/types": 6.13.3 + "@sentry/utils": 6.13.3 + tslib: ^1.9.3 + checksum: a1bcf995136568407a6104f29fdb9c6aa3ebdb15bea41be3008f018cffcd5782c8766959bfe3605b00fc10a174f4db61856c139cebc94a1976761caeb8843d0a + languageName: node + linkType: hard + +"@sentry/hub@npm:6.13.3": + version: 6.13.3 + resolution: "@sentry/hub@npm:6.13.3" + dependencies: + "@sentry/types": 6.13.3 + "@sentry/utils": 6.13.3 + tslib: ^1.9.3 + checksum: 6e017cf863dd813a13f719d0d7bfef5c2943cb49b7632f7110645a20845fc3da8f6512cd268aa6504c84097cfdb5e6f3a60c0205ffd29610ae5cf8648f2c41e5 + languageName: node + linkType: hard + +"@sentry/minimal@npm:6.13.3": + version: 6.13.3 + resolution: "@sentry/minimal@npm:6.13.3" + dependencies: + "@sentry/hub": 6.13.3 + "@sentry/types": 6.13.3 + tslib: ^1.9.3 + checksum: 0fad0470d6dcd4b9a4e0873d108898ac68511e4b12585976990f34df2cff05f46b696496419695aded726372b1c344a8b83d533baf16c2c4b40298835467a46f + languageName: node + linkType: hard + +"@sentry/node@npm:^6.13.3": + version: 6.13.3 + resolution: "@sentry/node@npm:6.13.3" + dependencies: + "@sentry/core": 6.13.3 + "@sentry/hub": 6.13.3 + "@sentry/tracing": 6.13.3 + "@sentry/types": 6.13.3 + "@sentry/utils": 6.13.3 + cookie: ^0.4.1 + https-proxy-agent: ^5.0.0 + lru_map: ^0.3.3 + tslib: ^1.9.3 + checksum: 1d02c92447bab983fc194ab72ce7a131f260c67eed877adb8cc42a422336dc50da5d40a5a46839eff8f67901f7ffe3606539ee1375a1b90f0827254800b2fbf1 + languageName: node + linkType: hard + +"@sentry/tracing@npm:6.13.3, @sentry/tracing@npm:^6.13.3": + version: 6.13.3 + resolution: "@sentry/tracing@npm:6.13.3" + dependencies: + "@sentry/hub": 6.13.3 + "@sentry/minimal": 6.13.3 + "@sentry/types": 6.13.3 + "@sentry/utils": 6.13.3 + tslib: ^1.9.3 + checksum: 14906613c0002a101d397d5527f232328eea5852cae10333a875c411190339552040f54d65818dd6190e3cff4d7d8eab79bf346af6176c06910e7fa5314cfad8 + languageName: node + linkType: hard + +"@sentry/types@npm:6.13.3": + version: 6.13.3 + resolution: "@sentry/types@npm:6.13.3" + checksum: e5641cb0c0e4917ebc510ea74f1be501a3e34230d823b25ead36a9edb8a52dc1f08161cad43e9a18ac591b507abe78aae1ccd6a08000d0105c66c0b44125781c + languageName: node + linkType: hard + +"@sentry/utils@npm:6.13.3": + version: 6.13.3 + resolution: "@sentry/utils@npm:6.13.3" + dependencies: + "@sentry/types": 6.13.3 + tslib: ^1.9.3 + checksum: 22feb050ef38bdff9651223d045b0a7b8611f256288c0c8f8953e3d1789fdccb864b381c044345604698e1b2b2bcbf4967e044b68295fe509a26e74a02bb8284 + languageName: node + linkType: hard + "@sindresorhus/is@npm:^4.0.0, @sindresorhus/is@npm:^4.0.1": version: 4.2.0 resolution: "@sindresorhus/is@npm:4.2.0" @@ -742,6 +824,8 @@ __metadata: version: 0.0.0-use.local resolution: "bush-bot@workspace:." dependencies: + "@sentry/node": ^6.13.3 + "@sentry/tracing": ^6.13.3 "@types/express": ^4.17.13 "@types/humanize-duration": ^3.25.1 "@types/lodash": ^4.14.175 @@ -975,6 +1059,13 @@ __metadata: languageName: node linkType: hard +"cookie@npm:^0.4.1": + version: 0.4.1 + resolution: "cookie@npm:0.4.1" + checksum: bd7c47f5d94ab70ccdfe8210cde7d725880d2fcda06d8e375afbdd82de0c8d3b73541996e9ce57d35f67f672c4ee6d60208adec06b3c5fc94cebb85196084cf8 + languageName: node + linkType: hard + "core-util-is@npm:~1.0.0": version: 1.0.3 resolution: "core-util-is@npm:1.0.3" @@ -2003,6 +2094,13 @@ __metadata: languageName: node linkType: hard +"lru_map@npm:^0.3.3": + version: 0.3.3 + resolution: "lru_map@npm:0.3.3" + checksum: ca9dd43c65ed7a4f117c548028101c5b6855e10923ea9d1f635af53ad20c5868ff428c364d454a7b57fe391b89c704982275410c3c5099cca5aeee00d76e169a + languageName: node + linkType: hard + "make-dir@npm:^3.1.0": version: 3.1.0 resolution: "make-dir@npm:3.1.0" @@ -3184,7 +3282,7 @@ __metadata: languageName: node linkType: hard -"tslib@npm:^1.8.1": +"tslib@npm:^1.8.1, tslib@npm:^1.9.3": version: 1.14.1 resolution: "tslib@npm:1.14.1" checksum: dbe628ef87f66691d5d2959b3e41b9ca0045c3ee3c7c7b906cc1e328b39f199bb1ad9e671c39025bd56122ac57dfbf7385a94843b1cc07c60a4db74795829acd |