28

ACHTUNG!

Nur für Erwachsene

Diese Website enthält satirische, beleidigende und politisch unkorrekte Inhalte.

⚠ NUTZUNG AUF EIGENE GEFAHR ⚠

Wir übernehmen KEINE Verantwortung für psychische Schäden, Beleidigungen oder jegliche Konsequenzen.

SATIRE IST EINE ERNSTE SACHE!

MOZZGANS Developer Documentation 🚬

Technische Übersicht aller Features, Funktionen und Systeme

Projekt-Übersicht

MOZZGANS ist ein satirischer KI-Lebensberater mit aggressivem Charakter, der User beleidigt, Ratschläge gibt und dabei ein Learning-System nutzt um sich an Gespräche zu erinnern und neue Fluchwörter zu lernen.

Stack
• React 19 + TypeScript
• tRPC 11 + Express 4
• Drizzle ORM + MySQL
• Tailwind CSS 4
Features
• Learning System
• Cookie Recognition
• Image Generation
• Live Chat
• Karma System
• Achievements
• Reactions
AI
• LLM Integration
• Personality Analysis
• Escalation Strategy
• Memory System

Core Features

Learning System

Curse Word Learning

MOZZGANS erkennt automatisch neue Fluchwörter in User-Messages und speichert sie in der Datenbank.

// server/learningLogic.ts
detectAndLearnCurseWords(message: string)
→ Erkennt Muster: /arsch|scheiß|fick|wichs.../gi
→ Speichert in: learned_insults table

Chat Memories

Interessante Gesprächsmomente werden automatisch gespeichert und können später referenziert werden.

// server/learningLogic.ts
analyzeAndStoreMemory(userMsg, botResponse, context)
→ Speichert: memoryText, emotionalTone, createdAt
→ Tabelle: chat_memories

User Profiling

Anonyme User-Profile tracken Geschlecht, Persönlichkeit und Probleme ohne Email-Adressen zu speichern.

// server/learningLogic.ts
analyzeUserPersonality(messages)
→ Erkennt: gender, personalityTraits, problems
→ Tabelle: user_profiles (anonymousId via Cookie)
Cookie-Based User Recognition

User werden über Cookies wiedererkannt (persistent über Sessions). MOZZGANS kann sagen "Ah, DU schon wieder!"

// server/userRecognition.ts
getOrCreateAnonymousUserId(req, res)
→ Cookie: "mozzgans_user_id"
→ Lifetime: 1 Jahr
→ Format: nanoid(32)
Database Schema

learned_insults

id, word, source, category, usageCount, learnedAt

chat_memories

id, memoryText, context, emotionalTone, createdAt

user_profiles

id, anonymousId, gender, personalityTraits (JSON),
problems (JSON), conversationCount, karma, lastSeen

achievements

id, userId, achievementType, unlockedAt

message_reactions

id, messageId, userId, emoji, createdAt

chat_rooms

id, roomId, ownerId, viewCount, createdAt

chat_messages

id, roomId, userId, username, content, isBot, imageUrl, createdAt

beta_subscribers

id, email, userAnalysis, conversationContext,
gender, subscribedAt
Chat Endpoints

Normal Chat: chat.sendMessage

Input: message, history[]
Output: message, emotion, imageUrl, requestsBetaSignup
Features:
• Cookie recognition
• Curse word learning
• Memory storage
• Profile updates
• Escalation strategy (1-3, 4-8, 9-15, 16+)

Live Chat: liveChat.sendMessage

Input: roomId, userId, username, content
Output: success, userMessageId, botMessageId
Features:
• Same learning features as normal chat
• Rage level based on online users
• @username mentions in responses
MOZZGANS Personality System

Escalation Strategy

Nachrichten 1-3: Neugierig & Frech
Sarkastisch, gesprächig, leichte Beleidigungen, konkrete Gegenfragen
Nachrichten 4-8: Aggressiver werdend
Deutlich frecher, mittlere Beleidigungen, provokante Fragen
Nachrichten 9-15: Eskalation
RICHTIG derb, harte Beleidigungen, kürzere Antworten
Nachrichten 16+: Fluch-Duell
Nur noch kurze aggressive Schlagabtausche, maximale Beleidigungen

Curse Words Database

1000+ vordefinierte Fluchwörter kategorisiert nach Eskalationsstufe:

// server/curseWords.ts
LIGHT: ~60 Wörter (Vollpfosten, Spacko, Lauch, NPC...)
MEDIUM: ~60 Wörter (Arschloch, Wichser, Zicke...)
HEAVY: ~50 Wörter (Hurensohn, Fotze...)
CREATIVE: ~830 Wörter (Arschhaarzwirbler, Zipfelklatscher...)
Image Generation

MOZZGANS kann Bilder generieren basierend auf [IMAGE: beschreibung] Tags in Responses.

// server/_core/imageGeneration.ts
generateImage({ prompt })
→ Returns: { url: string }
// Beispiel in Response:
"Du Vollpfosten! [IMAGE: person drowning in garbage]"
→ Bild wird generiert und [IMAGE:] Tag entfernt
Karma System

User sammeln Karma-Punkte durch verschiedene Aktionen.

Karma Awarding

// server/routers.ts - sendMessage endpoints
+1 Karma: Pro gesendete Nachricht (Normal & Live Chat)
+5 Karma: Pro freigeschaltetem Achievement
+5 Karma: Share-Chat-View (shareRouter.ts)
+66 Karma: Beta-Subscription (beta.subscribe)
+66 Karma: Live-Chat-Owner wenn jemand in Room Beta macht
→ Alle Updates via SQL increment: karma = karma + X
→ Speichert in user_profiles.karma

Karma Leaderboard

Route: /karma
Endpoint: karma.getKarmaLeaderboard()
→ Zeigt Top 50 User sortiert nach Karma
→ Anonym (nur anonymousId, kein Gender/Email)
→ Zeigt viewCount pro User
Achievement System

8 verschiedene Achievements können freigeschaltet werden. Jedes Achievement gibt +5 Karma Bonus.

Achievement Types

FIRST_MESSAGE - Erste Nachricht gesendet
TEN_MESSAGES - 10 Nachrichten überlebt
BETA_TESTER - Beta-Subscription abgeschlossen
REACTION_MASTER - 10 Reaktionen gegeben
ARCHIVIST - Chat exportiert
KARMA_BEGINNER - 10 Karma-Punkte
KARMA_COLLECTOR - 50 Karma-Punkte
KARMA_MASTER - 100 Karma-Punkte

Achievement Logic

// server/routers/achievements.ts
checkAndUnlockAchievement(userId, type)
→ Prüft ob bereits unlocked
→ Prüft Bedingungen (z.B. conversationCount >= 10)
→ Speichert in achievements table
→ Returns: newly unlocked achievements[]
Message Reactions

User können auf Live-Chat-Nachrichten mit Emojis reagieren.

Available Reactions

👍 👎 😂 🤬

Reaction Endpoints

// server/routers/reactions.ts
addReaction(messageId, userId, emoji)
→ Verhindert Duplikate (unique constraint)
→ Speichert in message_reactions
removeReaction(messageId, userId, emoji)
→ Löscht Reaktion
getReactions(messageId)
→ Returns: emoji, count, userIds[]
Chat Export

User können Chat-Verläufe als Text-Datei exportieren.

Export Format

=== MOZZGANS CHAT EXPORT ===
Exportiert am: [timestamp]
[HH:MM] Username: Message text
[IMAGE: description]
--- Ende des Chats ---

Implementation

// Client-side only (keine API)
Erstellt Blob mit text/plain
Trigger: Download via anchor element
Filename: mozzgans_chat_[timestamp].txt
Unlocks: ARCHIVIST achievement
Admin Dashboard

Passwort-geschütztes Dashboard mit Statistiken (keine Email-Listen!)

Route: /admin
Password: (Admin-only, nicht öffentlich)
Statistiken:
• Total Users, Beta Subscribers, Chat Rooms, Messages
• Gelernte Fluchtwörter (mit Usage Counts)
• Gespeicherte Memories
• User-Profile Count
• Gender-Verteilung
• Top Persönlichkeiten & Probleme
• Top 10 Beta-Subscribers mit Charakter-Analysen

API Reference (tRPC)

Available Routers
chat.sendMessage
Normal 1-on-1 chat with MOZZGANS
liveChat.*
createRoom, joinRoom, sendMessage, getMessages, updateLastSeen, getOnlineUsers
beta.subscribe
Beta subscription with character profile display
beta.getLeaderboard
Top 10 "mieseste Charaktere" with creative names
karma.getKarmaLeaderboard
Top 50 karma collectors with view counts
achievements.*
checkAndUnlock, getUserAchievements, getStats
reactions.*
addReaction, removeReaction, getReactions
admin.getStatistics
Admin dashboard statistics (password required)
Development Notes

Key Files

• server/routers.ts - All tRPC endpoints
• server/db.ts - Database helpers
• server/learningLogic.ts - Learning system logic
• server/curseWords.ts - 1000+ curse words database
• server/userRecognition.ts - Cookie utilities
• drizzle/schema.ts - Database schema

Environment Variables

DATABASE_URL - MySQL connection string
BUILT_IN_FORGE_API_KEY - LLM & Image Generation
JWT_SECRET - Session cookies

Commands

pnpm dev - Start dev server
pnpm db:push - Push schema changes to database
pnpm build - Build for production

MOZZGANS v3.2 - Karma & Achievements Edition 😬

Für Fragen oder Probleme: Lies die Scheiss-Doku nochmal, du Vollpfosten! 😤