Merge branch 'dev' into 'main'

Dev

See merge request illegitimate/illegitimate-bot!338
This commit is contained in:
2025-03-23 16:49:36 +01:00
11 changed files with 135 additions and 122 deletions

View File

@@ -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
}

View File

@@ -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")!

View File

@@ -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")!

View File

@@ -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")!

View File

@@ -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
}

View File

@@ -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")!

View File

@@ -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<true> = async ({ interaction, client }) => {
await interaction.deferReply()
type CommandList = {

View File

@@ -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) {

View File

@@ -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

View File

@@ -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

View File

@@ -1,5 +1,14 @@
import { ChatInputCommandInteraction } from "discord.js"
import { ExtendedClient } from "~/utils/Client"
export type SubCommand = (interaction: ChatInputCommandInteraction) => Promise<void>
export type SubCommmndClient = (interaction: ChatInputCommandInteraction, client: ExtendedClient) => Promise<void>
type InteractionObject = {
interaction: ChatInputCommandInteraction
}
type ClientObject = {
client: ExtendedClient
}
type SubCommandObject<T extends boolean> = T extends true ? InteractionObject & ClientObject : InteractionObject
export type SubCommand<T extends boolean = false> = (arg: SubCommandObject<T>) => Promise<void>