Added mod logs to mod commands

This commit is contained in:
2024-01-07 13:53:02 +01:00
parent ec971af92e
commit b278e0222d
8 changed files with 262 additions and 73 deletions

View File

@@ -5,8 +5,9 @@ import {
GuildMember, GuildMember,
} from "discord.js" } from "discord.js"
import { admin, helper } from "../../config/roles.json" import { admin, helper } from "../../config/roles.json"
import { color } from "../../config/options.json" import { color, devMessage } from "../../config/options.json"
import { Command } from "../interfaces" import { Command } from "../interfaces"
import logToChannel from "../utils/functions/logtochannel"
export = { export = {
name: "ban", name: "ban",
@@ -110,31 +111,52 @@ export = {
deleteMessageDays: messageDeletionDays, deleteMessageDays: messageDeletionDays,
}) })
await logToChannel("mod", {
embeds: [{
author: {
name: mod.user.username,
icon_url: mod.user.avatarURL({ forceStatic: false })!,
},
title: "Member Banned",
description: `
**User:** ${userMention(member.user.id)}
**Mod:** ${userMention(mod.user.id)}
**Reason:** ${reason}
**Messages Deleted:** ${messageDeletionDays} days
`,
color: embedColor,
thumbnail: {
url: mod.user.avatarURL({ forceStatic: false })!,
},
footer: {
text: "ID: " + member.user.id,
icon_url:
member.user.avatarURL({ forceStatic: false }) ||
undefined,
},
timestamp: new Date().toISOString(),
}]
})
await interaction.editReply({ await interaction.editReply({
embeds: [ embeds: [
{ {
title: "Member Banned", title: "Member Banned",
description: description:
"**User:** " + "**User:** " + userMention(member.user.id) + "\n" +
userMention(member.user.id) + "**Reason:** " + reason + "\n" +
"\n" + "**Moderator:** " + mod.user.username + "\n" +
"**Reason:** " + "**Messages Deleted:** " + messageDeletionDays + " days",
reason +
"\n" +
"**Moderator:** " +
mod.user.username +
"\n" +
"**Messages Deleted:** " +
messageDeletionDays +
" days",
color: embedColor, color: embedColor,
footer: { thumbnail: {
text: "ID: " + member.user.id, url: member.user.avatarURL({ forceStatic: false }) || interaction.guild!.iconURL({ forceStatic: false })!,
icon_url: },
member.user.avatarURL({ forceStatic: false }) || footer: {
undefined, icon_url: interaction.guild!.iconURL({
forceStatic: false,
})!,
text: interaction.guild!.name + " | " + devMessage,
}, },
timestamp: new Date().toISOString(),
}, },
], ],
}) })

View File

@@ -2,9 +2,12 @@ import {
SlashCommandBuilder, SlashCommandBuilder,
PermissionFlagsBits, PermissionFlagsBits,
TextChannel, TextChannel,
channelMention,
userMention,
} from "discord.js" } from "discord.js"
import { color } from "../../config/options.json" import { color } from "../../config/options.json"
import { Command } from "../interfaces" import { Command } from "../interfaces"
import logToChannel from "../utils/functions/logtochannel"
export = { export = {
name: "clear", name: "clear",
@@ -32,12 +35,12 @@ export = {
const channel = interaction.channel as TextChannel const channel = interaction.channel as TextChannel
const embedColor = Number(color.replace("#", "0x")) const embedColor = Number(color.replace("#", "0x"))
if (!amount || amount < 1 || amount > 100) { if (amount < 1 || amount > 100) {
await interaction.editReply({ await interaction.editReply({
embeds: [ embeds: [
{ {
description: description:
"Please provide an amount of messages to clear", "Please provide an amount of messages to clear between 1 and 100.",
color: embedColor, color: embedColor,
}, },
], ],
@@ -56,6 +59,30 @@ export = {
await channel.bulkDelete(messagesToDelete, true) await channel.bulkDelete(messagesToDelete, true)
await logToChannel("mod", {
embeds: [{
author: {
name: interaction.user.username,
icon_url: interaction.user.avatarURL({ forceStatic: false }) || undefined,
},
title: "Messages Cleared",
description: `
**Channel:** ${channelMention(channel.id)}
**Amount:** \`${messages.size}\` messages
**Mod:** ${userMention(interaction.user.id)}
`,
color: embedColor,
thumbnail: {
url: interaction.guild!.iconURL({ forceStatic: false }) || "",
},
footer: {
text: "ID: " + channel.id,
icon_url: interaction.guild!.iconURL({ forceStatic: false }) || undefined,
},
timestamp: new Date().toISOString()
}]
})
await interaction.editReply({ await interaction.editReply({
embeds: [ embeds: [
{ {

View File

@@ -8,6 +8,8 @@ import { color, devMessage } from "../../config/options.json"
import verify = require("../schemas/verifySchema") import verify = require("../schemas/verifySchema")
import { Command } from "../interfaces" import { Command } from "../interfaces"
import roleManage from "../utils/functions/rolesmanage" import roleManage from "../utils/functions/rolesmanage"
import logToChannel from "../utils/functions/logtochannel"
import { getIGN } from "../utils/Hypixel"
export = { export = {
name: "forceunverify", name: "forceunverify",
@@ -32,6 +34,7 @@ export = {
const member = interaction.options.getMember("user") as GuildMember const member = interaction.options.getMember("user") as GuildMember
const embedColor = Number(color.replace("#", "0x")) const embedColor = Number(color.replace("#", "0x"))
const verifiedUser = await verify.findOne({ userID: member.user.id }) const verifiedUser = await verify.findOne({ userID: member.user.id })
const mod = interaction.user
if (!verifiedUser) { if (!verifiedUser) {
return interaction.reply({ return interaction.reply({
@@ -43,10 +46,38 @@ export = {
], ],
}) })
} }
await verify.findOneAndDelete({ userID: member.user.id })
const uuid = verifiedUser.uuid
const ign = await getIGN(uuid)
await verify.findOneAndDelete({ userID: member.user.id })
await member.roles.remove(roleManage("all").rolesToRemove, "User force unverified by " + interaction.user.username) await member.roles.remove(roleManage("all").rolesToRemove, "User force unverified by " + interaction.user.username)
await logToChannel("mod", {
embeds: [{
title: "Force Unverified",
author: {
name: mod.username,
icon_url: mod.avatarURL({ forceStatic: false })!,
},
description: `
**User:** ${userMention(member.user.id)}
**Mod:** ${userMention(mod.id)}
**IGN:** \`${ign}\`
**UUID:** \`${uuid}\`
`,
color: embedColor,
thumbnail: {
url: mod.avatarURL({ forceStatic: false })!,
},
footer: {
icon_url: member.user.avatarURL({ forceStatic: false }) || undefined,
text: "ID: " + member.user.id,
},
timestamp: new Date().toISOString(),
}]
})
await interaction.reply({ await interaction.reply({
embeds: [ embeds: [
{ {

View File

@@ -2,6 +2,7 @@ import {
SlashCommandBuilder, SlashCommandBuilder,
PermissionFlagsBits, PermissionFlagsBits,
GuildMember, GuildMember,
userMention,
} from "discord.js" } from "discord.js"
import { getUUID, getPlayer, getGuild, getHeadURL } from "../utils/Hypixel" import { getUUID, getPlayer, getGuild, getHeadURL } from "../utils/Hypixel"
import { color, hypixelGuildID, devMessage } from "../../config/options.json" import { color, hypixelGuildID, devMessage } from "../../config/options.json"
@@ -9,6 +10,7 @@ import verify = require("../schemas/verifySchema")
import mongoose from "mongoose" import mongoose from "mongoose"
import roleManage from "../utils/functions/rolesmanage" import roleManage from "../utils/functions/rolesmanage"
import { Command } from "../interfaces" import { Command } from "../interfaces"
import logToChannel from "../utils/functions/logtochannel"
export = { export = {
name: "forceverify", name: "forceverify",
@@ -180,6 +182,31 @@ export = {
await newVerify.save() await newVerify.save()
await logToChannel("mod", {
embeds: [{
author: {
name: modName,
icon_url: mod.avatarURL({ forceStatic: false })!,
},
title: "Force Verified",
description: `
**User:** ${userMention(user.id)}
**Mod:** ${userMention(mod.id)}
**IGN:** \`${player.displayname}\`
**UUID:** \`${uuid}\`
`,
color: embedColor,
thumbnail: {
url: mod.avatarURL({ forceStatic: false })!,
},
footer: {
icon_url: user.user.avatarURL({ forceStatic: false }) || undefined,
text: "ID: " + user.user.id
},
timestamp: new Date().toISOString(),
}]
})
await interaction.editReply({ await interaction.editReply({
embeds: [ embeds: [
{ {

View File

@@ -5,8 +5,9 @@ import {
GuildMember, GuildMember,
} from "discord.js" } from "discord.js"
import { admin, helper } from "../../config/roles.json" import { admin, helper } from "../../config/roles.json"
import { color } from "../../config/options.json" import { color, devMessage } from "../../config/options.json"
import { Command } from "../interfaces" import { Command } from "../interfaces"
import logToChannel from "../utils/functions/logtochannel"
export = { export = {
name: "kick", name: "kick",
@@ -35,18 +36,10 @@ export = {
async execute(interaction) { async execute(interaction) {
await interaction.deferReply() await interaction.deferReply()
const member = interaction.options.getMember( const member = interaction.options.getMember( "member",) as GuildMember
"member", const reason = interaction.options.getString("reason") ?? "No reason provided."
) as GuildMember | null
const reason =
interaction.options.getString("reason") ?? "No reason provided."
const embedColor = Number(color.replace("#", "0x")) const embedColor = Number(color.replace("#", "0x"))
if (!member) {
await interaction.editReply("You must specify a member.")
return
}
const mod = await interaction.guild!.members.fetch(interaction.user.id) const mod = await interaction.guild!.members.fetch(interaction.user.id)
const memberRoles = member.roles.cache.map(role => role.id) const memberRoles = member.roles.cache.map(role => role.id)
const modRoles = mod.roles.cache.map(role => role.id) const modRoles = mod.roles.cache.map(role => role.id)
@@ -85,27 +78,45 @@ export = {
await member.kick(reason + ` - ${mod.user.username}`) await member.kick(reason + ` - ${mod.user.username}`)
await logToChannel("mod", {
embeds: [{
author: {
name: mod.user.username,
icon_url: mod.user.avatarURL({ forceStatic: false })!,
},
title: "Member Kicked",
description: `
**User:** ${userMention(member.user.id)}
**Mod:** ${userMention(mod.user.id)}
**Reason:** ${reason}
`,
color: embedColor,
thumbnail: {
url: mod.user.avatarURL({ forceStatic: false })!,
},
footer: {
text: "ID: " + member.user.id,
icon_url: member.user.avatarURL({ forceStatic: false }) || undefined,
},
timestamp: new Date().toISOString(),
}]
})
await interaction.editReply({ await interaction.editReply({
embeds: [ embeds: [
{ {
title: "Member Kicked", title: "Member Kicked",
description: description: "**User:** " + userMention(member.user.id) + "\n" +
"**User:** " + "**Reason:** " + reason + "\n" +
userMention(member.user.id) + "**Moderator:** " + mod.user.username,
"\n" +
"**Reason:** " +
reason +
"\n" +
"**Moderator:** " +
mod.user.username,
color: embedColor, color: embedColor,
footer: { thumbnail: {
text: "ID: " + member.user.id, url: member.user.avatarURL({ forceStatic: false }) || interaction.guild!.iconURL({ forceStatic: false, })!,
icon_url:
member.user.avatarURL({ forceStatic: false }) ||
undefined,
}, },
timestamp: new Date().toISOString(), footer: {
icon_url: interaction.guild!.iconURL({ forceStatic: false, })!,
text: interaction.guild!.name + " | " + devMessage,
}
}, },
], ],
}) })

View File

@@ -3,9 +3,12 @@ import {
PermissionFlagsBits, PermissionFlagsBits,
ChannelType, ChannelType,
TextChannel, TextChannel,
channelMention,
userMention,
} from "discord.js" } from "discord.js"
import { color, devMessage } from "../../config/options.json" import { color, devMessage } from "../../config/options.json"
import { Command } from "../interfaces" import { Command } from "../interfaces"
import logToChannel from "../utils/functions/logtochannel"
export = { export = {
name: "slowmode", name: "slowmode",
@@ -60,6 +63,30 @@ export = {
return return
} }
await logToChannel("mod", {
embeds: [{
author: {
name: interaction.user.username,
icon_url: interaction.user.avatarURL({ forceStatic: false }) || undefined,
},
title: "Slowmode Update",
description: `
**Channel:** ${channelMention(channel.id)}
**Slowmode:** ${seconds} seconds
**Mod:** ${userMention(interaction.user.id)}
`,
color: embedColor,
thumbnail: {
url: interaction.user.avatarURL({ forceStatic: false }) || "",
},
footer: {
icon_url: interaction.guild!.iconURL({ forceStatic: false }) || undefined,
text: " ID: " + channel.id
},
timestamp: new Date().toISOString()
}]
})
await interaction.editReply({ await interaction.editReply({
embeds: [ embeds: [
{ {

View File

@@ -5,9 +5,10 @@ import {
ChatInputCommandInteraction, ChatInputCommandInteraction,
GuildMember, GuildMember,
} from "discord.js" } from "discord.js"
import { color } from "../../config/options.json" import { color, devMessage } from "../../config/options.json"
import { Command } from "../interfaces" import { Command } from "../interfaces"
import ms from "ms" import ms from "ms"
import logToChannel from "../utils/functions/logtochannel"
const command: Command = { const command: Command = {
name: "timeout", name: "timeout",
@@ -164,22 +165,44 @@ const command: Command = {
} }
await target.timeout(time, reason) await target.timeout(time, reason)
await logToChannel("mod", {
embeds: [{
author: {
name: mod.user.username,
icon_url: mod.user.avatarURL({ forceStatic: false }) || undefined,
},
title: "Member Timed Out",
description: `
**User:** ${userMention(target.id)}
**Time:** ${prettyTime}
**Reason:** ${reason}
**Mod:** ${userMention(mod.id)}
`,
color: embedColor,
thumbnail: {
url: mod.user.avatarURL({ forceStatic: false }) || "",
},
footer: {
text: "ID: " + target.id,
icon_url: target.user.avatarURL({ forceStatic: false }) || undefined,
},
timestamp: new Date().toISOString()
}]
})
await interaction.editReply({ await interaction.editReply({
embeds: [ embeds: [
{ {
description: description:
"Timed out " + "Timed out " + userMention(target.id) +
userMention(target.id) + " for " + prettyTime +
" for " + " for " + reason,
prettyTime +
" for " +
reason,
color: embedColor, color: embedColor,
footer: { footer: {
text: "ID: " + target.id, text: interaction.guild!.name + " | " + devMessage,
icon_url: target.avatarURL() || undefined, icon_url: interaction.guild!.iconURL({ forceStatic: false }) || undefined,
}, },
timestamp: new Date().toISOString(),
}, },
], ],
}) })

View File

@@ -4,8 +4,9 @@ import {
userMention, userMention,
User, User,
} from "discord.js" } from "discord.js"
import { color } from "../../config/options.json" import { color, devMessage } from "../../config/options.json"
import { Command } from "../interfaces" import { Command } from "../interfaces"
import logToChannel from "../utils/functions/logtochannel"
export = { export = {
name: "unban", name: "unban",
@@ -37,11 +38,10 @@ export = {
await interaction.deferReply() await interaction.deferReply()
const userid = interaction.options.getString("user")! const userid = interaction.options.getString("user")!
const reason = const reason = interaction.options.getString("reason") || "No reason provided"
interaction.options.getString("reason") || "No reason provided"
const mod = interaction.user const mod = interaction.user
const embedColor = Number(color.replace("#", "0x")) const embedColor = Number(color.replace("#", "0x"))
let user: User | null let user: User
if (userid === "none") { if (userid === "none") {
await interaction.editReply({ await interaction.editReply({
@@ -66,34 +66,55 @@ export = {
}, },
], ],
}) })
return
} }
await interaction.guild!.members.unban(user!.id, reason) await interaction.guild!.members.unban(user.id, reason)
await logToChannel("mod", {
embeds: [
{
author: {
name: mod.username,
icon_url: mod.avatarURL({ forceStatic: false })!,
},
title: "Member Unbanned",
description: `
**User:** ${userMention(user!.id)}
**Mod:** ${userMention(mod.id)}
**Reason:** ${reason}
`,
color: embedColor,
thumbnail: {
url: mod.avatarURL({ forceStatic: false })!,
},
footer: {
text: "ID: " + user!.id,
icon_url: user.avatarURL({ forceStatic: false}) || undefined,
},
timestamp: new Date().toISOString(),
},
],
})
await interaction.editReply({ await interaction.editReply({
embeds: [ embeds: [
{ {
title: "User unbanned", title: "User unbanned",
description: description:
"The user " + "The user " + user!.username + " has been unbanned.\n" +
user!.username + "**Reason:** `" + reason + "`\n" +
" has been unbanned.\n" + "**Moderator:** " + userMention(mod.id),
"**Reason:** `" +
reason +
"`\n" +
"**Moderator:** " +
userMention(mod.id),
color: embedColor, color: embedColor,
thumbnail: { thumbnail: {
url: user!.avatarURL({ forceStatic: false }) || "", url: user!.avatarURL({ forceStatic: false }) || "",
}, },
footer: { footer: {
text: "ID: " + user!.id,
icon_url: interaction.guild!.iconURL({ icon_url: interaction.guild!.iconURL({
forceStatic: false, forceStatic: false,
})!, })!,
text: interaction.guild!.name + " | " + devMessage,
}, },
timestamp: new Date().toISOString(),
}, },
], ],
}) })