Devlog-Archiv: Filter akzeptiert auch Bot-Posts, Backfill-Report mit Absender-Aufschlüsselung

- devlog.py kann per Webhook ODER Bot-Token posten — beides wird jetzt archiviert
  (nur User-Chatter und der EcoBot selbst bleiben ausgeschlossen)
- /devlog-backfill meldet jetzt Webhook/Bot/User-Zählung zur Diagnose

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
2026-07-22 23:56:42 +02:00
co-authored by Claude Opus 4.8
parent 2c63c62e14
commit 2f9d548bc8
2 changed files with 15 additions and 6 deletions
+9 -3
View File
@@ -18,21 +18,27 @@ export async function execute(interaction) {
}
// Historie rückwärts in 100er-Blöcken durchlaufen (Discord-API-Maximum pro Fetch)
let scanned = 0;
let saved = 0;
let before;
// Aufschlüsselung nach Absender-Typ — hilft bei der Diagnose, wenn nichts archiviert wird
const counts = { webhook: 0, bot: 0, user: 0 };
for (;;) {
const batch = await channel.messages.fetch({ limit: 100, before });
if (batch.size === 0) break;
for (const message of batch.values()) {
scanned++;
if (message.webhookId) counts.webhook++;
else if (message.author?.bot) counts.bot++;
else counts.user++;
if (archiveDevlogMessage(message)) saved++;
}
before = batch.last().id;
}
const scanned = counts.webhook + counts.bot + counts.user;
await interaction.editReply(
`✅ Backfill fertig: ${scanned} Nachrichten gescannt, **${saved} Devlogs neu archiviert**.`
`✅ Backfill fertig: ${scanned} Nachrichten gescannt ` +
`(${counts.webhook} Webhook, ${counts.bot} Bot, ${counts.user} User), ` +
`**${saved} Devlogs neu archiviert**.`
);
}
+6 -3
View File
@@ -21,9 +21,12 @@ function extractContent(message) {
* @returns {boolean} true, wenn neu gespeichert
*/
export function archiveDevlogMessage(message) {
// Nur Webhook-Nachrichten — devlog.py postet per Discord-Webhook.
// Filtert nebenbei User-Chatter und Bot-Posts im Kanal aus.
if (!message.webhookId) return false;
// Devlogs kommen von Webhooks oder fremden Bots/Apps (je nachdem, wie
// devlog.py postet). User-Chatter und der EcoBot selbst werden ignoriert.
const isWebhook = Boolean(message.webhookId);
const isForeignBot =
message.author?.bot === true && message.author.id !== message.client?.user?.id;
if (!isWebhook && !isForeignBot) return false;
const content = extractContent(message);
if (!content) return false;