aboutsummaryrefslogtreecommitdiff
path: root/src/commands
diff options
context:
space:
mode:
Diffstat (limited to 'src/commands')
-rw-r--r--src/commands/dev/__template.ts2
-rw-r--r--src/commands/dev/_testDB.ts25
-rw-r--r--src/commands/dev/_testDuration.ts53
-rw-r--r--src/commands/moderation/_lockdown.ts1
-rw-r--r--src/commands/moderation/ban.ts3
-rw-r--r--src/commands/moderation/evidence.ts60
-rw-r--r--src/commands/moderation/kick.ts2
-rw-r--r--src/commands/moderation/modlog.ts12
-rw-r--r--src/commands/moderation/mute.ts1
-rw-r--r--src/commands/moderation/purge.ts70
-rw-r--r--src/commands/moderation/unban.ts2
-rw-r--r--src/commands/moderation/unmute.ts3
-rw-r--r--src/commands/moderation/warn.ts1
-rw-r--r--src/commands/moulberry-bush/level.ts2
-rw-r--r--src/commands/utilities/hash.ts2
-rw-r--r--src/commands/utilities/youtube.ts59
16 files changed, 208 insertions, 90 deletions
diff --git a/src/commands/dev/__template.ts b/src/commands/dev/__template.ts
index 949e04e..be4f7a7 100644
--- a/src/commands/dev/__template.ts
+++ b/src/commands/dev/__template.ts
@@ -14,7 +14,6 @@ export default class TemplateCommand extends BushCommand {
{
id: 'required_argument',
type: 'string',
-
prompt: {
start: 'What would you like to set your first argument to be?',
retry: '{error} Pick a valid argument.',
@@ -24,7 +23,6 @@ export default class TemplateCommand extends BushCommand {
{
id: 'optional_argument',
type: 'string',
-
prompt: {
start: 'What would you like to set your second argument to be?',
retry: '{error} Pick a valid argument.',
diff --git a/src/commands/dev/_testDB.ts b/src/commands/dev/_testDB.ts
deleted file mode 100644
index e1fddb4..0000000
--- a/src/commands/dev/_testDB.ts
+++ /dev/null
@@ -1,25 +0,0 @@
-// import { BushCommand, BushSlashMessage, Global } from '@lib';
-// import { Message } from 'discord.js';
-// import { inspect } from 'util';
-
-// export default class TestDurationCommand extends BushCommand {
-// public constructor() {
-// super('db', {
-// aliases: ['db'],
-// category: 'dev',
-// description: {
-// content: '',
-// usage: '',
-// examples: ['']
-// },
-// slash: false,
-// hidden: true,
-// ownerOnly: true,
-// completelyHide: true
-// });
-// }
-
-// override async exec(message: Message | BushSlashMessage): Promise<unknown> {
-// return await message.util.reply(await util.codeblock(inspect((await Global.findOne()).environment), 2000, 'js'));
-// }
-// }
diff --git a/src/commands/dev/_testDuration.ts b/src/commands/dev/_testDuration.ts
deleted file mode 100644
index 0591518..0000000
--- a/src/commands/dev/_testDuration.ts
+++ /dev/null
@@ -1,53 +0,0 @@
-// import { BushCommand, BushSlashMessage } from '@lib';
-// import { stripIndents } from 'common-tags';
-// import { Message } from 'discord.js';
-
-// export default class TestDurationCommand extends BushCommand {
-// public constructor() {
-// super('testduration', {
-// aliases: ['testduration'],
-// category: 'dev',
-// description: {
-// content: 'Tests duration parsing.',
-// usage: 'testduration [reason]',
-// examples: ['testduration']
-// },
-// args: [
-// {
-// id: 'reason',
-// type: 'contentWithDuration',
-// match: 'rest',
-// prompt: {
-// start: 'Enter text and a duration here.',
-// retry: '{error} Error parsing duration and text.',
-// optional: true
-// }
-// }
-// ],
-// slash: true,
-// slashOptions: [
-// {
-// name: 'reason',
-// description: 'Enter text and a duration here.',
-// type: 'STRING',
-// required: false
-// }
-// ],
-// hidden: true,
-// ownerOnly: true
-// });
-// }
-
-// async exec(
-// message: Message | BushSlashMessage,
-// { reason }: { reason?: { duration: number; contentWithoutTime: string } }
-// ): Promise<unknown> {
-// const rawDuration = reason.duration;
-// const text = reason.contentWithoutTime;
-// const humanizedDuration = util.humanizeDuration(rawDuration);
-// return await message.util.reply(stripIndents`
-// **rawDuration:** ${rawDuration}
-// **text:** ${text}
-// **humanizedDuration:** ${humanizedDuration}`);
-// }
-// }
diff --git a/src/commands/moderation/_lockdown.ts b/src/commands/moderation/_lockdown.ts
index 374e8f1..32dbd5b 100644
--- a/src/commands/moderation/_lockdown.ts
+++ b/src/commands/moderation/_lockdown.ts
@@ -31,6 +31,7 @@ export default class LockdownCommand extends BushCommand {
userPermissions: ['SEND_MESSAGES']
});
}
+
public override async exec(message: BushMessage | BushSlashMessage, { all }: { all: boolean }): Promise<unknown> {
return await message.util.reply('no');
if (!all) {
diff --git a/src/commands/moderation/ban.ts b/src/commands/moderation/ban.ts
index cfa3e31..bda0e2b 100644
--- a/src/commands/moderation/ban.ts
+++ b/src/commands/moderation/ban.ts
@@ -80,7 +80,8 @@ export default class BanCommand extends BushCommand {
userPermissions: ['BAN_MEMBERS']
});
}
- override async exec(
+
+ public override async exec(
message: BushMessage | BushSlashMessage,
{
user,
diff --git a/src/commands/moderation/evidence.ts b/src/commands/moderation/evidence.ts
new file mode 100644
index 0000000..96c3944
--- /dev/null
+++ b/src/commands/moderation/evidence.ts
@@ -0,0 +1,60 @@
+import { BushCommand, BushMessage, BushSlashMessage } from '@lib';
+
+export default class EvidenceCommand extends BushCommand {
+ public constructor() {
+ super('evidence', {
+ aliases: ['evidence'],
+ category: 'moderation',
+ description: {
+ content: 'Add evidence to a modlog case.',
+ usage: 'evidence <caseID> <evidence>',
+ examples: ['evidence ']
+ },
+ args: [
+ {
+ id: 'required_argument',
+ type: 'string',
+ prompt: {
+ start: 'What would you like to set your first argument to be?',
+ retry: '{error} Pick a valid argument.',
+ optional: false
+ }
+ },
+ {
+ id: 'optional_argument',
+ type: 'string',
+ prompt: {
+ start: 'What would you like to set your second argument to be?',
+ retry: '{error} Pick a valid argument.',
+ optional: true
+ }
+ }
+ ],
+ slash: true,
+ slashOptions: [
+ {
+ name: 'required_argument',
+ description: 'What would you like to set your first argument to be?',
+ type: 'STRING',
+ required: true
+ },
+ {
+ name: 'optional_argument',
+ description: 'What would you like to set your second argument to be?',
+ type: 'STRING',
+ required: false
+ }
+ ],
+ superUserOnly: true,
+ ownerOnly: true,
+ channel: 'guild',
+ hidden: true,
+ clientPermissions: ['SEND_MESSAGES'],
+ userPermissions: ['SEND_MESSAGES']
+ });
+ }
+
+ public override async exec(message: BushMessage | BushSlashMessage): Promise<unknown> {
+ return await message.util.reply(`${util.emojis.error} Do not use the template command.`);
+ }
+}
diff --git a/src/commands/moderation/kick.ts b/src/commands/moderation/kick.ts
index c425124..2fc133e 100644
--- a/src/commands/moderation/kick.ts
+++ b/src/commands/moderation/kick.ts
@@ -55,7 +55,7 @@ export default class KickCommand extends BushCommand {
});
}
- override async exec(
+ public override async exec(
message: BushMessage | BushSlashMessage,
{ user, reason, force }: { user: BushUser; reason?: string; force: boolean }
): Promise<unknown> {
diff --git a/src/commands/moderation/modlog.ts b/src/commands/moderation/modlog.ts
index 8f727a5..84bb5b5 100644
--- a/src/commands/moderation/modlog.ts
+++ b/src/commands/moderation/modlog.ts
@@ -34,7 +34,7 @@ export default class ModlogCommand extends BushCommand {
});
}
- private generateModlogInfo(log: ModLog) {
+ #generateModlogInfo(log: ModLog): string {
const modLog = [
`**Case ID**: ${log.id}`,
`**Type**: ${log.type.toLowerCase()}`,
@@ -43,10 +43,14 @@ export default class ModlogCommand extends BushCommand {
];
if (log.duration) modLog.push(`**Duration**: ${util.humanizeDuration(log.duration)}`);
modLog.push(`**Reason**: ${log.reason || 'No Reason Specified.'}`);
+ if (log.evidence) modLog.push(`**Evidence:** ${log.evidence}`);
return modLog.join(`\n`);
}
- override async exec(message: BushMessage | BushSlashMessage, { search }: { search: BushUser | string }): Promise<unknown> {
+ public override async exec(
+ message: BushMessage | BushSlashMessage,
+ { search }: { search: BushUser | string }
+ ): Promise<unknown> {
const foundUser = search instanceof User ? search : await util.resolveUserAsync(search);
if (foundUser) {
const logs = await ModLog.findAll({
@@ -59,7 +63,7 @@ export default class ModlogCommand extends BushCommand {
if (!logs.length) return message.util.reply(`${util.emojis.error} **${foundUser.tag}** does not have any modlogs.`);
const niceLogs: string[] = [];
for (const log of logs) {
- niceLogs.push(this.generateModlogInfo(log));
+ niceLogs.push(this.#generateModlogInfo(log));
}
const chunked: string[][] = util.chunk(niceLogs, 3);
const embedPages = chunked.map(
@@ -76,7 +80,7 @@ export default class ModlogCommand extends BushCommand {
if (!entry) return message.util.send(`${util.emojis.error} That modlog does not exist.`);
const embed = new MessageEmbed({
title: `Case ${entry.id}`,
- description: this.generateModlogInfo(entry),
+ description: this.#generateModlogInfo(entry),
color: util.colors.default
});
return await util.buttonPaginate(message, [embed]);
diff --git a/src/commands/moderation/mute.ts b/src/commands/moderation/mute.ts
index df8e235..9f66558 100644
--- a/src/commands/moderation/mute.ts
+++ b/src/commands/moderation/mute.ts
@@ -56,6 +56,7 @@ export default class MuteCommand extends BushCommand {
userPermissions: ['MANAGE_MESSAGES']
});
}
+
public override async exec(
message: BushMessage | BushSlashMessage,
{ user, reason, force }: { user: BushUser; reason?: { duration: number; contentWithoutTime: string }; force: boolean }
diff --git a/src/commands/moderation/purge.ts b/src/commands/moderation/purge.ts
new file mode 100644
index 0000000..f4a53a8
--- /dev/null
+++ b/src/commands/moderation/purge.ts
@@ -0,0 +1,70 @@
+import { BushCommand, BushMessage } from '../../lib';
+
+export default class PurgeCommand extends BushCommand {
+ public constructor() {
+ super('purge', {
+ aliases: ['purge'],
+ category: 'moderation',
+ description: {
+ content: 'A command to mass delete messages.',
+ usage: 'purge <amount>',
+ examples: ['Purge 20']
+ },
+ args: [
+ {
+ id: 'amount',
+ customType: util.arg.range('integer', 1, 100, true),
+ prompt: {
+ start: 'How many messages would you like to purge?',
+ retry: '{error} Please pick a number between 1 and 100.'
+ }
+ },
+ {
+ id: 'bot',
+ match: 'flag',
+ flag: '--bot'
+ },
+ { 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: 'bot',
+ description: 'Would you like to only delete messages that are from bots?',
+ type: 'BOOLEAN',
+ required: false
+ }
+ ],
+ clientPermissions: ['MANAGE_MESSAGES', 'SEND_MESSAGES', 'EMBED_LINKS'],
+ userPermissions: ['MANAGE_MESSAGES'],
+ channel: 'guild'
+ });
+ }
+
+ public override async exec(message: BushMessage, args: { amount: number; bot: boolean }): Promise<unknown> {
+ 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} `);
+
+ const messages = (await message.channel.messages.fetch({ limit: args.amount })).filter((message) => filter(message));
+ const filter = (filterMessage: BushMessage): boolean => {
+ const shouldFilter = new Array<boolean>();
+ if (args.bot) {
+ shouldFilter.push(filterMessage.author.bot);
+ }
+ };
+
+ const purged = await message.channel.bulkDelete(messages, true).catch(() => {});
+ if (!purged) return message.util.reply(`${util.emojis.error} Failed to purge messages.`).catch(() => {});
+ else {
+ await message.util
+ .send(`${util.emojis.success} Successfully purged **${purged.size}** messages.`)
+ .then(async (purgeMessage: BushMessage) => {
+ if (!message.util.isSlash) {
+ await util.sleep(5);
+ await purgeMessage.delete().catch(() => {});
+ }
+ });
+ }
+ }
+}
diff --git a/src/commands/moderation/unban.ts b/src/commands/moderation/unban.ts
index 522c715..545d75c 100644
--- a/src/commands/moderation/unban.ts
+++ b/src/commands/moderation/unban.ts
@@ -51,7 +51,7 @@ export default class UnbanCommand extends BushCommand {
userPermissions: ['BAN_MEMBERS']
});
}
- override async exec(
+ public override async exec(
message: BushMessage | BushSlashMessage,
{ user, reason }: { user: BushUser; reason?: string }
): Promise<unknown> {
diff --git a/src/commands/moderation/unmute.ts b/src/commands/moderation/unmute.ts
index 6cdb08b..918c27f 100644
--- a/src/commands/moderation/unmute.ts
+++ b/src/commands/moderation/unmute.ts
@@ -50,7 +50,8 @@ export default class UnmuteCommand extends BushCommand {
userPermissions: ['MANAGE_MESSAGES']
});
}
- override async exec(
+
+ public override async exec(
message: BushMessage | BushSlashMessage,
{ user, reason }: { user: BushUser; reason?: string }
): Promise<unknown> {
diff --git a/src/commands/moderation/warn.ts b/src/commands/moderation/warn.ts
index 1067033..1aa14c3 100644
--- a/src/commands/moderation/warn.ts
+++ b/src/commands/moderation/warn.ts
@@ -54,6 +54,7 @@ export default class WarnCommand extends BushCommand {
userPermissions: ['MANAGE_MESSAGES']
});
}
+
public override async exec(
message: BushMessage | BushSlashMessage,
{ user, reason, force }: { user: BushUser; reason: string; force: boolean }
diff --git a/src/commands/moulberry-bush/level.ts b/src/commands/moulberry-bush/level.ts
index fef4538..c202863 100644
--- a/src/commands/moulberry-bush/level.ts
+++ b/src/commands/moulberry-bush/level.ts
@@ -136,7 +136,7 @@ export default class LevelCommand extends BushCommand {
}
}
- override async exec(message: BushMessage | BushSlashMessage, { user }: { user?: BushUser }): Promise<void> {
+ public override async exec(message: BushMessage | BushSlashMessage, { user }: { user?: BushUser }): Promise<void> {
// await message.reply(
// new MessageAttachment(
// await this.getImage(user || message.author),
diff --git a/src/commands/utilities/hash.ts b/src/commands/utilities/hash.ts
index 633a263..16ace93 100644
--- a/src/commands/utilities/hash.ts
+++ b/src/commands/utilities/hash.ts
@@ -3,7 +3,7 @@ import got from 'got';
import { BushCommand, BushMessage } from '../../lib';
export default class HashCommand extends BushCommand {
- constructor() {
+ public constructor() {
super('hash', {
aliases: ['hash'],
category: 'utilities',
diff --git a/src/commands/utilities/youtube.ts b/src/commands/utilities/youtube.ts
new file mode 100644
index 0000000..0198173
--- /dev/null
+++ b/src/commands/utilities/youtube.ts
@@ -0,0 +1,59 @@
+import { VoiceChannel } from 'discord.js';
+import { BushCommand, BushMessage, BushSlashMessage } from '../../lib';
+
+export default class YouTubeCommand extends BushCommand {
+ constructor() {
+ super('youtube', {
+ aliases: ['youtube', 'yt'],
+ category: 'utilities',
+ description: {
+ content: "Allows the user to have access to discord's in-app YouTube experiment.",
+ usage: 'yt <channel>',
+ examples: ['yt 785281831788216364']
+ },
+ args: [
+ {
+ id: 'channel',
+ type: 'voiceChannel',
+ prompt: {
+ start: 'What channel would you like to use?',
+ retry: '{error} Choose a valid voice channel'
+ }
+ }
+ ],
+ slash: true,
+ slashOptions: [
+ {
+ name: 'channel',
+ description: 'What channel would you like to use?',
+ type: 'CHANNEL',
+ required: true
+ }
+ ],
+ clientPermissions: ['SEND_MESSAGES'],
+ userPermissions: ['SEND_MESSAGES']
+ });
+ }
+
+ public override async exec(message: BushMessage | BushSlashMessage, args: { channel: VoiceChannel }): Promise<unknown> {
+ if (!args.channel?.id || args.channel?.type != 'GUILD_VOICE')
+ return await message.util.reply(`${util.emojis.error} Choose a valid voice channel`);
+
+ // @ts-ignore: jank typings
+ // prettier-ignore
+ const invite = await this.client.api.channels(args.channel.id).invites.post({
+ data: {
+ validate: null,
+ max_age: 604800,
+ max_uses: 0,
+ target_type: 2,
+ target_application_id: '755600276941176913',
+ temporary: false
+ }
+ })
+ .catch(() => {});
+ if (!invite || !invite.code)
+ return await message.util.reply(`${this.client.util.emojis.error} An error occurred while generating your invite.`);
+ else return await message.util.send(`https://discord.gg/${invite.code}`);
+ }
+}