diff --git a/src/commands-contextmenu/updateuser.ts b/src/commands-contextmenu/updateuser.ts new file mode 100644 index 0000000..8af1d67 --- /dev/null +++ b/src/commands-contextmenu/updateuser.ts @@ -0,0 +1,165 @@ +import { ApplicationCommandType, ContextMenuCommandBuilder, PermissionFlagsBits, userMention } from "discord.js" +import { color, devMessage, hypixelGuildID } from "../../config/options.json" +import { ContextMenu } from "../interfaces" +import verifySchema from "../schemas/verifySchema" +import { getGuild, getHeadURL, getIGN } from "../utils/Hypixel" +import roleManage from "../utils/functions/rolesmanage" + +export = { + name: "Update User", + description: "Updates a user's roles", + type: "contextmenu", + dev: false, + + data: new ContextMenuCommandBuilder() + .setName("Update User") + .setType(ApplicationCommandType.User) + .setDefaultMemberPermissions(PermissionFlagsBits.Administrator) + .setDMPermission(false), + + async execute(interaction) { + await interaction.deferReply({ ephemeral: true }) + + const targetId = interaction.targetId + const user = await interaction.guild!.members.fetch(targetId) + const usermentioned = userMention(user.user.id) + const verifyData = await verifySchema.findOne({ userID: user.user.id }) + const embedColor = Number(color.replace("#", "0x")) + + if (!verifyData) { + await interaction.editReply({ + embeds: [ + { + description: "User is not verified.", + color: embedColor, + footer: { + text: interaction.guild!.name + " | " + devMessage, + icon_url: interaction.guild!.iconURL({ forceStatic: false, }) || undefined, + }, + }, + ], + }) + return + } + + await interaction.editReply({ + embeds: [ + { + description: "Fetching ign...", + color: embedColor, + }, + ], + }) + + const ign = (await getIGN(verifyData.uuid)) as string + const head = await getHeadURL(ign) + + await interaction.editReply({ + embeds: [ + { + description: "Fetching guild data...", + color: embedColor, + }, + ], + }) + + const guild = await getGuild(verifyData.uuid) + + let responseGuildID: string | null + if (!guild) { + responseGuildID = null + } else { + responseGuildID = guild._id + } + + if (responseGuildID !== hypixelGuildID) { + const roles = roleManage("default") + await user.roles.remove(roles.rolesToRemove, "User was force updated.") + await user.roles.add(roles.rolesToAdd, "User was force updated.") + + await interaction.editReply({ + embeds: [ + { + description: usermentioned + " was given the the Default Member role.", + color: embedColor, + thumbnail: { + url: head!, + }, + footer: { + text: interaction.guild!.name + " | " + devMessage, + icon_url: interaction.guild!.iconURL({ forceStatic: false, }) || undefined, + }, + }, + ], + }) + return + } + + if (responseGuildID === hypixelGuildID) { + const GuildMembers = guild!.members + const guildRank = GuildMembers.find( member => member.uuid === verifyData.uuid)!.rank + let replyRank: string | null = null + + await user.roles.add(roleManage("default").rolesToAdd, "User was force updated.") + + if (guildRank === "Guild Master") { + const roles = roleManage("gm") + await user.roles.remove(roles.rolesToRemove, "User was force updated.") + await user.roles.add(roles.rolesToAdd, "User was force updated.") + replyRank = "Guild Master" + } + + if (guildRank === "Manager") { + const roles = roleManage("manager") + await user.roles.remove(roles.rolesToRemove, "User was force updated.") + await user.roles.add(roles.rolesToAdd, "User was force updated.") + replyRank = "Manager" + } + + if (guildRank === "Moderator") { + const roles = roleManage("moderator") + await user.roles.remove(roles.rolesToRemove, "User was force updated.") + await user.roles.add(roles.rolesToAdd, "User was force updated.") + replyRank = "Moderator" + } + + if (guildRank === "Beast") { + const roles = roleManage("beast") + await user.roles.remove(roles.rolesToRemove, "User was force updated.") + await user.roles.add(roles.rolesToAdd, "User was force updated.") + replyRank = "Beast" + } + + if (guildRank === "Elite") { + const roles = roleManage("elite") + await user.roles.remove(roles.rolesToRemove, "User was force updated.") + await user.roles.add(roles.rolesToAdd, "User was force updated.") + replyRank = "Elite" + } + + if (guildRank === "Member") { + const roles = roleManage("member") + await user.roles.remove(roles.rolesToRemove, "User was force updated.") + await user.roles.add(roles.rolesToAdd, "User was force updated.") + replyRank = "Member" + } + + await interaction.editReply({ + embeds: [ + { + description: + usermentioned + " was given the " + replyRank + " role.", + color: embedColor, + thumbnail: { + url: head!, + }, + footer: { + text: interaction.guild!.name + " | " + devMessage, + icon_url: interaction.guild!.iconURL({ forceStatic: false, }) || undefined, + }, + }, + ], + }) + } + } +} as ContextMenu \ No newline at end of file diff --git a/src/commands/check.ts b/src/commands/check.ts index 59080f2..fc509f5 100644 --- a/src/commands/check.ts +++ b/src/commands/check.ts @@ -41,14 +41,9 @@ export = { async execute(interaction) { await interaction.deferReply({}) - const ign = interaction.options.getString("ign") + const ign = interaction.options.getString("ign")! const embedColor = Number(color.replace("#", "0x")) - if (!ign) { - await interaction.editReply("Please provide a player's IGN.") - return - } - await interaction.editReply({ embeds: [ { diff --git a/src/commands/forceupdate.ts b/src/commands/forceupdate.ts index 67d6a9b..8addaf3 100644 --- a/src/commands/forceupdate.ts +++ b/src/commands/forceupdate.ts @@ -45,9 +45,7 @@ export = { color: embedColor, footer: { text: interaction.guild!.name + " | " + devMessage, - icon_url: interaction.guild!.iconURL({ - forceStatic: false, - })!, + icon_url: interaction.guild!.iconURL({ forceStatic: false, }) || undefined, }, }, ], diff --git a/src/commands/update.ts b/src/commands/update.ts index 7828bfe..95908ae 100644 --- a/src/commands/update.ts +++ b/src/commands/update.ts @@ -33,9 +33,7 @@ export = { color: embedColor, footer: { text: interaction.guild!.name + " | " + devMessage, - icon_url: interaction.guild!.iconURL({ - forceStatic: false, - })!, + icon_url: interaction.guild!.iconURL({ forceStatic: false, }) || undefined, }, }, ],