few changes
diff --git a/src/commands/mod/unban.ts b/src/commands/mod/unban.ts
index 3ffc001..f96a7bd 100644
--- a/src/commands/mod/unban.ts
+++ b/src/commands/mod/unban.ts
@@ -1,18 +1,102 @@
-import { CommandInteraction } from "discord.js";
+import { CommandInteraction, GuildMember, User } from "discord.js";
import { SlashCommandSubcommandBuilder } from "@discordjs/builders";
import { WrappedCheck } from "jshaiku";
+import generateEmojiEmbed from "../../utils/generateEmojiEmbed.js";
+import keyValueList from "../../utils/generateKeyValueList.js";
+import confirmationMessage from "../../utils/confirmationMessage.js";
const command = (builder: SlashCommandSubcommandBuilder) =>
builder
.setName("unban")
.setDescription("Unbans a user")
+ .addStringOption(option => option.setName("user").setDescription("The user to unban (Username or ID)").setRequired(true))
-const callback = (interaction: CommandInteraction) => {
- interaction.reply("This command is not yet finished [mod/unban]");
+const callback = async (interaction: CommandInteraction) => { // TODO: User search
+ let bans = await interaction.guild.bans.fetch()
+ let user = interaction.options.getString("user")
+ let resolved = bans.find(ban => ban.user.id == user)
+ if (!resolved) resolved = bans.find(ban => ban.user.username.toLowerCase() == user.toLowerCase())
+ if (!resolved) resolved = bans.find(ban => ban.user.tag.toLowerCase() == user.toLowerCase())
+ if (!resolved) {
+ return interaction.reply({embeds: [new generateEmojiEmbed()
+ .setTitle("Unban")
+ .setDescription(`Could not find any user called \`${user}\``)
+ .setEmoji("PUNISH.UNBAN.RED")
+ .setStatus("Danger")
+ ], ephemeral: true})
+ }
+ // TODO:[Modals] Replace this with a modal
+ let confirmation = await new confirmationMessage(interaction)
+ .setEmoji("PUNISH.UNBAN.RED")
+ .setTitle("Unban")
+ .setDescription(keyValueList({
+ "user": `${resolved.user.username} [<@${resolved.user.id}>]`,
+ })
+ + `Are you sure you want to unban <@${resolved.user.id}>?`)
+ .setColor("Danger")
+ .send()
+ if (confirmation.success) {
+ try {
+ await interaction.guild.members.unban(resolved.user as User, "Unban");
+ let member = (resolved.user as User)
+ // @ts-ignore
+ const { log, NucleusColors, entry, renderUser, renderDelta } = interaction.user.client.logger
+ let data = {
+ meta: {
+ type: 'memberUnban',
+ displayName: 'Member Unbanned',
+ calculateType: 'guildMemberPunish',
+ color: NucleusColors.green,
+ emoji: "PUNISH.BAN.GREEN",
+ timestamp: new Date().getTime()
+ },
+ list: {
+ id: entry(member.id, `\`${member.id}\``),
+ name: entry(member.id, renderUser(member)),
+ unbanned: entry(new Date().getTime(), renderDelta(new Date().getTime())),
+ unbannedBy: entry(interaction.user.id, renderUser(interaction.user)),
+ accountCreated: entry(member.createdAt, renderDelta(member.createdAt)),
+ },
+ hidden: {
+ guild: interaction.guild.id
+ }
+ }
+ log(data, member.client);
+ } catch {
+ await interaction.editReply({embeds: [new generateEmojiEmbed()
+ .setEmoji("PUNISH.UNBAN.RED")
+ .setTitle(`Unban`)
+ .setDescription("Something went wrong and the user was not unbanned")
+ .setStatus("Danger")
+ ], components: []})
+ }
+ await interaction.editReply({embeds: [new generateEmojiEmbed()
+ .setEmoji(`PUNISH.UNBAN.GREEN`)
+ .setTitle(`Unban`)
+ .setDescription("The member was unbanned")
+ .setStatus("Success")
+ ], components: []})
+ } else {
+ await interaction.editReply({embeds: [new generateEmojiEmbed()
+ .setEmoji("PUNISH.UNBAN.GREEN")
+ .setTitle(`Unban`)
+ .setDescription("No changes were made")
+ .setStatus("Success")
+ ], components: []})
+ }
}
const check = (interaction: CommandInteraction, defaultCheck: WrappedCheck) => {
- return true;
+ let member = (interaction.member as GuildMember)
+ let me = (interaction.guild.me as GuildMember)
+ // Check if Nucleus can unban members
+ if (! interaction.guild.me.permissions.has("BAN_MEMBERS")) throw "I do not have the `ban_members` permission";
+ // Allow the owner to unban anyone
+ if ((interaction.member as GuildMember).id == interaction.guild.ownerId) return true
+ // Check if the user has ban_members permission
+ if (! (interaction.member as GuildMember).permissions.has("BAN_MEMBERS")) throw "You do not have the `ban_members` permission";
+ // Allow unban
+ return true
}
export { command, callback, check };
\ No newline at end of file