Commands: - /log setchannel, enable, disable, list, help Events logged: - messages: deleted/edited messages - roles: role changes - nicks: nickname changes - channels: channel create/delete - warns, mutes, kicks, bans: moderation actions Moderation logging integrated into admin.ts for all mod actions (warn, mute, kick, ban). Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
73 lines
2.3 KiB
TypeScript
73 lines
2.3 KiB
TypeScript
import { Events, Message, TextChannel, GuildChannel, AuditLogEvent, EmbedBuilder } from 'discord.js';
|
|
|
|
function getLogChannel(client: any, guildId: string): TextChannel | null {
|
|
const DB = client.DB;
|
|
const settings: any = DB.get('SELECT * FROM guild_settings WHERE guild_id = ?', guildId);
|
|
|
|
if (!settings?.log_channel) {
|
|
return null;
|
|
}
|
|
|
|
const channel = client.guilds.cache.get(guildId)?.channels.cache.get(settings.log_channel);
|
|
if (!channel || !channel.isTextBased()) {
|
|
return null;
|
|
}
|
|
|
|
return channel as TextChannel;
|
|
}
|
|
|
|
function isEventEnabled(client: any, guildId: string, event: string): boolean {
|
|
const DB = client.DB;
|
|
const settings: any = DB.get('SELECT log_events FROM guild_settings WHERE guild_id = ?', guildId);
|
|
|
|
if (!settings?.log_events) {
|
|
return false;
|
|
}
|
|
|
|
const activeEvents = settings.log_events.split(',').filter(Boolean);
|
|
return activeEvents.includes(event);
|
|
}
|
|
|
|
async function sendLog(client: any, guildId: string, event: string, embed: EmbedBuilder) {
|
|
if (!isEventEnabled(client, guildId, event)) {
|
|
return;
|
|
}
|
|
|
|
const channel = getLogChannel(client, guildId);
|
|
if (!channel) {
|
|
return;
|
|
}
|
|
|
|
try {
|
|
await channel.send({ embeds: [embed] });
|
|
} catch (error) {
|
|
console.error(`[LOG] Error sending log (${event}):`, error);
|
|
}
|
|
}
|
|
|
|
// Message Delete
|
|
export default {
|
|
name: Events.MessageDelete,
|
|
async execute(message: Message) {
|
|
if (!message.guild || message.author.bot) return;
|
|
|
|
const embed = new EmbedBuilder()
|
|
.setTitle('🗑️ Nachricht gelöscht')
|
|
.setColor(0xe74c3c)
|
|
.addFields(
|
|
{ name: 'Autor', value: `${message.author.tag} (<@${message.author.id}>)`, inline: true },
|
|
{ name: 'Kanal', value: `<#${message.channelId}>`, inline: true }
|
|
)
|
|
.setTimestamp();
|
|
|
|
if (message.content) {
|
|
embed.addFields({ name: 'Inhalt', value: message.content.substring(0, 1024), inline: false });
|
|
}
|
|
|
|
if (message.attachments.size > 0) {
|
|
embed.addFields({ name: 'Anhänge', value: `${message.attachments.size} Datei(en)`, inline: true });
|
|
}
|
|
|
|
await sendLog(message.client, message.guildId!, 'messages', embed);
|
|
},
|
|
}; |