diff --git a/src/commands/unban.js b/src/commands/unban.js new file mode 100644 index 0000000..ef30b60 --- /dev/null +++ b/src/commands/unban.js @@ -0,0 +1,58 @@ +const { SlashCommandBuilder, PermissionFlagsBits, userMention } = require("discord.js") +const { color } = require("../../config/options.json") + +module.exports = { + name: "unban", + description: "Unban a user from the server", + type: "slash", + dev: true, + + data: new SlashCommandBuilder() + .setName("unban") + .setDescription("Unban a user from the server") + .addStringOption(option => + option + .setName("user") + .setDescription("The user to unban") + .setAutocomplete(true) + .setRequired(true) + ) + .addStringOption(option => + option + .setName("reason") + .setDescription("The reason for unbanning the user") + .setRequired(false) + ), + + /** @param { import("discord.js").ChatInputCommandInteraction } interaction */ + + async execute(interaction) { + await interaction.deferReply() + + const userid = interaction.options.getString("user") + const reason = interaction.options.getString("reason") || "No reason provided" + const mod = interaction.user + const embedColor = Number(color.replace("#", "0x")) + + const user = await interaction.client.users.fetch(userid) + await interaction.guild.members.unban(user.id, reason) + + await interaction.editReply({ + embeds: [{ + title: "User unbanned", + description: "The user " + user.username + " has been unbanned.\n" + + "**Reason:** `" + reason + "`\n" + + "**Moderator:** " + userMention(mod.id), + color: embedColor, + thumbnail: { + url: user?.avatarURL({ dynamic: true }) || null + }, + footer: { + text: "ID: " + user.id, + icon_url: interaction.guild.iconURL({ dynamic: true }) + }, + timestamp: new Date() + }] + }) + } +} diff --git a/src/events/autocomplete/unban.js b/src/events/autocomplete/unban.js new file mode 100644 index 0000000..bf9dae0 --- /dev/null +++ b/src/events/autocomplete/unban.js @@ -0,0 +1,28 @@ +module.exports = { + name: "unban", + description: "Unban a user from the server", + type: "autocomplete", + + /** @param { import("discord.js").AutocompleteInteraction } interaction */ + + async execute(interaction) { + if (!interaction.isAutocomplete()) return + if (interaction.commandName !== "unban") return + const focusedOption = interaction.options.getFocused(true) + if (focusedOption.name !== "user") return + + console.log + + const bannedUsers = await interaction.guild.bans.fetch() + const filteredUsers = bannedUsers.filter((user) => + user.user.username.toLowerCase().includes(focusedOption.value.toLowerCase()) + ) + + const results = filteredUsers.map((user) => ({ + name: user.user.username, + value: user.user.id, + })) + + await interaction.respond(results.slice(0, 25)).catch((err) => { console.log(err) }) + } +}