Zwei Befunde aus dem Betriebslog
1. /api/auditlog antwortete mit 500. `displayAvatarURL({ size: 48 })` — 48 ist
keine Zweierpotenz, Discord nimmt nur 16 bis 4096. Ueberall sonst im Code
stehen 64 oder 128, nur hier nicht. Der Wurf lief durch das map, also riss
ein einziges Avatar die ganze Liste mit. Jetzt 64, und die Bildsuche faengt
ihre Fehler selbst ab. Dazu eine Pruefung, die verbotene Groessen im
Quelltext findet, bevor sie jemand im Log findet.
2. "Sprachverbindung kam nicht zustande" sagt jetzt, WO sie stehen blieb.
Das entscheidet naemlich die Ursache: bleibt sie bei `signalling`, hat
Discord nie einen Sprachserver genannt (Rechte, Gateway). Bleibt sie bei
`connecting`, ist der Sprachserver bekannt und der UDP-Austausch mit ihm
scheitert — praktisch immer gesperrtes ausgehendes UDP. Beides steht jetzt
im Log und in der Antwort auf /radio.
Dazu der dokumentierte Umgang mit Close-Code 4014: rausgeworfen oder
verschoben heisst nicht wiederverbinden, sondern aufhoeren.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
+9
-4
@@ -2471,11 +2471,16 @@ ${rssItems}
|
||||
// Audit-Log: die letzten Team-/Owner-Aktionen im Webinterface (nur Owner)
|
||||
app.get('/api/auditlog', async (request, reply) => {
|
||||
if (requireAdmin(request, reply)) return;
|
||||
// 64 und nicht 48: Discord nimmt nur Zweierpotenzen von 16 bis 4096.
|
||||
// Mit 48 warf die Bibliothek, und weil der Wurf durch das map lief,
|
||||
// riss ein einziges Avatar das ganze Protokoll mit — 500 statt Liste.
|
||||
const bild = (id) => {
|
||||
for (const guild of client.guilds.cache.values()) {
|
||||
const m = guild.members?.cache?.get(id);
|
||||
if (m) return m.displayAvatarURL?.({ size: 48 }) ?? null;
|
||||
}
|
||||
try {
|
||||
for (const guild of client.guilds.cache.values()) {
|
||||
const m = guild.members?.cache?.get(id);
|
||||
if (m) return m.displayAvatarURL?.({ size: 64 }) ?? null;
|
||||
}
|
||||
} catch { /* ein fehlendes Bild ist kein Grund, die Liste zu verlieren */ }
|
||||
return null;
|
||||
};
|
||||
return { entries: listAudit(100).map((e) => ({ ...e, avatar: bild(e.user_id) })) };
|
||||
|
||||
Reference in New Issue
Block a user