diff --git a/src/commands/fun/happy.ts b/src/commands/fun/happy.ts
index 02f1073..2294475 100644
--- a/src/commands/fun/happy.ts
+++ b/src/commands/fun/happy.ts
@@ -27,7 +27,7 @@ export class HappyCommand extends Command {
...options,
name: 'happy',
description: 'Express your happiness',
- preconditions: ['PatreonOnly'],
+ preconditions: [['PatreonOnly', 'CoordinatorOnly']],
});
}
diff --git a/src/commands/fun/hug.ts b/src/commands/fun/hug.ts
index 35bea0b..cec1b58 100644
--- a/src/commands/fun/hug.ts
+++ b/src/commands/fun/hug.ts
@@ -27,7 +27,7 @@ export class HugCommand extends Command {
...options,
name: 'hug',
description: 'Hug a user',
- preconditions: ['PatreonOnly'],
+ preconditions: [['PatreonOnly', 'CoordinatorOnly']],
});
}
diff --git a/src/commands/fun/kill.ts b/src/commands/fun/kill.ts
index 66b39c3..b584180 100644
--- a/src/commands/fun/kill.ts
+++ b/src/commands/fun/kill.ts
@@ -27,7 +27,7 @@ export class KillCommand extends Command {
...options,
name: 'kill',
description: 'Kill a user',
- preconditions: ['PatreonOnly'],
+ preconditions: [['PatreonOnly', 'CoordinatorOnly']],
});
}
diff --git a/src/commands/fun/poke.ts b/src/commands/fun/poke.ts
index 0b011fe..c0c46fe 100644
--- a/src/commands/fun/poke.ts
+++ b/src/commands/fun/poke.ts
@@ -27,7 +27,7 @@ export class PokeCommand extends Command {
...options,
name: 'poke',
description: 'Poke a user',
- preconditions: ['PatreonOnly'],
+ preconditions: [['PatreonOnly', 'CoordinatorOnly']],
});
}
diff --git a/src/commands/fun/sad.ts b/src/commands/fun/sad.ts
index 8bafcdb..64655b5 100644
--- a/src/commands/fun/sad.ts
+++ b/src/commands/fun/sad.ts
@@ -27,7 +27,7 @@ export class SadCommand extends Command {
...options,
name: 'sad',
description: 'Express your sadness',
- preconditions: ['PatreonOnly'],
+ preconditions: [['PatreonOnly', 'CoordinatorOnly']],
});
}
diff --git a/src/commands/fun/shrug.ts b/src/commands/fun/shrug.ts
new file mode 100644
index 0000000..9a5ccd7
--- /dev/null
+++ b/src/commands/fun/shrug.ts
@@ -0,0 +1,63 @@
+// SPDX-License-Identifier: GPL-3.0-or-later
+/*
+ Animal Rights Advocates Discord Bot
+ Copyright (C) 2022 Anthony Berg
+
+ This program is free software: you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation, either version 3 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see .
+ */
+
+import { Command, RegisterBehavior } from '@sapphire/framework';
+import { MessageEmbed } from 'discord.js';
+import { Shrug } from '../../utils/gifs';
+
+export class ShrugCommand extends Command {
+ public constructor(context: Command.Context, options: Command.Options) {
+ super(context, {
+ ...options,
+ name: 'shrug',
+ description: 'Ugh... whatever...',
+ preconditions: ['CoordinatorOnly'],
+ });
+ }
+
+ // Registers that this is a slash command
+ public override registerApplicationCommands(registry: Command.Registry) {
+ registry.registerChatInputCommand(
+ (builder) => builder
+ .setName(this.name)
+ .setDescription(this.description),
+ {
+ behaviorWhenNotIdentical: RegisterBehavior.Overwrite,
+ },
+ );
+ }
+
+ // Command run
+ public async chatInputRun(interaction: Command.ChatInputInteraction) {
+ // Get the user
+ // TODO exception handling
+ const member = interaction.member!.user;
+ const memberGuildMember = interaction.guild!.members.cache.get(member.id)!;
+
+ // Creates the embed for the shrug reaction
+ const randomShrug = Shrug[Math.floor(Math.random() * Shrug.length)];
+ const shrugEmbed = new MessageEmbed()
+ .setColor('#001980')
+ .setTitle(`${memberGuildMember.displayName} is whatever...`)
+ .setImage(randomShrug);
+
+ // Send the embed
+ await interaction.reply({ embeds: [shrugEmbed], fetchReply: true });
+ }
+}
diff --git a/src/preconditions/CoordinatorOnly.ts b/src/preconditions/CoordinatorOnly.ts
new file mode 100644
index 0000000..90cbf55
--- /dev/null
+++ b/src/preconditions/CoordinatorOnly.ts
@@ -0,0 +1,52 @@
+// SPDX-License-Identifier: GPL-3.0-or-later
+/*
+ Animal Rights Advocates Discord Bot
+ Copyright (C) 2022 Anthony Berg
+
+ This program is free software: you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation, either version 3 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see .
+*/
+
+import { AllFlowsPrecondition } from '@sapphire/framework';
+import type { CommandInteraction, ContextMenuInteraction, Message } from 'discord.js';
+import { IDs } from '../utils/ids';
+import type { GuildMember } from 'discord.js';
+
+export class CoordinatorOnlyPrecondition extends AllFlowsPrecondition {
+ public override async messageRun(message: Message) {
+ // for message command
+ return this.checkCoordinator(message.member!);
+ }
+
+ public override async chatInputRun(interaction: CommandInteraction) {
+ // for slash command
+ return this.checkCoordinator(interaction.member! as GuildMember);
+ }
+
+ public override async contextMenuRun(interaction: ContextMenuInteraction) {
+ // for context menu command
+ return this.checkCoordinator(interaction.member! as GuildMember);
+ }
+
+ private async checkCoordinator(user: GuildMember) {
+ return user.roles.cache.has(IDs.roles.staff.coordinator)
+ ? this.ok()
+ : this.error({ message: 'Only coordinators can run this command!' });
+ }
+}
+
+declare module '@sapphire/framework' {
+ interface Preconditions {
+ CoordinatorOnly: never;
+ }
+}
diff --git a/src/utils/gifs.ts b/src/utils/gifs.ts
index c019497..14820e8 100644
--- a/src/utils/gifs.ts
+++ b/src/utils/gifs.ts
@@ -56,3 +56,10 @@ export const Sad = [
'https://c.tenor.com/rD4KDir7lO0AAAAC/sad-pikachu.gif',
'https://c.tenor.com/IeiDwBPDrZYAAAAC/peach-cat.gif',
];
+
+export const Shrug = [
+ 'https://c.tenor.com/Bh2MF64_0JoAAAAC/whatever-shrug.gif',
+ 'https://c.tenor.com/jQ-g5x_lPf0AAAAC/friends-joey.gif',
+ 'https://c.tenor.com/U06tekgz-OQAAAAC/city-hunter-ryo-saeba.gif',
+ 'https://c.tenor.com/mOR-MnUI3QEAAAAC/confused-white-persian-guardian.gif',
+];