generated from nhcarrigan/template
feat: rewrite as moderation bot (Keiko)
Replaces the old AI companion bot with a full Discord moderation system. Commands: warn, mute, unmute, kick, softban, ban, unban, prune Logging: member join/leave, activity (messages/threads/voice), mod actions Audit log: captures manual bans, kicks, timeouts, and unbans Sanctions: posts to Hikari sanction API for all applicable actions All commands are ephemeral and use Components v2. Permission and role hierarchy checks are enforced on every applicable command.
This commit is contained in:
@@ -0,0 +1,39 @@
|
||||
/**
|
||||
* @copyright nhcarrigan
|
||||
* @license Naomi's Public License
|
||||
* @author Naomi Carrigan
|
||||
*/
|
||||
|
||||
import { logActivity } from "../modules/logActivity.js";
|
||||
import { logger } from "../utils/logger.js";
|
||||
import type { AnyThreadChannel } from "discord.js";
|
||||
|
||||
/**
|
||||
* Logs thread deletion events to the activity log channel.
|
||||
* @param thread - The deleted thread channel.
|
||||
* @returns A promise that resolves when the event has been logged.
|
||||
*/
|
||||
export const onThreadDelete = async(
|
||||
thread: AnyThreadChannel,
|
||||
): Promise<void> => {
|
||||
try {
|
||||
const fields = [
|
||||
`**Thread**: ${thread.name} (\`${thread.id}\`)`,
|
||||
`**Parent**: <#${thread.parentId ?? "Unknown"}>`,
|
||||
].join("\n");
|
||||
|
||||
await logActivity({
|
||||
client: thread.client,
|
||||
emoji: "🗑️",
|
||||
fields: fields,
|
||||
title: "Thread Deleted",
|
||||
});
|
||||
} catch (error) {
|
||||
await logger.error(
|
||||
"Failed to log thread delete",
|
||||
error instanceof Error
|
||||
? error
|
||||
: new Error(String(error)),
|
||||
);
|
||||
}
|
||||
};
|
||||
Reference in New Issue
Block a user