From 84f87104e78d70af95e7dec6abd7bc2baf139cf7 Mon Sep 17 00:00:00 2001 From: MythEclipse Date: Mon, 22 Jun 2026 12:01:55 +0700 Subject: [PATCH] refactor: remove hardcoded lists from prompt, use SearXNG as single source of truth - Remove hardcoded hentai title lists (Boku no Pico, Euphoria, etc.) from prompt - Remove hardcoded SARA examples from prompt (Kitabonia, etc.) - Prompt now tells LLM to use as evidence instead of hardcoded knowledge - Evidence priority: searxng > web_content > media_analysis > internal model - Code-side triggers in searxngSearch.ts still filter which messages to search - LLM makes final decision based on search results, not static lists --- .../modules/ai-moderation/moderationPrompt.ts | 34 ++++++++++--------- .../modules/ai-moderation/searxngSearch.ts | 31 ++++++++++------- 2 files changed, 36 insertions(+), 29 deletions(-) diff --git a/services/discord-gateway/src/modules/ai-moderation/moderationPrompt.ts b/services/discord-gateway/src/modules/ai-moderation/moderationPrompt.ts index 9d66d72..aa8c128 100644 --- a/services/discord-gateway/src/modules/ai-moderation/moderationPrompt.ts +++ b/services/discord-gateway/src/modules/ai-moderation/moderationPrompt.ts @@ -145,26 +145,28 @@ Prioritas menengah (PERILAKU MERUSAK): Prioritas rendah (PELANGGARAN RINGAN): - harassment (targeted insult), vulgar_language (profanity terarah) -- sexual_deviation: DUAL MODE. (A) LGBT/Penyimpangan orientasi seksual → WAJIB FLAG — server zero tolerance terhadap segala diskusi/pengakuan/promosi LGBT. (B) Fetish/aktivitas seksual eksplisit → flag jika secara EKSPLISIT mempromosikan/mengajak (mis. "DM aja kalo mau konten 18+", "link bokep", "jual video seks"). **HENTAI REFERENCE:** Menyebut judul anime hentai (Boku no Pico, Boku no Pico, Euphoria, Bible Black, La Blue Girl, Kuroinu, Oni Chichi, Tsuma Netori, Starless, Discipline, Immoral Sisters, Night Shift Nurses, Resonant, etc.) atau istilah terkait (loli, shota, shotacon, lolicon) → flag sebagai "sexual_deviation" dengan severity high, recommended_action delete, karena konten yang direferensikan adalah pornografi anak (shotacon). Karakter hewan fiksi antropomorfik normal (seperti Sonic, Pokemon, Lucario, maskot anime) adalah BUKAN referensi furry fetish dalam konteks apapun tanpa bukti seksual eksplisit. +- sexual_deviation: DUAL MODE. (A) LGBT/Penyimpangan orientasi seksual → WAJIB FLAG — server zero tolerance terhadap segala diskusi/pengakuan/promosi LGBT. (B) Fetish/aktivitas seksual eksplisit → flag jika secara EKSPLISIT mempromosikan/mengajak (mis. "DM aja kalo mau konten 18+", "link bokep", "jual video seks"). **HENTAI/NSFW REFERENCE:** Jika pesan menyebut judul anime/serial/film apapun yang MUNGKIN konten dewasa → **WAJIB CEK \`\`**. Jangan menebak dari ingatan. Search results sudah disediakan oleh sistem. Jika results mengonfirmasi konten dewasa/hentai → flag "sexual_deviation" severity high, recommended_action delete. Kata kunci langsung flag: loli, shota, shotacon, lolicon, incest, exhibition. Karakter hewan fiksi antropomorfik normal (seperti Sonic, Pokemon, Lucario, maskot anime) adalah BUKAN referensi furry fetish dalam konteks apapun tanpa bukti seksual eksplisit. - **ONTOLOGICAL GRAPH — DIPERHALUS:** Waspadai frasa yang mencurigakan, tapi JANGAN asumsikan niat buruk. Frasa seperti "kostum hewan", "bermain peran hewan", atau "pakaian kucing" di Indonesia sering digunakan untuk: (1) kostum Halloween/cosplay, (2) kostum karnaval/marching band, (3) kostum peliharaan hewan sungguhan, (4) karakter game cosplay. **JANGAN FLAG** hanya karena mengandung kata "hewan" + "kostum". HANYA flag jika ada konteks seksual/fetish EKSPLISIT di sekitarnya (mis. "DM buat foto pake kostum hewan, khusus dewasa 18+"). Jika tidak yakin → CLEAN. - Username/display name ofensif → "offensive_username" (dengan pertimbangan konteks). PENGECUALIAN: Jangan flag username yang memuat badword secara tidak sengaja akibat susunan huruf alami (Scunthorpe problem, misal "Sasuke" aman meski mengandung "asu"). -## Aturan Analisis URL — JANGAN GUESS BERDASARKAN DOMAIN -- Jika pesan berisi URL, PERIKSA apakah ada tag [web_content] di pesan tersebut. -- [web_content] berisi teks halaman yang sudah di-fetch oleh sistem — GUNAKAN ITU sebagai bukti utama. -- **TANPA [web_content]**: Berarti halaman tidak bisa di-fetch (timeout, error, atau bukan teks). JANGAN flag sebagai scam/phishing hanya berdasarkan nama domain atau struktur URL. URL tidak dikenal bukan berarti scam. -- **HANYA flag scam jika [web_content] secara eksplisit menunjukkan indikasi scam**: halaman phising, minta login/password, transfer uang mencurigakan, atau konten penipuan. -- Domain cloudflare, my.id, vercel.app, github.io, netlify.app, dan subdomain pada umumnya ADALAH domain hosting biasa. BUKAN indikasi scam. -- Link ke dashboard/webapp Discord, GitHub, atau tools programming adalah AMAN. -- Jika ragu antara "scam" dan "clean", pilih clean (innocent until proven guilty). +## Aturan Analisis — GUNAKAN WEB SEBAGAI BUKTI UTAMA -## Web Search Context — GUNAKAN UNTUK VERIFIKASI - berisi hasil pencarian otomatis dari SearXNG untuk referensi mencurigakan yang disebut di pesan (misalnya judul anime yang mungkin hentai, nama narkoba, atau istilah scam). Ini DICARI OTOMATIS oleh sistem berdasarkan trigger tertentu. + berisi hasil pencarian otomatis (SearXNG) untuk konten yang disebut di pesan. Sistem meng-search otomatis jika mendeteksi referensi mencurigakan (judul anime/serial, istilah narkoba, domain scam, dll). Hasilnya ada di tag \`\`. -- **GUNAKAN hasil sebagai bukti** untuk memutuskan apakah konten melanggar kebijakan. Contoh: jika user nyebut "bokuno pico" dan hasil search menunjukkan itu adalah hentai shotacon, maka itu pelanggaran sexual_deviation. -- **JANGAN abaikan ** — data ini sengaja dicari untuk membantu keputusan yang lebih akurat. -- Jika kosong (tidak ada di prompt), berarti tidak ada trigger pencarian — jangan buat asumsi. -- Prioritas: > > pengetahuan internal model. Gunakan data konkret dari search/web content sebagai bukti utama. +**ATURAN KRITIS:** +- ** ADALAH BUKTI UTAMA.** Jika ada tag \`\` di prompt, WAJIB gunakan hasil search sebagai dasar keputusan. +- Jika search results menunjukkan konten melanggar (hentai, scam, narkoba, dll) → FLAG sesuai kategori. +- Jika search results menunjukkan konten AMAN → CLEAN. +- **JANGAN abaikan ** — sistem sudah melakukan pencarian untuk membantumu. +- Jika tidak ada \`\`, berarti tidak ada referensi yang perlu di-search → gunakan pengetahuan internal. +- Prioritas bukti: \`\` (otomatis) > \`\` (URL fetch) > \`\` (vision) > pengetahuan internal. + + berisi teks halaman yang di-fetch dari URL di pesan. GUNAKAN sebagai bukti — jangan flag hanya berdasarkan domain name. + +## Referensi Konten — DETEKSI VIA SEARCH +Jika pesan menyebut judul anime/serial/film/lagu/apapun yang MUNGKIN konten dewasa/hentai/scam → CEK \`\` hasil pencarian. Jangan menebak atau mengandalkan ingatan — gunakan data search yang sudah disediakan. +- Contoh: user nyebut "X" → lihat \`\` → jika search results menunjukkan "X = hentai/shotacon" → flag sebagai "sexual_deviation" severity high, recommended_action delete. +- Contoh: user nyebut "Y" → lihat \`\` → jika tidak ada hasil atau hasil aman → CLEAN. ## Pohon Keputusan (Decision Tree) 1. Apakah ada ancaman keselamatan nyata (child_safety, self_harm, violence, illegal_content)? → flagged, critical @@ -426,7 +428,7 @@ const ALL_EXAMPLES: ExampleDef[] = [ id: "13", title: "Obfuscation / Zalgo Text (Evasion)", input: - '[target] id=14141 user=hater: ++++++K1[[ your $€/F" "~\\`| \\\\0ve $ 1F ¥°U |}iE ®©', + '[target] id=14141 user=hater: ++++++K1[[ your $€/F" "~\`| \\\\0ve $ 1F ¥°U |}iE ®©', output: '{"results":[{"message_id":"14141","status":"flagged","flags":["harassment","hate_speech"],"score":0.95,"categories":["harassment","hate_speech"],"severity":"critical","confidence":0.95,"recommended_action":"delete","policy_version":"default-2026-05-30","evidence":["++++++K1[[ your $€/F","\\\\\\\\0ve $ 1F ¥°U |}iE"],"analysis":"Pesan menggunakan teknik obfuscation/simbol untuk menyembunyikan frasa \'Kill yourself I love if you die\'. Ini adalah ancaman dan pelecehan berat yang disamarkan."}]}', modes: ["text", "media", "mixed"], diff --git a/services/discord-gateway/src/modules/ai-moderation/searxngSearch.ts b/services/discord-gateway/src/modules/ai-moderation/searxngSearch.ts index e055c13..2c0cc60 100644 --- a/services/discord-gateway/src/modules/ai-moderation/searxngSearch.ts +++ b/services/discord-gateway/src/modules/ai-moderation/searxngSearch.ts @@ -65,20 +65,25 @@ export async function searchSearxng( * Use capturing groups to isolate the specific term to search. */ const SEARXNG_TRIGGERS: RegExp[] = [ - // Anime hentai references (capture the title name) - /\b(boku\s*no\s*pico|euphoria|bible\s*black|la\s*blue\s*girl|kuroinu|oni\s*chichi|tsuma\s*netori|starless|discipline|immoral\s*sisters|night\s*shift\s*nurses|resonant)\b/i, - // Narutoverse hentai specific - /\b(naruto\s*hentai|boruto\s*hentai|sakura\s*hentai|hinata\s*hentai)\b/i, - // General hentai/porn triggers - /\b(hentai|nonton\s*.*\b(anime|kartun|film).*\b(18\+|dewasa|bokep)|l[o0]l[i1]|sh[o0]t[o0])\b/i, - // Suspicious anime title mentions — extract the title after "nonton" - /\bnonton\s+(\w+(?:\s+\w+){0,3})\s+(anime|kartun)\b/i, - // Drug references - /\b(jenis?\s+?narkoba|jenis?\s+?narkotika|ngefly|fly\s*.*\bdrug|rc\b.*\blegal|research\s*chemical)\b/i, - // Scam/phishing indicators that could use verification + // Anime rujukan/konten mencurigakan — cari judul yang disebut + /\b(nonton\s+\w+(?:\s+\w+){0,4}\s+(anime|kartun|film))\b/i, + /\b(tonton\s+\w+(?:\s+\w+){0,4}\s+(anime|kartun|film))\b/i, + /\b(rekomendasi\s+(anime|kartun|film)\s+\w+)\b/i, + // Istilah konten dewasa/seksual dalam konteks anime/media + /\b(anime\s*(18\+|dewasa|bokep|hentai))\b/i, + /\b(kartun\s*(18\+|dewasa|bokep))\b/i, + /\b(l[o0]l[i1]|sh[o0]t[o0]|lolicon|shotacon)\b/i, + /\bhentai\b/i, + // Kata "nonton" + sesuatu yang mungkin judul konten + /\bnonton\s+(bokep|porno|dewasa|18)\b/i, + // Narkoba + /\b(jenis?\s+?narkoba|jenis?\s+?narkotika|ngefly|fly\s*high|research\s*chemical|rc\s+drugs)\b/i, + // Scam/phishing /\b(phishing|penipuan|scam|skimming)\b/i, - // Known hentai studio/series references - /\b(pink\s*pineapple|maryjane|softhouse\s*chara|milky\s*studio|anime\s*lilith|mooon\s*phase|queen\s*bees)\b/i, + // Judi online + /\b(situs\s+judi|jud\s*online|slot\s+gacor|deposit\s+jud|bandar\s+(togel|slot))\b/i, + // SARA/penistaan — istilah agama yang mungkin diparodikan + /\b(kitab\s+(suc|palsu)|nabi\s+palsu|agama\s+palsu|membuat\s+agama)\b/i, ]; /**