Screenshots zu Ideen, und der Bot legt die Forum-Tags selbst an
Zwei Fragen, zwei Antworten — eine davon ein Nein mit Umweg. ## Bilder im Eingabefenster: geht nicht Discord-Modals koennen nur Textfelder. Kein Datei-Anhang, keine Umgehung — das ist eine Grenze der Plattform, nicht unseres Codes. Der Umweg ist besser als er klingt: Wer nach dem Einreichen einen Screenshot in den Thread haengt, sieht ihn auf der Ideen-Seite. Die Bestaetigung nach dem Absenden sagt das jetzt auch. Damit kann man auch nachtraeglich noch Bilder dazulegen, was im Eingabefenster gar nicht ginge. ## Warum nicht einfach der Discord-Link Discord haengt seit einiger Zeit eine Signatur an die Anhang-Links (?ex=&is=&hm=), die nach etwa einem Tag ablaeuft. Ein gespeicherter Link zeigt morgen ein kaputtes Bild. Deshalb laden Devlogs und Galerie seit dem ersten Tag herunter — im Kopf von devlog-archive.js steht der Grund. Wuensche machen es jetzt genauso, ausgeliefert unter /wish-assets/. Beim Loeschen eines Beitrags oder eines ganzen Wunsches gehen die Dateien mit; sonst waechst der Ordner mit Bildern, auf die nichts mehr zeigt. Das Herunterladen stand vorher zweimal fast wortgleich im Code. Mit den Wuenschen waeren es drei Kopien geworden — also einmal nach bot/bilder.js, und Devlogs und Galerie ziehen mit um. Ein Fehler steckt jetzt an einer Stelle statt an dreien. ## Forum-Tags per Knopf Bisher musstest du sie von Hand anlegen. Jetzt macht es das Panel: die Bereiche von dort plus die fuenf Staende, mit ihren Emojis. Vorhandene bleiben, auch fremde — die Liste wird ergaenzt und nicht ersetzt. Discords Grenze von 20 Tags wird eingehalten, was nicht mehr reinpasst, wird gemeldet statt still verschluckt. Geprueft: forumTagsAnlegen gegen eine Kanal-Attrappe — leeres Forum, teilweise vorhandene, Gross/Kleinschreibung, fremde Tags, nichts zu tun (dann wird auch nicht geschrieben), volles Forum, kein Forum, kein Kanal. Im Browser die Ideen-Seite mit Bildern in einem Beitrag, einem Beitrag nur aus Bild ohne Text, und der Lightbox darueber. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
+20
-2
@@ -16,7 +16,7 @@ import {
|
||||
saveTemplate, listTemplates, deleteTemplate,
|
||||
getLevelRow, isPlaytester, saveWish, toggleWishVote, myWishVotes,
|
||||
getWish, searchWishes, setWishStatus, mergeWish, deleteWish, wishVoters, setWishCategory,
|
||||
wishComments,
|
||||
wishComments, wishCommentImages,
|
||||
listWishCategories, createWishCategory, updateWishCategory, deleteWishCategory,
|
||||
logAudit, listAudit, playerHistory, uptimeBuckets, watchdogBuckets, watchdogDays,
|
||||
heartbeatBuckets, heartbeatFirst,
|
||||
@@ -36,8 +36,10 @@ import { lastResults, GAME_ICONS } from '../bot/server-monitor.js';
|
||||
import { watchdogState, watchedServices } from '../bot/watchdog.js';
|
||||
import { listRules, setRuleEnabled } from '../bot/automod.js';
|
||||
import {
|
||||
wunschAnlegen, wunschTagsAktualisieren, STATUS_LABEL, STATUS_EMOJI,
|
||||
wunschAnlegen, wunschTagsAktualisieren, forumTagsAnlegen, wunschBilderDir,
|
||||
STATUS_LABEL, STATUS_EMOJI,
|
||||
} from '../bot/wishes.js';
|
||||
import { bilderLoeschen } from '../bot/bilder.js';
|
||||
import { heartbeatSerie } from '../bot/heartbeat.js';
|
||||
import { publishAppForm, unpublishAppForm, MAX_QUESTIONS } from '../bot/app-forms.js';
|
||||
import { sanitizeEmbed } from './api-v1.js';
|
||||
@@ -2058,6 +2060,19 @@ ${rssItems}
|
||||
return { deleted: weg, bereiche: listWishCategories(), wishes: topWishes(50) };
|
||||
});
|
||||
|
||||
// Fehlende Tags im Forum anlegen — spart das Abtippen der Bereichsnamen
|
||||
// und der fuenf Staende, und Tippfehler waeren hier stumme Fehlschlaege
|
||||
app.post('/api/wish-categories/tags', async (request, reply) => {
|
||||
if (requireScope(request, reply, 'community')) return;
|
||||
try {
|
||||
const res = await forumTagsAnlegen(client);
|
||||
logAudit(getSessionUser(request), 'forum-tags angelegt', res.angelegt.join(', ') || 'keine');
|
||||
return { ok: true, ...res };
|
||||
} catch (error) {
|
||||
return reply.code(400).send({ error: error.message });
|
||||
}
|
||||
});
|
||||
|
||||
// --- Wünsche verwalten (Team) ---
|
||||
|
||||
const STATUS = Object.fromEntries(Object.entries(STATUS_LABEL).map(([id, label]) => [
|
||||
@@ -2162,7 +2177,10 @@ ${rssItems}
|
||||
if (requireScope(request, reply, 'community')) return;
|
||||
const wunsch = getWish(Number(request.params.id));
|
||||
if (!wunsch) return { deleted: false, wishes: topWishes(50) };
|
||||
// Erst die Dateinamen holen, dann loeschen — danach sind sie weg
|
||||
const bilder = wishCommentImages(wunsch.id);
|
||||
deleteWish(wunsch.id);
|
||||
await bilderLoeschen(wunschBilderDir, bilder);
|
||||
logAudit(getSessionUser(request), 'wunsch gelöscht', String(wunsch.idea).slice(0, 60));
|
||||
return { deleted: true, wishes: topWishes(50) };
|
||||
});
|
||||
|
||||
Reference in New Issue
Block a user