diff --git a/src/commands/guild.ts b/src/commands/guild.ts index dcb6e78..c5a03e5 100644 --- a/src/commands/guild.ts +++ b/src/commands/guild.ts @@ -1,9 +1,9 @@ import { InteractionContextType, SlashCommandBuilder } from "discord.js" import { devMessage, embedColor } from "~/config/options" import { ICommand } from "~/typings" -import guildInfo from "./guild/info" -import guildMember from "./guild/member" -import guildTop from "./guild/top" +import guildInfo, { infoSub } from "./guild/info" +import guildMember, { memberSub } from "./guild/member" +import guildTop, { topSub } from "./guild/top" export default { name: "guild", @@ -15,83 +15,26 @@ export default { data: new SlashCommandBuilder() .setName("guild") .setDescription("Subcommands for guilds") - .addSubcommand(subcommand => - subcommand - .setName("member") - .setDescription("Get info about a guild memeber") - .addStringOption(option => - option - .setName("ign") - .setDescription("The IGN of the player.") - .setMinLength(3) - .setMaxLength(16) - .setRequired(true) - ) - ) - .addSubcommand(subcommand => - subcommand - .setName("info") - .setDescription("Get info about a guild.") - .addStringOption(option => - option - .setName("query") - .setDescription("The query to search for. [Default: player]") - .setRequired(true) - ) - .addStringOption(option => - option - .setName("type") - .setDescription("The type of query.") - .addChoices( - { name: "Guild Member", value: "ign" }, - { name: "Guild Name", value: "name" }, - { name: "Guild Id", value: "id" } - ) - ) - ) - .addSubcommand(subcommand => - subcommand - .setName("top") - .setDescription("Get the top guild members based on gexp") - .addStringOption(option => - option - .setName("query") - .setDescription("The query to search for. [Default: player]") - .setRequired(true) - ) - .addStringOption(option => - option - .setName("type") - .setDescription("The type of query.") - .addChoices( - { name: "Guild Member", value: "ign" }, - { name: "Guild Name", value: "name" }, - { name: "Guild Id", value: "id" } - ) - ) - .addNumberOption(option => - option - .setName("amount") - .setDescription("The amount of guild members to show. [Default: 10]") - ) - ) + .addSubcommand(memberSub) + .addSubcommand(infoSub) + .addSubcommand(topSub) .setContexts(InteractionContextType.Guild), async execute({ interaction }) { const subcommand = interaction.options.getSubcommand() if (subcommand === "member") { - await guildMember(interaction) + await guildMember({ interaction }) return } if (subcommand === "info") { - await guildInfo(interaction) + await guildInfo({ interaction }) return } if (subcommand === "top") { - await guildTop(interaction) + await guildTop({ interaction }) return } diff --git a/src/commands/guild/info.ts b/src/commands/guild/info.ts index 9805771..26787c8 100644 --- a/src/commands/guild/info.ts +++ b/src/commands/guild/info.ts @@ -1,9 +1,30 @@ +import { SlashCommandSubcommandBuilder } from "discord.js" import { devMessage, embedColor } from "~/config/options" import { IGuildData, SubCommand } from "~/typings" import { dateTimeFormatter, numberFormatter } from "~/utils/Functions/intlFormaters" import { getGuild, getIGN, getPlayer, getUUID, guildLevel } from "~/utils/Hypixel" -const cmd: SubCommand = async (interaction) => { +export const infoSub = new SlashCommandSubcommandBuilder() + .setName("info") + .setDescription("Get info about a guild.") + .addStringOption(option => + option + .setName("query") + .setDescription("The query to search for. [Default: player]") + .setRequired(true) + ) + .addStringOption(option => + option + .setName("type") + .setDescription("The type of query.") + .addChoices( + { name: "Guild Member", value: "ign" }, + { name: "Guild Name", value: "name" }, + { name: "Guild Id", value: "id" } + ) + ) + +const cmd: SubCommand = async ({ interaction }) => { await interaction.deferReply() const query = interaction.options.getString("query")! diff --git a/src/commands/guild/member.ts b/src/commands/guild/member.ts index 77d2341..ff2b4fd 100644 --- a/src/commands/guild/member.ts +++ b/src/commands/guild/member.ts @@ -1,9 +1,22 @@ +import { SlashCommandSubcommandBuilder } from "discord.js" import { devMessage, embedColor } from "~/config/options" import { SubCommand } from "~/typings" import { dateTimeFormatter, numberFormatter } from "~/utils/Functions/intlFormaters" import { getGuild, getHeadURL, getPlayer, getUUID } from "~/utils/Hypixel" -const cmd: SubCommand = async (interaction) => { +export const memberSub = new SlashCommandSubcommandBuilder() + .setName("member") + .setDescription("Get info about a guild memeber") + .addStringOption(option => + option + .setName("ign") + .setDescription("The IGN of the player.") + .setMinLength(3) + .setMaxLength(16) + .setRequired(true) + ) + +const cmd: SubCommand = async ({ interaction }) => { await interaction.deferReply() const ign = interaction.options.getString("ign")! diff --git a/src/commands/guild/top.ts b/src/commands/guild/top.ts index 67ada54..fdf3298 100644 --- a/src/commands/guild/top.ts +++ b/src/commands/guild/top.ts @@ -1,10 +1,36 @@ +import { SlashCommandSubcommandBuilder } from "discord.js" import { devMessage, embedColor } from "~/config/options" import { IGuildData, SubCommand } from "~/typings" import { numberFormatter } from "~/utils/Functions/intlFormaters" import { getGuild, getIGN, getPlayer, getUUID } from "~/utils/Hypixel" import { redis } from "~/utils/Illegitimate" -const cmd: SubCommand = async (interaction) => { +export const topSub = new SlashCommandSubcommandBuilder() + .setName("top") + .setDescription("Get the top guild members based on gexp") + .addStringOption(option => + option + .setName("query") + .setDescription("The query to search for. [Default: player]") + .setRequired(true) + ) + .addStringOption(option => + option + .setName("type") + .setDescription("The type of query.") + .addChoices( + { name: "Guild Member", value: "ign" }, + { name: "Guild Name", value: "name" }, + { name: "Guild Id", value: "id" } + ) + ) + .addNumberOption(option => + option + .setName("amount") + .setDescription("The amount of guild members to show. [Default: 10]") + ) + +const cmd: SubCommand = async ({ interaction }) => { await interaction.deferReply() const query = interaction.options.getString("query")! diff --git a/src/commands/staff.ts b/src/commands/staff.ts index 175b140..85a11dd 100644 --- a/src/commands/staff.ts +++ b/src/commands/staff.ts @@ -1,11 +1,11 @@ import { InteractionContextType, PermissionFlagsBits, SlashCommandBuilder } from "discord.js" import { devMessage, embedColor } from "~/config/options" import { ICommand } from "~/typings" -import beast from "./staff/beast" -import help from "./staff/help" -import prune from "./staff/prune" -import removeGuildRoles from "./staff/removeguildroles" -import updateAll from "./staff/updateall" +import beast, { beastSub } from "./staff/beast" +import help, { helpSub } from "./staff/help" +import prune, { pruneSub } from "./staff/prune" +import removeGuildRoles, { removeGuildRolesSub } from "./staff/removeguildroles" +import updateAll, { updateAllSub } from "./staff/updateall" export default { name: "staff", @@ -17,37 +17,11 @@ export default { data: new SlashCommandBuilder() .setName("staff") .setDescription("Subcommands for staff") - .addSubcommand(subcommand => - subcommand - .setName("help") - .setDescription("Get help with staff commands") - ) - .addSubcommand(subcommand => - subcommand - .setName("beast") - .setDescription("Check a user for beast reqs") - .addStringOption(option => - option - .setName("ign") - .setDescription("The IGN of the player.") - .setRequired(true) - ) - ) - .addSubcommand(subcommand => - subcommand - .setName("prune") - .setDescription("Update the discord roles of all guild members") - ) - .addSubcommand(subcommand => - subcommand - .setName("removeguildroles") - .setDescription("Remove guild roles from non members") - ) - .addSubcommand(subcommand => - subcommand - .setName("updateall") - .setDescription("Update the discord roles of all guild members") - ) + .addSubcommand(helpSub) + .addSubcommand(beastSub) + .addSubcommand(pruneSub) + .addSubcommand(removeGuildRolesSub) + .addSubcommand(updateAllSub) .setDefaultMemberPermissions(PermissionFlagsBits.Administrator) .setContexts(InteractionContextType.Guild), @@ -55,27 +29,27 @@ export default { const subcommand = interaction.options.getSubcommand() if (subcommand === "help") { - help(interaction, client) + help({ interaction, client }) return } if (subcommand === "beast") { - beast(interaction) + beast({ interaction }) return } if (subcommand === "prune") { - prune(interaction) + prune({ interaction }) return } if (subcommand === "removeguildroles") { - removeGuildRoles(interaction) + removeGuildRoles({ interaction }) return } if (subcommand === "updateall") { - updateAll(interaction) + updateAll({ interaction }) return } diff --git a/src/commands/staff/beast.ts b/src/commands/staff/beast.ts index 28582b0..6bdf69c 100644 --- a/src/commands/staff/beast.ts +++ b/src/commands/staff/beast.ts @@ -1,9 +1,20 @@ +import { SlashCommandSubcommandBuilder } from "discord.js" import { devMessage, embedColor } from "~/config/options" import { beastbwfkdr, beastbwstars, beastduelswins, beastswkdr, beastswstars, bwwins, duelswlr } from "~/config/reqs" import { SubCommand } from "~/typings" import { bedwarsLevel, getGuild, getHeadURL, getPlayer, getUUID, hypixelLevel, skywarsLevel } from "~/utils/Hypixel" -const cmd: SubCommand = async (interaction) => { +export const beastSub = new SlashCommandSubcommandBuilder() + .setName("beast") + .setDescription("Check a user for beast reqs") + .addStringOption(option => + option + .setName("ign") + .setDescription("The IGN of the player.") + .setRequired(true) + ) + +const cmd: SubCommand = async ({ interaction }) => { await interaction.deferReply() const ign = interaction.options.getString("ign")! diff --git a/src/commands/staff/help.ts b/src/commands/staff/help.ts index 33d495a..043943c 100644 --- a/src/commands/staff/help.ts +++ b/src/commands/staff/help.ts @@ -1,8 +1,12 @@ -import { ActionRowBuilder, ButtonBuilder, ButtonStyle, ComponentType, MessageFlags } from "discord.js" +import { ActionRowBuilder, ButtonBuilder, ButtonStyle, ComponentType, MessageFlags, SlashCommandSubcommandBuilder } from "discord.js" import { devMessage, embedColor } from "~/config/options" -import { SubCommmndClient } from "~/typings" +import { SubCommand } from "~/typings" -const cmd: SubCommmndClient = async (interaction, client) => { +export const helpSub = new SlashCommandSubcommandBuilder() + .setName("help") + .setDescription("Get help with staff commands") + +const cmd: SubCommand = async ({ interaction, client }) => { await interaction.deferReply() type CommandList = { diff --git a/src/commands/staff/prune.ts b/src/commands/staff/prune.ts index 5773092..e7e99b5 100644 --- a/src/commands/staff/prune.ts +++ b/src/commands/staff/prune.ts @@ -1,9 +1,13 @@ -import { ActionRowBuilder, ButtonBuilder, ButtonInteraction, ButtonStyle, ComponentType } from "discord.js" +import { ActionRowBuilder, ButtonBuilder, ButtonInteraction, ButtonStyle, ComponentType, SlashCommandSubcommandBuilder } from "discord.js" import { devMessage, embedColor } from "~/config/options" import { SubCommand } from "~/typings" import env from "~/utils/Env" -const cmd: SubCommand = async (interaction) => { +export const pruneSub = new SlashCommandSubcommandBuilder() + .setName("prune") + .setDescription("Update the discord roles of all guild members") + +const cmd: SubCommand = async ({ interaction }) => { await interaction.deferReply() if (interaction.user.id !== env.prod.DEV) { diff --git a/src/commands/staff/removeguildroles.ts b/src/commands/staff/removeguildroles.ts index 9bb1561..9a8ccbd 100644 --- a/src/commands/staff/removeguildroles.ts +++ b/src/commands/staff/removeguildroles.ts @@ -1,4 +1,4 @@ -import { GuildMember } from "discord.js" +import { GuildMember, SlashCommandSubcommandBuilder } from "discord.js" import { getVerifies } from "src/drizzle/functions" import { embedColor, hypixelGuildID } from "~/config/options" import { IGuildData, SubCommand } from "~/typings" @@ -6,7 +6,11 @@ import env from "~/utils/Env" import roleManage from "~/utils/Functions/rolesmanage" import { getGuild } from "~/utils/Hypixel" -const cmd: SubCommand = async (interaction) => { +export const removeGuildRolesSub = new SlashCommandSubcommandBuilder() + .setName("removeguildroles") + .setDescription("Remove guild roles from non members") + +const cmd: SubCommand = async ({ interaction }) => { await interaction.deferReply() const discordMember = interaction.member as GuildMember diff --git a/src/commands/staff/updateall.ts b/src/commands/staff/updateall.ts index d6e1b0d..c98c888 100644 --- a/src/commands/staff/updateall.ts +++ b/src/commands/staff/updateall.ts @@ -1,4 +1,4 @@ -import { ChannelType, GuildMember } from "discord.js" +import { ChannelType, GuildMember, SlashCommandSubcommandBuilder } from "discord.js" import { getVerifies } from "src/drizzle/functions" import { embedColor, hypixelGuildID } from "~/config/options" import { IGuildData, SubCommand } from "~/typings" @@ -8,7 +8,11 @@ import roleManage from "~/utils/Functions/rolesmanage" import { getGuild, getIGN } from "~/utils/Hypixel" import { log } from "~/utils/Logger" -const cmd: SubCommand = async (interaction) => { +export const updateAllSub = new SlashCommandSubcommandBuilder() + .setName("updateall") + .setDescription("Update the discord roles of all guild members") + +const cmd: SubCommand = async ({ interaction }) => { await interaction.deferReply() const discordMember = interaction.member as GuildMember diff --git a/src/typings/SubCommand.ts b/src/typings/SubCommand.ts index a23e167..4a37636 100644 --- a/src/typings/SubCommand.ts +++ b/src/typings/SubCommand.ts @@ -1,5 +1,14 @@ import { ChatInputCommandInteraction } from "discord.js" import { ExtendedClient } from "~/utils/Client" -export type SubCommand = (interaction: ChatInputCommandInteraction) => Promise -export type SubCommmndClient = (interaction: ChatInputCommandInteraction, client: ExtendedClient) => Promise +type InteractionObject = { + interaction: ChatInputCommandInteraction +} + +type ClientObject = { + client: ExtendedClient +} + +type SubCommandObject = T extends true ? InteractionObject & ClientObject : InteractionObject + +export type SubCommand = (arg: SubCommandObject) => Promise