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:
@@ -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**.`
|
||||
);
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
|
||||
Reference in New Issue
Block a user