// PRUEBA E2E del flujo de moderación desde Discord: // 1) Crear un post falso en cuarentena (published=0) // 2) Enviar la notificación real al webhook de moderación (con links) // 3) Simular aprobación con token bueno -> verificar que se publica const Database = require("better-sqlite3"); const db = new Database("./data/worst-scan.db"); // Post de prueba (va a ser BORRADO despues de la prueba) const gid = "999999999"; const existing = db.prepare("SELECT id FROM posts WHERE gid = ?").get(gid); let postId; if (existing) { postId = existing.id; db.prepare("UPDATE posts SET published=0, title=?, tags=? WHERE id=?").run( "TEST - Prueba de moderacion desde Discord", JSON.stringify(["doujinshi", "lolicon", "translated"]), postId ); console.log("Post de prueba actualizado, id:", postId); } else { const r = db.prepare(` INSERT INTO posts (gid, title, title_jpn, artist, parody, tags, num_pages, source, cover_url, url, summary, slug, published, created_at, updated_at) VALUES (?, ?, NULL, 'test-artist', 'original', ?, 30, 'nhentai', NULL, 'https://nhentai.net/g/999999999/', 'Post de prueba del flujo de moderacion.', ?, 0, datetime('now'), datetime('now')) `).run(gid, "TEST - Prueba de moderacion desde Discord", JSON.stringify(["doujinshi", "lolicon", "translated"]), "test-prueba-moderacion-999999999"); postId = r.lastInsertRowid; console.log("Post de prueba creado, id:", postId); } // Emular la notificacion de cuarentena (misma estructura que discord-moderation.ts) const MOD_WEBHOOK = "https://discord.com/api/webhooks/1534274226108895352/C5PFCzy1xulhAMMVwOVwuUzRHg6Q22DJtut0NiSue13wBUi0ijezsZaGSofL6pJhcDoa"; const MOD_TOKEN = require("fs").readFileSync("./.env", "utf8").match(/DISCORD_MOD_TOKEN=(\w+)/)[1]; const base = `https://worstscan.xyz/api/review/${postId}?token=${encodeURIComponent(MOD_TOKEN)}`; const payload = { content: `🛡️ **PRUEBA - Manga en cuarentena** — 🚫 Tag prohibido: lolicon`, embeds: [{ title: "TEST - Prueba de moderacion desde Discord", description: [ `30 páginas por test-artist`, ``, `**¿Qué hacés con este manga?**`, `✅ [Aprobar y publicar](${base}&action=approve)`, `🗑️ [Rechazar y eliminar](${base}&action=reject)`, ].join("\n"), color: 0xef4444, thumbnail: { url: `https://worstscan.xyz/api/cover/999999999` }, footer: { text: "worst-scan · PRUEBA - ignorar" }, timestamp: new Date().toISOString(), }], }; fetch(MOD_WEBHOOK, { method: "POST", headers: { "Content-Type": "application/json" }, body: JSON.stringify(payload), }).then(async (res) => { console.log("Webhook de moderacion:", res.status === 204 ? "OK (mensaje enviado a Discord)" : "error " + res.status); console.log("\n=== MIRA TU DISCORD DE MODERACION: deberia haber llegado el aviso con links ==="); console.log("Links del mensaje:"); console.log(" Aprobar:", `${base}&action=approve`); console.log(" Rechazar:", `${base}&action=reject`); console.log("\nEl post esta en cuarentena (published=0). NO lo toques: voy a simular la aprobacion despues."); db.close(); }).catch(e => { console.log("ERROR:", e.message); db.close(); });