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:
@@ -326,14 +326,21 @@ db.exec(`
|
||||
author_id TEXT,
|
||||
avatar TEXT,
|
||||
content TEXT NOT NULL,
|
||||
images TEXT NOT NULL DEFAULT '[]',
|
||||
created_at TEXT NOT NULL DEFAULT (datetime('now'))
|
||||
);
|
||||
CREATE INDEX IF NOT EXISTS idx_wish_comments ON wish_comments (wish_id, created_at);
|
||||
`);
|
||||
{
|
||||
const spalten = db.prepare('PRAGMA table_info(wish_comments)').all().map((c) => c.name);
|
||||
if (!spalten.includes('images')) {
|
||||
db.exec(`ALTER TABLE wish_comments ADD COLUMN images TEXT NOT NULL DEFAULT '[]'`);
|
||||
}
|
||||
}
|
||||
const insertCommentStmt = db.prepare(`
|
||||
INSERT OR REPLACE INTO wish_comments
|
||||
(message_id, wish_id, author, author_id, avatar, content, created_at)
|
||||
VALUES (@message_id, @wish_id, @author, @author_id, @avatar, @content, @created_at)
|
||||
(message_id, wish_id, author, author_id, avatar, content, images, created_at)
|
||||
VALUES (@message_id, @wish_id, @author, @author_id, @avatar, @content, @images, @created_at)
|
||||
`);
|
||||
const updateCommentStmt = db.prepare('UPDATE wish_comments SET content = ? WHERE message_id = ?');
|
||||
const deleteCommentStmt = db.prepare('DELETE FROM wish_comments WHERE message_id = ?');
|
||||
@@ -344,7 +351,15 @@ const dropCommentsStmt = db.prepare('DELETE FROM wish_comments WHERE wish_id = ?
|
||||
export const saveWishComment = (c) => insertCommentStmt.run(c);
|
||||
export const updateWishComment = (messageId, text) => updateCommentStmt.run(text, messageId).changes > 0;
|
||||
export const deleteWishComment = (messageId) => deleteCommentStmt.run(messageId).changes > 0;
|
||||
export const wishComments = (wishId, limit = 200) => listCommentsStmt.all(wishId, limit);
|
||||
export const wishComments = (wishId, limit = 200) =>
|
||||
listCommentsStmt.all(wishId, limit).map((c) => ({ ...c, images: JSON.parse(c.images || '[]') }));
|
||||
/** Alle Bilddateien eines Wunsches — zum Wegräumen beim Löschen */
|
||||
const wishImagesStmt = db.prepare('SELECT images FROM wish_comments WHERE wish_id = ?');
|
||||
export const wishCommentImages = (wishId) =>
|
||||
wishImagesStmt.all(wishId).flatMap((r) => JSON.parse(r.images || '[]'));
|
||||
const commentImagesStmt = db.prepare('SELECT images FROM wish_comments WHERE message_id = ?');
|
||||
export const wishCommentImagesOf = (messageId) =>
|
||||
JSON.parse(commentImagesStmt.get(messageId)?.images || '[]');
|
||||
|
||||
const listWishCatsStmt = db.prepare('SELECT * FROM wish_categories ORDER BY sort, id');
|
||||
const getWishCatStmt = db.prepare('SELECT * FROM wish_categories WHERE id = ?');
|
||||
|
||||
Reference in New Issue
Block a user