mirror of
https://github.com/veganhacktivists/arabot.git
synced 2025-05-19 03:44:13 +02:00
refactor(arabot): change subcommand logic to sapphire's plugin
This commit is contained in:
parent
8d83365c8a
commit
80f201a1ad
@ -17,7 +17,8 @@
|
||||
along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
import { Command, RegisterBehavior } from '@sapphire/framework';
|
||||
import { RegisterBehavior } from '@sapphire/framework';
|
||||
import { Subcommand } from '@sapphire/plugin-subcommands';
|
||||
import type { Guild, TextChannel } from 'discord.js';
|
||||
import {
|
||||
CategoryChannel,
|
||||
@ -29,18 +30,28 @@ import {
|
||||
} from 'discord.js';
|
||||
import IDs from '#utils/ids';
|
||||
|
||||
export class PrivateCommand extends Command {
|
||||
public constructor(context: Command.Context, options: Command.Options) {
|
||||
export class PrivateCommand extends Subcommand {
|
||||
public constructor(context: Subcommand.Context, options: Subcommand.Options) {
|
||||
super(context, {
|
||||
...options,
|
||||
name: 'private',
|
||||
subcommands: [
|
||||
{
|
||||
name: 'create',
|
||||
chatInputRun: 'create',
|
||||
},
|
||||
{
|
||||
name: 'delete',
|
||||
chatInputRun: 'delete',
|
||||
},
|
||||
],
|
||||
description: 'Creates/deletes private channels for a user',
|
||||
preconditions: ['CoordinatorOnly'],
|
||||
});
|
||||
}
|
||||
|
||||
// Registers that this is a slash command
|
||||
public override registerApplicationCommands(registry: Command.Registry) {
|
||||
public override registerApplicationCommands(registry: Subcommand.Registry) {
|
||||
registry.registerChatInputCommand(
|
||||
(builder) => builder
|
||||
.setName(this.name)
|
||||
@ -60,32 +71,7 @@ export class PrivateCommand extends Command {
|
||||
);
|
||||
}
|
||||
|
||||
// Command run
|
||||
public async chatInputRun(interaction: Command.ChatInputCommandInteraction) {
|
||||
const subcommand = interaction.options.getSubcommand(true);
|
||||
|
||||
// Checks what subcommand was run
|
||||
switch (subcommand) {
|
||||
case 'create': {
|
||||
await this.create(interaction);
|
||||
return;
|
||||
}
|
||||
case 'delete': {
|
||||
await this.delete(interaction);
|
||||
return;
|
||||
}
|
||||
default: {
|
||||
// If subcommand is invalid
|
||||
await interaction.reply({
|
||||
content: 'Invalid sub command!',
|
||||
ephemeral: true,
|
||||
fetchReply: true,
|
||||
});
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private async create(interaction: Command.ChatInputCommandInteraction) {
|
||||
public async create(interaction: Subcommand.ChatInputCommandInteraction) {
|
||||
// Get the arguments
|
||||
const user = interaction.options.getUser('user');
|
||||
const mod = interaction.member;
|
||||
@ -227,7 +213,7 @@ export class PrivateCommand extends Command {
|
||||
});
|
||||
}
|
||||
|
||||
private async delete(interaction: Command.ChatInputCommandInteraction) {
|
||||
public async delete(interaction: Subcommand.ChatInputCommandInteraction) {
|
||||
// Get the arguments
|
||||
const user = interaction.options.getUser('user');
|
||||
const mod = interaction.member;
|
||||
|
@ -17,12 +17,8 @@
|
||||
along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
import {
|
||||
Args,
|
||||
Command,
|
||||
container,
|
||||
RegisterBehavior,
|
||||
} from '@sapphire/framework';
|
||||
import { Args, container, RegisterBehavior } from '@sapphire/framework';
|
||||
import { Subcommand } from '@sapphire/plugin-subcommands';
|
||||
import {
|
||||
ChannelType,
|
||||
GuildMember,
|
||||
@ -33,30 +29,42 @@ import {
|
||||
import type { TextChannel } from 'discord.js';
|
||||
import IDs from '#utils/ids';
|
||||
|
||||
export class DiversityCommand extends Command {
|
||||
public constructor(context: Command.Context, options: Command.Options) {
|
||||
export class DiversityCommand extends Subcommand {
|
||||
public constructor(context: Subcommand.Context, options: Subcommand.Options) {
|
||||
super(context, {
|
||||
...options,
|
||||
name: 'diversity',
|
||||
aliases: ['di', 'div'],
|
||||
subcommands: [
|
||||
{
|
||||
name: 'role',
|
||||
default: true,
|
||||
chatInputRun: 'roleCommand',
|
||||
messageRun: 'roleMessage',
|
||||
},
|
||||
{
|
||||
name: 'toggleopen',
|
||||
chatInputRun: 'toggleOpen',
|
||||
},
|
||||
],
|
||||
description: 'Commands for the Diversity Coordinators',
|
||||
preconditions: ['DiversityCoordinatorOnly'],
|
||||
});
|
||||
}
|
||||
|
||||
// Registers that this is a slash command
|
||||
public override registerApplicationCommands(registry: Command.Registry) {
|
||||
public override registerApplicationCommands(registry: Subcommand.Registry) {
|
||||
registry.registerChatInputCommand(
|
||||
(builder) => builder
|
||||
.setName(this.name)
|
||||
.setDescription(this.description)
|
||||
.addSubcommand((command) => command.setName('toggleopen')
|
||||
.setDescription('Toggles read-only for vegans in diversity section'))
|
||||
.addSubcommand((command) => command.setName('role')
|
||||
.setDescription('Gives/removes the diversity role')
|
||||
.addUserOption((option) => option.setName('user')
|
||||
.setDescription('User to give/remove diversity to')
|
||||
.setRequired(true))),
|
||||
.setRequired(true)))
|
||||
.addSubcommand((command) => command.setName('toggleopen')
|
||||
.setDescription('Toggles read-only for vegans in diversity section')),
|
||||
{
|
||||
behaviorWhenNotIdentical: RegisterBehavior.Overwrite,
|
||||
},
|
||||
@ -64,32 +72,7 @@ export class DiversityCommand extends Command {
|
||||
}
|
||||
|
||||
// Command run
|
||||
public async chatInputRun(interaction: Command.ChatInputCommandInteraction) {
|
||||
const subcommand = interaction.options.getSubcommand(true);
|
||||
|
||||
// Checks what subcommand was run
|
||||
switch (subcommand) {
|
||||
case 'toggleopen': {
|
||||
await this.toggleOpen(interaction);
|
||||
return;
|
||||
}
|
||||
case 'role': {
|
||||
await this.roleCommand(interaction);
|
||||
return;
|
||||
}
|
||||
default: {
|
||||
// If subcommand is invalid
|
||||
await interaction.reply({
|
||||
content: 'Invalid sub command!',
|
||||
ephemeral: true,
|
||||
fetchReply: true,
|
||||
});
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Command run
|
||||
public async toggleOpen(interaction: Command.ChatInputCommandInteraction) {
|
||||
public async toggleOpen(interaction: Subcommand.ChatInputCommandInteraction) {
|
||||
// Check if guild is not null
|
||||
if (interaction.guild === null) {
|
||||
await interaction.reply({
|
||||
@ -148,7 +131,7 @@ export class DiversityCommand extends Command {
|
||||
});
|
||||
}
|
||||
|
||||
public async roleCommand(interaction: Command.ChatInputCommandInteraction) {
|
||||
public async roleCommand(interaction: Subcommand.ChatInputCommandInteraction) {
|
||||
// TODO add database updates
|
||||
// Get the arguments
|
||||
const user = interaction.options.getUser('user');
|
||||
@ -201,7 +184,7 @@ export class DiversityCommand extends Command {
|
||||
.catch(() => {});
|
||||
}
|
||||
|
||||
public async messageRun(message: Message, args: Args) {
|
||||
public async roleMessage(message: Message, args: Args) {
|
||||
// Get arguments
|
||||
let user: GuildMember;
|
||||
try {
|
||||
|
@ -17,7 +17,8 @@
|
||||
along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
import { Command, RegisterBehavior, Args } from '@sapphire/framework';
|
||||
import { RegisterBehavior, Args } from '@sapphire/framework';
|
||||
import { Subcommand } from '@sapphire/plugin-subcommands';
|
||||
import {
|
||||
ChannelType,
|
||||
EmbedBuilder,
|
||||
@ -41,17 +42,38 @@ import IDs from '#utils/ids';
|
||||
|
||||
// TODO add a check when they join the server to give the user the sus role again
|
||||
|
||||
export class SusCommand extends Command {
|
||||
public constructor(context: Command.Context) {
|
||||
export class SusCommand extends Subcommand {
|
||||
public constructor(context: Subcommand.Context, options: Subcommand.Options) {
|
||||
super(context, {
|
||||
...options,
|
||||
name: 'sus',
|
||||
subcommands: [
|
||||
{
|
||||
name: 'add',
|
||||
default: true,
|
||||
chatInputRun: 'addNote',
|
||||
messageRun: 'addMessage',
|
||||
},
|
||||
{
|
||||
name: 'view',
|
||||
chatInputRun: 'listNote',
|
||||
},
|
||||
{
|
||||
name: 'remove',
|
||||
chatInputRun: 'removeNote',
|
||||
},
|
||||
{
|
||||
name: 'purge',
|
||||
chatInputRun: 'removeAllNotes',
|
||||
},
|
||||
],
|
||||
description: 'Notes about users that are sus',
|
||||
preconditions: [['VerifierOnly', 'ModOnly']],
|
||||
});
|
||||
}
|
||||
|
||||
// Registers that this is a slash command
|
||||
public override registerApplicationCommands(registry: Command.Registry) {
|
||||
public override registerApplicationCommands(registry: Subcommand.Registry) {
|
||||
registry.registerChatInputCommand(
|
||||
(builder) => builder
|
||||
.setName(this.name)
|
||||
@ -89,41 +111,8 @@ export class SusCommand extends Command {
|
||||
);
|
||||
}
|
||||
|
||||
// Command run
|
||||
public async chatInputRun(interaction: Command.ChatInputCommandInteraction) {
|
||||
const subcommand = interaction.options.getSubcommand(true);
|
||||
|
||||
// Checks what subcommand was run
|
||||
switch (subcommand) {
|
||||
case 'add': {
|
||||
await this.addNote(interaction);
|
||||
return;
|
||||
}
|
||||
case 'view': {
|
||||
await this.listNote(interaction);
|
||||
return;
|
||||
}
|
||||
case 'remove': {
|
||||
await this.removeNote(interaction);
|
||||
return;
|
||||
}
|
||||
case 'purge': {
|
||||
await this.removeAllNotes(interaction);
|
||||
return;
|
||||
}
|
||||
default: {
|
||||
// If subcommand is invalid
|
||||
await interaction.reply({
|
||||
content: 'Invalid sub command!',
|
||||
ephemeral: true,
|
||||
fetchReply: true,
|
||||
});
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Subcommand to add sus note
|
||||
private async addNote(interaction: Command.ChatInputCommandInteraction) {
|
||||
public async addNote(interaction: Subcommand.ChatInputCommandInteraction) {
|
||||
// Get the arguments
|
||||
const user = interaction.options.getUser('user');
|
||||
const note = interaction.options.getString('note');
|
||||
@ -177,7 +166,7 @@ export class SusCommand extends Command {
|
||||
});
|
||||
}
|
||||
|
||||
private async listNote(interaction: Command.ChatInputCommandInteraction) {
|
||||
public async listNote(interaction: Subcommand.ChatInputCommandInteraction) {
|
||||
// Get the arguments
|
||||
const user = interaction.options.getUser('user');
|
||||
const { guild } = interaction;
|
||||
@ -243,7 +232,7 @@ export class SusCommand extends Command {
|
||||
});
|
||||
}
|
||||
|
||||
private async removeNote(interaction: Command.ChatInputCommandInteraction) {
|
||||
public async removeNote(interaction: Subcommand.ChatInputCommandInteraction) {
|
||||
// Get the arguments
|
||||
const noteId = interaction.options.getInteger('id');
|
||||
const { guild, channel } = interaction;
|
||||
@ -368,7 +357,7 @@ export class SusCommand extends Command {
|
||||
});
|
||||
}
|
||||
|
||||
private async removeAllNotes(interaction: Command.ChatInputCommandInteraction) {
|
||||
public async removeAllNotes(interaction: Subcommand.ChatInputCommandInteraction) {
|
||||
// Get the arguments
|
||||
const user = interaction.options.getUser('user');
|
||||
const { guild, channel } = interaction;
|
||||
@ -488,7 +477,7 @@ export class SusCommand extends Command {
|
||||
|
||||
// Non Application Command method of adding a sus note
|
||||
// xlevra begged me to add this... so I guess here it is
|
||||
public async messageRun(message: Message, args: Args) {
|
||||
public async addMessage(message: Message, args: Args) {
|
||||
// Get arguments
|
||||
let user: GuildMember;
|
||||
try {
|
||||
|
Loading…
x
Reference in New Issue
Block a user