Feature 3: Devlog-Archiv — Live-Listener + /devlog-backfill
- Webhook-Nachrichten im Devlog-Kanal werden automatisch in SQLite archiviert (devlog.py im EcoGame-Repo bleibt unverändert) - /devlog-backfill (Admin): scannt die komplette Kanal-Historie in 100er-Blöcken - Dedupe über Discord-Message-ID, Embeds werden mit Titel+Beschreibung erfasst - Neue Intents: GuildMessages + MessageContent, neue Env-Var DEVLOG_CHANNEL_ID Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
@@ -0,0 +1,38 @@
|
||||
// /devlog-backfill — komplette Kanal-Historie scannen und alte Devlogs nacharchivieren (Admin only)
|
||||
import { SlashCommandBuilder, PermissionFlagsBits, MessageFlags } from 'discord.js';
|
||||
import { config } from '../../config.js';
|
||||
import { archiveDevlogMessage } from '../devlog-archive.js';
|
||||
|
||||
export const data = new SlashCommandBuilder()
|
||||
.setName('devlog-backfill')
|
||||
.setDescription('Archiviert alle bisherigen Devlogs aus dem Devlog-Kanal')
|
||||
.setDefaultMemberPermissions(PermissionFlagsBits.Administrator);
|
||||
|
||||
export async function execute(interaction) {
|
||||
await interaction.deferReply({ flags: MessageFlags.Ephemeral });
|
||||
|
||||
const channel = await interaction.client.channels.fetch(config.devlogChannelId);
|
||||
if (!channel?.isTextBased()) {
|
||||
await interaction.editReply('❌ Devlog-Kanal nicht gefunden oder kein Textkanal.');
|
||||
return;
|
||||
}
|
||||
|
||||
// Historie rückwärts in 100er-Blöcken durchlaufen (Discord-API-Maximum pro Fetch)
|
||||
let scanned = 0;
|
||||
let saved = 0;
|
||||
let before;
|
||||
for (;;) {
|
||||
const batch = await channel.messages.fetch({ limit: 100, before });
|
||||
if (batch.size === 0) break;
|
||||
|
||||
for (const message of batch.values()) {
|
||||
scanned++;
|
||||
if (archiveDevlogMessage(message)) saved++;
|
||||
}
|
||||
before = batch.last().id;
|
||||
}
|
||||
|
||||
await interaction.editReply(
|
||||
`✅ Backfill fertig: ${scanned} Nachrichten gescannt, **${saved} Devlogs neu archiviert**.`
|
||||
);
|
||||
}
|
||||
Reference in New Issue
Block a user