Merge branch 'dev' into 'main'

Updated updateroles subcommand

See merge request illegitimate/illegitimate-bot!148
This commit is contained in:
2023-12-30 23:59:46 +00:00

View File

@@ -1,19 +1,34 @@
import verify = require("../../schemas/verifySchema") import verify = require("../../schemas/verifySchema")
import { color } from "../../../config/options.json" import { color, hypixelGuildID } from "../../../config/options.json"
import { import {
gm, gm,
manager, manager,
moderator,
beast, beast,
elite, elite,
member, member,
guildRole, guildRole,
guildStaff guildStaff,
defaultMember,
} from "../../../config/roles.json" } from "../../../config/roles.json"
const removeThese = [gm, manager, beast, elite, member, guildRole, guildStaff] const removeThese = [
gm,
manager,
moderator,
beast,
elite,
member,
guildRole,
guildStaff,
]
import { ChatInputCommandInteraction, GuildMember } from "discord.js" import { ChatInputCommandInteraction, GuildMember } from "discord.js"
import env from "../../utils/Env" import env from "../../utils/Env"
import { getGuild } from "../../utils/Hypixel"
import { GuildData } from "../../interfaces"
export async function updateDiscordRoles( interaction: ChatInputCommandInteraction,): Promise<void> { export async function updateDiscordRoles(
interaction: ChatInputCommandInteraction,
): Promise<void> {
const discordMember = interaction.member as GuildMember const discordMember = interaction.member as GuildMember
const embedColor = Number(color.replace("#", "0x")) const embedColor = Number(color.replace("#", "0x"))
await interaction.deferReply({ ephemeral: true }) await interaction.deferReply({ ephemeral: true })
@@ -23,35 +38,173 @@ export async function updateDiscordRoles( interaction: ChatInputCommandInteracti
embeds: [ embeds: [
{ {
description: `You do not have permission to use this command.`, description: `You do not have permission to use this command.`,
color: embedColor color: embedColor,
}, },
], ],
}) })
return return
} }
const guildMembersUnfiltered = await interaction.guild!.members.fetch().then(members => members.map(member => { const guildMembers = await interaction
.guild!.members.fetch()
.then(members =>
members.map(member => {
return {
id: member.id,
member: member,
}
}),
)
const guildData = (await getGuild(hypixelGuildID, "id")) as GuildData
const hypixelGuildMembers = guildData.members.map(gmember => {
return { return {
id: member.id, uuid: gmember.uuid,
member: member rank: gmember.rank,
} }
})) })
const guildMembers = guildMembersUnfiltered.filter(gmember => gmember.member.roles.cache.has(guildRole)) const guildMemberIDs = hypixelGuildMembers.map(gmember => gmember.uuid)
console.log(guildMembers.length)
await interaction.editReply({
embeds: [
{
description: `Updating roles for ${guildMembers.length} members...`,
color: embedColor,
},
],
})
for (const gmember of guildMembers) { for (const gmember of guildMembers) {
const memberData = await verify.findOne({ userID: gmember.id }) const memberData = await verify.findOne({ userID: gmember.id })
if (!memberData) { if (!memberData) {
await gmember.member.roles.remove(removeThese) await gmember.member.roles.remove(
removeThese,
"Updating all discord members",
)
continue
}
if (!guildMemberIDs.includes(memberData?.uuid || "none")) {
await gmember.member.roles.remove(
removeThese,
"Updating all discord members",
)
continue
} else if (guildMemberIDs.includes(memberData!.uuid)) {
const guildMemberRank = hypixelGuildMembers.find(
gmember => gmember.uuid === memberData!.uuid,
)!.rank
console.log("Updating roles for " + gmember.member.user.username)
if (guildMemberRank === "Guild Master") {
await gmember.member.roles.remove(
removeThese,
"Updating all discord members",
)
await gmember.member.roles.add(
gm,
"Updating all discord members",
)
await gmember.member.roles.add(
guildStaff,
"Updating all discord members",
)
await gmember.member.roles.add(
guildRole,
"Updating all discord members",
)
continue
} else if (guildMemberRank === "Manager") {
await gmember.member.roles.remove(
removeThese,
"Updating all discord members",
)
await gmember.member.roles.add(
manager,
"Updating all discord members",
)
await gmember.member.roles.add(
guildStaff,
"Updating all discord members",
)
await gmember.member.roles.add(
guildRole,
"Updating all discord members",
)
continue
} else if (guildMemberRank === "Moderator") {
await gmember.member.roles.remove(
removeThese,
"Updating all discord members",
)
await gmember.member.roles.add(
moderator,
"Updating all discord members",
)
await gmember.member.roles.add(
guildStaff,
"Updating all discord members",
)
await gmember.member.roles.add(
guildRole,
"Updating all discord members",
)
continue
} else if (guildMemberRank === "Beast") {
await gmember.member.roles.remove(
removeThese,
"Updating all discord members",
)
await gmember.member.roles.add(
beast,
"Updating all discord members",
)
await gmember.member.roles.add(
guildRole,
"Updating all discord members",
)
continue
} else if (guildMemberRank === "Elite") {
await gmember.member.roles.remove(
removeThese,
"Updating all discord members",
)
await gmember.member.roles.add(
elite,
"Updating all discord members",
)
await gmember.member.roles.add(
guildRole,
"Updating all discord members",
)
continue
} else if (guildMemberRank === "Member") {
await gmember.member.roles.remove(
removeThese,
"Updating all discord members",
)
await gmember.member.roles.add(
member,
"Updating all discord members",
)
await gmember.member.roles.add(
guildRole,
"Updating all discord members",
)
continue
}
continue continue
} }
} }
await interaction.editReply({ await interaction.editReply({
embeds: [{ embeds: [
description: `Successfully updated all roles.`, {
color: embedColor description: `Successfully updated all roles.`,
}] color: embedColor,
},
],
}) })
} }