Tickets: Transcript beim Schließen + Thread-Löschung

- Schließen-Button erstellt jetzt ein Text-Transcript (chronologisch, inkl.
  Attachment-URLs, max 500 Nachrichten) und schickt es dem Ersteller per DM
- Kopie ins Mod-Log (Aufbewahrung fürs Team, mit Hinweis falls DM blockiert)
- Thread wird danach gelöscht statt nur archiviert (Fallback: sperren+archivieren,
  falls dem Bot Lösch-Rechte fehlen)

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
2026-07-30 01:11:16 +02:00
co-authored by Claude Fable 5
parent 32b7f5fde5
commit 19ec2802ac
3 changed files with 91 additions and 11 deletions
+4 -10
View File
@@ -9,11 +9,12 @@ import { registerLevels } from './levels.js';
import { registerPresence } from './presence.js';
import { registerExtras } from './extras.js';
import { handleApplyButton, handleApplyModal, handleReviewButton } from './app-forms.js';
import { closeTicketWithTranscript } from './tickets.js';
import { handleRoleMenuButton } from './role-menus.js';
import {
addPlaytester, removePlaytester, isWish, bumpWish,
getGiveaway, toggleGiveawayEntry, giveawayEntries,
saveTicket, getTicket, closeTicket, openTicketOf,
saveTicket, openTicketOf,
} from '../db.js';
import { ChannelType, ActionRowBuilder, ButtonBuilder, ButtonStyle, EmbedBuilder } from 'discord.js';
import * as ping from './commands/ping.js';
@@ -242,15 +243,8 @@ export async function startBot() {
}
if (interaction.isButton() && interaction.customId === 'ticket_close') {
try {
const ticket = getTicket(interaction.channelId);
if (!ticket) {
await interaction.reply({ content: '❌ Das ist kein Ticket-Thread.', flags: MessageFlags.Ephemeral });
return;
}
closeTicket(interaction.channelId);
await interaction.reply(`🔒 Ticket geschlossen von **${interaction.member?.displayName ?? interaction.user.username}**.`);
await interaction.channel.setLocked(true).catch(() => {});
await interaction.channel.setArchived(true).catch(() => {});
// Transcript per DM + Mod-Log sichern, dann Thread löschen
await closeTicketWithTranscript(interaction);
} catch (error) {
console.error('[ticket] Schließen fehlgeschlagen:', error);
}