Files
illegitimate-bot/src/commands/unban.ts
2024-10-16 19:39:56 +02:00

106 lines
3.5 KiB
TypeScript

import { InteractionContextType, PermissionFlagsBits, SlashCommandBuilder, User, userMention } from "discord.js"
import { devMessage, embedColor } from "~/config/options.js"
import { ICommand } from "~/interfaces"
import logToChannel from "~/utils/Functions/logtochannel.js"
export default {
name: "unban",
description: "Unban a user from the server",
dev: false,
public: false,
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)
)
.setDefaultMemberPermissions(PermissionFlagsBits.BanMembers)
.setContexts(InteractionContextType.Guild),
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
let user: User
if (userid === "none") {
await interaction.editReply({
embeds: [{
description: "You haven't specified a user to unban",
color: embedColor
}]
})
return
}
try {
user = await interaction.client.users.fetch(userid)
// eslint-disable-next-line @typescript-eslint/no-unused-vars
} catch (error) {
await interaction.editReply({
embeds: [{
description: "The user you specified is not valid",
color: embedColor
}]
})
return
}
await interaction.guild!.members.unban(user.id, reason)
await logToChannel("mod", {
embeds: [{
author: {
name: mod.username,
icon_url: mod.avatarURL() || undefined
},
title: "Member Unbanned",
description: `
**User:** ${userMention(user!.id)}
**Mod:** ${userMention(mod.id)}
**Reason:** ${reason}
`.removeIndents(),
color: embedColor,
thumbnail: {
url: mod.avatarURL() || ""
},
footer: {
text: "ID: " + user!.id,
icon_url: user.avatarURL() || undefined
},
timestamp: new Date().toISOString()
}]
})
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() || ""
},
footer: {
icon_url: interaction.guild!.iconURL() || undefined,
text: interaction.guild!.name + " | " + devMessage
}
}]
})
}
} as ICommand