Gateway: - Remove dead barrels (ai-moderation/index, attachment-upload/index, message-capture/index) — all consumers import files directly - Remove orphaned schema/ split dir (analytics/cache/messages/meta) — schema.ts is monolithic - Merge duplicate config singleton: delete shared/config/config.ts, point all 44 imports at shared/config/index Backend: - Remove dead commandHelper.ts (voice-era fallback), ws/index.ts barrel, health.schema.ts, moderationMetrics.ts, analysis.schema.ts (0 importers; metrics/handlers route directly) Frontend: - Remove orphaned CategoryDrilldown/CoverageTiles/TopicTrends, primitives/slot, use-mobile, use-mounted - Remove unused charts donut/sparkline (TopicTrends was only consumer) Kept (verified active): shared/database/index.ts facade (11 importers), hooks/index + lib/api/index barrels (10 importers), orpc/ws.ts, charts/index.ts barrel. Verified: tsc + biome + vitest per service (backend e2e 3 failures pre-existing on main); frontend next build 8 routes.
62 lines
2.0 KiB
TypeScript
62 lines
2.0 KiB
TypeScript
import type { Guild } from "discord.js-selfbot-v13";
|
|
import { createChildLogger } from "@/shared/logger/index";
|
|
import { config } from "../../shared/config/index.js";
|
|
import type { MessageRecord } from "../message-capture/types.js";
|
|
|
|
interface ChannelWithSend {
|
|
send: (content: string | object, options?: unknown) => Promise<unknown>;
|
|
}
|
|
|
|
const logger = createChildLogger("auto-delete-logger");
|
|
|
|
/**
|
|
* Post a log message about the auto-deletion to the configured moderation log channel.
|
|
* If AUTO_DELETE_LOG_CHANNEL_ID is not set, this is a no-op.
|
|
* Failures (channel not found, missing permissions) are logged as warnings.
|
|
*/
|
|
export async function logDeletionToChannel(
|
|
guild: Guild,
|
|
message: MessageRecord,
|
|
channelId: string,
|
|
): Promise<void> {
|
|
if (!config.AUTO_DELETE_LOG_CHANNEL_ID) return;
|
|
|
|
try {
|
|
const logChannel = guild.channels.cache.get(
|
|
config.AUTO_DELETE_LOG_CHANNEL_ID,
|
|
);
|
|
if (
|
|
logChannel &&
|
|
"send" in logChannel &&
|
|
typeof (logChannel as ChannelWithSend).send === "function"
|
|
) {
|
|
const severity = message.ai_severity ?? "none";
|
|
const categories =
|
|
message.ai_categories ?? message.ai_moderation_flags ?? "—";
|
|
const reason = message.ai_analysis ?? "—";
|
|
const snippet = (message.edited_content ?? message.content).substring(
|
|
0,
|
|
200,
|
|
);
|
|
await (logChannel as ChannelWithSend).send(
|
|
`**🧹 Auto-Delete** — Pesan dari <@${message.user_id}> di <#${channelId}>\n` +
|
|
`**Status:** ${message.ai_status}\n` +
|
|
`**Severitas:** ${severity}\n` +
|
|
`**Kategori:** ${categories}\n` +
|
|
`**Alasan:** ${reason}\n` +
|
|
`**Isi:** ${snippet}\n` +
|
|
`**Waktu:** <t:${Math.floor(Date.now() / 1000)}:R>`,
|
|
);
|
|
logger.info(
|
|
{ channelId, messageId: message.id },
|
|
"Deletion logged to channel",
|
|
);
|
|
}
|
|
} catch (logErr) {
|
|
logger.warn(
|
|
{ messageId: message.id, error: String(logErr) },
|
|
"Failed to log auto-delete to moderation channel",
|
|
);
|
|
}
|
|
}
|