Mittwoch, 21 Januar 2026

Diese Woche am beliebtesten

Vertiefendes Material

Stoned Chat

Lust auf etwas völlig Abgedrehtes? Mit unserem einzigartigen Chat-Script erleben Sie eine Chat-KI – Chat GPT, die so klingt, als wäre sie stoned oder leicht betrunken. Das Ergebnis: ulkige, verrückte und manchmal komplett sinnfreie Antworten – perfekt für Spaß, Unterhaltung oder als Gimmick auf Ihrer Website.

Highlights:

  • KI-ähnliche Antworten: Die Figur wirkt, als hätte sie einen Drink zu viel gehabt – locker, verspielt, manchmal verplant
  • Optisch professionelles Design: Modernes Layout, stylische UI, optimiert für Desktop und Smartphone
  • Echtzeit-Kommunikation: Dank AJAX und JS laufen die Chats flüssig ohne Reload
  • Sofort einsatzbereit: Alles in einer Datei, kein kompliziertes Setup
  • Humor & Entertainment pur: Ihre Besucher werden schmunzeln und lachen

Technische Details:

  • Entwickelt in PHP, AJAX und JavaScript
  • Keine externe Datenbank nötig, läuft direkt auf jedem gängigen Webserver
  • Responsive Design – funktioniert auf PC, Tablet und Smartphone
  • Sauberer Code, der wie aus einer professionellen Agentur wirkt

Einsatzmöglichkeiten:

  • Fun-Gadget auf Ihrer Website
  • Party- oder Entertainment-Seite
  • Überraschungsgag für Freunde, Communitys oder Social Media
<?php
/*******************************************************
 * Stoned Chat — Single-file PHP + AJAX + JS
 * Design: Agentur-Style (Glasmorphismus, Dark UI)
 * Speicher: PHP Session (optional: JSON persist)
 * Autor: Dreamcodes.NET
 *******************************************************/
declare(strict_types=1);
session_start();
header('X-Content-Type-Options: nosniff');

const APP_TITLE = 'Stoned Chat';
const BRAND_FOOTER = '© '.date('Y').' <a href="https://www.dreamcodes.net" target="_blank" class="underline decoration-dotted hover:no-underline">Dreamcodes</a>';

if (!isset($_SESSION['chat'])) {
  $_SESSION['chat'] = [];
}

/* ---------------- AJAX Router ---------------- */
if (isset($_GET['action'])) {
  header('Content-Type: application/json; charset=UTF-8');
  $action = $_GET['action'];

  if ($action === 'send') {
    $payload = json_decode(file_get_contents('php://input'), true) ?: [];
    $msg = trim((string)($payload['message'] ?? ''));
    $level = (int)($payload['level'] ?? 60); // 0..100
    $tone  = (string)($payload['tone'] ?? 'chill'); // chill | goofy | wise
    if ($msg === '') {
      echo json_encode(['ok'=>false,'error'=>'empty']); exit;
    }
    $reply = generate_stoned_reply($msg, $level, $tone);
    append_message('user', $msg);
    append_message('bot', $reply);
    echo json_encode(['ok'=>true,'reply'=>$reply,'history'=>$_SESSION['chat']]); exit;
  }

  if ($action === 'history') {
    echo json_encode(['ok'=>true,'history'=>$_SESSION['chat']]); exit;
  }

  if ($action === 'clear') {
    $_SESSION['chat'] = [];
    echo json_encode(['ok'=>true]); exit;
  }

  http_response_code(404);
  echo json_encode(['ok'=>false,'error'=>'unknown_action']); exit;
}

/* ---------------- Helpers ---------------- */
function append_message(string $role, string $text): void {
  $_SESSION['chat'][] = [
    'role'=>$role,
    'text'=>$text,
    'ts'=>time()
  ];
  // begrenzen
  if (count($_SESSION['chat']) > 200) array_shift($_SESSION['chat']);
}

function generate_stoned_reply(string $user, int $level, string $tone): string {
  $level = max(0, min(100, $level));
  $base = stoned_paraphrase($user, $level, $tone);
  $add  = stoned_addons($level, $tone);

  // kleine Leitplanken (keine Tipps zu Drogen/Alkohol)
  $safety = [
    "btw: bleib' safe ✌️ – Wasser trinken, frische Luft, Rest & Respekt.",
    "kleiner reality-check: immer verantwortungsvoll bleiben.",
    "kurze Erinnerung: Gesundheit > alles. Balance ist King.",
  ];
  $guard = $level > 40 ? "  \n\n_". $safety[array_rand($safety)] . "_" : "";

  return trim($base . " " . $add . $guard);
}

function stoned_paraphrase(string $in, int $level, string $tone): string {
  $in = preg_replace('/\s+/', ' ', $in);
  $prompts = [
    'chill'=>[
      "Yo, ich hör' %s und fühl' die Vibes…",
      "Mhm, also zu %s – lass mich kurz drüber gleiten…",
      "Okayyy, %s klingt nach einem Trip durch die Gedankenwolke…",
    ],
    'goofy'=>[
      "Hahaha, %s? Brooo, das ist wie wenn ein Lama Skateboard fährt.",
      "Warte, %s – ich brauch' kurz 'nen gedanklichen Snack.",
      "Oh wow, %s – mein Hirn macht gerade kleine Saltos.",
    ],
    'wise'=>[
      "%s – spannender Gedanke. Lass uns das sanft auseinanderfalten.",
      "Zu %s: Stell dir einen ruhigen See vor, ich werf' Steine rein… Kreise, Muster, Einsichten.",
      "%s – wir gehen Schritt für Schritt, easy und klar.",
    ],
  ];
  $tpl = $prompts[$tone][array_rand($prompts[$tone])];
  $lead = sprintf($tpl, htmlspecialchars($in, ENT_QUOTES));

  // Kernaussage generieren
  $cores = [
    "Kurz gesagt: %s.",
    "Im Kern heißt das: %s.",
    "Wenn man's runterbricht: %s.",
    "Der rote Faden: %s.",
  ];
  $coreTpl = $cores[array_rand($cores)];
  $summary = summarize_light($in);

  $body = " ".sprintf($coreTpl, $summary);

  // Slur/Dehnung anwenden je nach Level
  return slur_text($lead.$body, $level);
}

function summarize_light(string $in): string {
  // extrem simple "Zusammenfassung"
  $in = trim($in);
  if ($in === '') return "du willst eine schnelle Antwort";
  $in = preg_replace('/[^a-zA-Z0-9äöüÄÖÜß .,!?-]/u', '', $in);
  $words = preg_split('/\s+/', $in);
  if (!$words) return "kurz & knapp";
  $top = array_slice($words, 0, min(10, count($words)));
  return implode(' ', $top).(count($words)>10?' …':'');
}

function stoned_addons(int $level, string $tone): string {
  $emojis = ["😮‍💨","🌿","🫠","💫","✨","😵‍💫","😌","🌙","🍃","🌀","🤙","😏"];
  $hic = $level>60 ? " *hic* " : " ";
  $tails = [
    'chill'=>[
      "lass uns das entspannt angehen".$hic.implode('', array_rand_emojis($emojis,2)),
      "kein Stress – wir kriegen das smooth hin ".implode('', array_rand_emojis($emojis,3)),
      "ich drop' dir gleich konkrete Steps ".$hic.implode('', array_rand_emojis($emojis,2)),
    ],
    'goofy'=>[
      "Plot twist: ich erklär's wie einem Kaktus im Regen ".implode('', array_rand_emojis($emojis,3)),
      "Brain sagt: joaaaa, machbar ".$hic.implode('', array_rand_emojis($emojis,2)),
      "das wird 'ne wilde Rutsche, aber funny ".implode('', array_rand_emojis($emojis,2)),
    ],
    'wise'=>[
      "wir gehen strukturiert vor – ruhig atmen, klare Punkte.",
      "ich geb dir gleich eine kleine Liste – fokus & flow.",
      "kurz, klar, freundlich: das Ziel vor Augen.",
    ],
  ];
  return $tails[$tone][array_rand($tails[$tone])];
}

function array_rand_emojis(array $arr, int $n): array {
  $n = max(1, min($n, count($arr)));
  $keys = array_rand($arr, $n);
  if (!is_array($keys)) $keys = [$keys];
  return array_map(fn($k)=>$arr[$k], $keys);
}

function slur_text(string $t, int $level): string {
  if ($level <= 0) return $t;
  // Dehnungen
  $stretch = max(0, (int)floor($level/25)); // 0..4
  $t = preg_replace_callback('/([aeiouäöüAEIOUÄÖÜ])/', function($m) use($stretch){
    return str_repeat($m[1], 1 + (mt_rand(0,100) < 25 ? $stretch : 0));
  }, $t);
  // leichte Vertipper
  if ($level >= 40) {
    $t = preg_replace('/\b(und)\b/u','un~d',$t);
    $t = preg_replace('/\b(aber)\b/u','aaber',$t);
  }
  // Pausenpunkte
  if ($level >= 60) {
    $t = preg_replace('/, /u','… ',$t);
    $t = preg_replace('/\. /u','… ',$t);
  }
  return $t;
}
?>
<!DOCTYPE html>
<html lang="de">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>Dreamcodes - <?=htmlspecialchars(APP_TITLE)?></title>
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
<link href="https://fonts.googleapis.com/css2?family=Inter:wght@300;400;600;800&display=swap" rel="stylesheet">
<script src="https://cdn.tailwindcss.com"></script>
<style>
  :root { color-scheme: dark; }
  html,body{height:100%}
  body{font-family:Inter,system-ui,Segoe UI,Roboto,Helvetica,Arial,sans-serif;background:radial-gradient(1200px 800px at 80% -10%, #1e293b 0%, #0b1020 45%, #070b16 100%); color:#e9eef7;}
  .glass{background:rgba(13,18,34,.6); border:1px solid rgba(255,255,255,.08); backdrop-filter: blur(10px)}
  .card{border-radius:20px; box-shadow:0 20px 60px rgba(0,0,0,.45)}
  .btn{transition: transform .08s ease, box-shadow .2s ease}
  .btn:hover{transform: translateY(-1px)}
  .msg{animation: fadeIn .2s ease both}
  @keyframes fadeIn{from{opacity:0; transform:translateY(4px)} to{opacity:1; transform:translateY(0)}}
  .typing-dot{width:6px;height:6px;border-radius:50%;display:inline-block;margin-right:4px;opacity:.3;animation:bounce 1s infinite;}
  .typing-dot:nth-child(2){animation-delay:.15s}
  .typing-dot:nth-child(3){animation-delay:.3s}
  @keyframes bounce{0%,80%,100%{transform:translateY(0)}40%{transform:translateY(-4px)}}
</style>
</head>
<body class="antialiased selection:bg-sky-500/30 selection:text-white">

<header class="max-w-6xl mx-auto px-4 pt-8 pb-4">
  <div class="flex items-center justify-between">
    <div>
      <h1 class="text-2xl md:text-3xl font-extrabold tracking-tight">Stoned Chat <span class="text-sky-400">Parodie</span></h1>
      <p class="text-slate-300 mt-1">AI-Persona antwortet „stoned/goofy/wise“ – humorvoll, aber freundlich & verantwortungsbewusst.</p>
    </div>
    <button id="clearBtn" class="btn px-3 py-2 rounded-xl bg-slate-800/70 hover:bg-slate-800 text-slate-200 border border-white/10">Chat leeren</button>
  </div>
</header>

<main class="max-w-6xl mx-auto px-4 grid grid-cols-1 lg:grid-cols-3 gap-6 pb-16">
  <!-- Chat -->
  <section class="lg:col-span-2 glass card p-4 md:p-6">
    <div id="chat" class="space-y-4 max-h-[65vh] overflow-y-auto pr-1">
      <!-- Nachrichten erscheinen hier -->
    </div>
    <div class="mt-4 grid grid-cols-1 md:grid-cols-[1fr_auto] gap-3">
      <div class="flex items-center gap-3 glass rounded-2xl px-3 py-2">
        <input id="message" class="flex-1 bg-transparent outline-none placeholder:text-slate-400 text-[15px]" placeholder="Frag mich was… z. B. „Erklär mir Quantenkaffee“">
        <button id="sendBtn" class="btn px-4 py-2 rounded-xl bg-sky-500 text-slate-900 font-bold">Senden</button>
      </div>
      <div class="flex items-center gap-3">
        <label class="text-sm text-slate-300">„Stoned“-Level</label>
        <input id="level" type="range" min="0" max="100" value="60" class="w-32">
        <select id="tone" class="bg-slate-800/70 border border-white/10 rounded-xl px-3 py-2 text-sm">
          <option value="chill">Chill</option>
          <option value="goofy">Goofy</option>
          <option value="wise">Wise</option>
        </select>
      </div>
    </div>
    <p class="text-xs text-slate-500 mt-2">Parodie-Persona; keine Beratung zu Substanzen. Bitte verantwortungsvoll bleiben.</p>
  </section>

  <!-- Info/Persona -->
  <aside class="glass card p-4 md:p-6 space-y-4">
    <h2 class="text-lg font-bold">Persona-Einstellungen</h2>
    <ul class="text-sm text-slate-300 list-disc pl-5 space-y-1">
      <li><b>Chill:</b> locker, smooth, freundlich</li>
      <li><b>Goofy:</b> albern, bildhaft, überspitzt</li>
      <li><b>Wise:</b> ruhig, strukturiert, poetisch</li>
    </ul>
    <div class="rounded-xl bg-slate-900/40 border border-white/10 p-3 text-sm text-slate-300">
      <b>Pro-Tipp:</b> Höheres Level ⇒ gedehnte Vokale, „…“-Pausen, kleine *hic*s.  
    </div>
    <div class="text-xs text-slate-400"><?=BRAND_FOOTER?></div>
  </aside>
</main>

<footer class="max-w-6xl mx-auto text-center text-slate-400 pb-10 text-xs">
  Parodie-Projekt. Kein Echtzeit-LLM, Antworten werden lokal generiert.
</footer>

<script>
const chatEl = document.getElementById('chat');
const msgEl  = document.getElementById('message');
const sendEl = document.getElementById('sendBtn');
const clearEl= document.getElementById('clearBtn');
const lvlEl  = document.getElementById('level');
const toneEl = document.getElementById('tone');

function el(tag, cls, html){ const n=document.createElement(tag); if(cls) n.className=cls; if(html!==undefined) n.innerHTML=html; return n; }
function scrollChat(){ chatEl.scrollTop = chatEl.scrollHeight; }

function renderMessage(role, text, ts){
  const wrap = el('div','msg flex gap-3');
  const avatar = el('div','shrink-0 w-10 h-10 rounded-full bg-sky-500/20 border border-sky-500/20 flex items-center justify-center');
  avatar.innerHTML = role==='user' ? '🫵' : '🧠';
  const bubble = el('div','max-w-[80%] lg:max-w-[70%] px-4 py-3 rounded-2xl ' + (role==='user'?'bg-slate-800/70':'bg-sky-500/10 border border-sky-500/20'));
  bubble.innerHTML = `<div class="text-[13px] ${role==='user'?'text-slate-300':'text-sky-300'} mb-1">${role==='user'?'Du':'Stoned-AI'}</div>
                      <div class="text-[15px] leading-6 text-slate-100 whitespace-pre-wrap">${escapeHtml(text)}</div>`;
  wrap.appendChild(avatar); wrap.appendChild(bubble);
  chatEl.appendChild(wrap);
  scrollChat();
}

function renderTyping(){
  const wrap = el('div','msg flex gap-3','');
  wrap.id = 'typing';
  const avatar = el('div','shrink-0 w-10 h-10 rounded-full bg-sky-500/20 border border-sky-500/20 flex items-center justify-center','🧠');
  const bubble = el('div','max-w-[80%] lg:max-w-[70%] px-4 py-3 rounded-2xl bg-sky-500/10 border border-sky-500/20');
  bubble.innerHTML = `<span class="typing-dot"></span><span class="typing-dot"></span><span class="typing-dot"></span>`;
  wrap.appendChild(avatar); wrap.appendChild(bubble);
  chatEl.appendChild(wrap);
  scrollChat();
}
function removeTyping(){ const t=document.getElementById('typing'); if(t) t.remove(); }

function escapeHtml(s){ return s.replace(/[&<>"']/g, m=>({ '&':'&amp;','<':'&lt;','>':'&gt;','"':'&quot;',"'":'&#39;' }[m])); }

async function loadHistory(){
  const r = await fetch('?action=history');
  const j = await r.json();
  chatEl.innerHTML='';
  (j.history||[]).forEach(m => renderMessage(m.role, m.text, m.ts));
}

async function send(){
  const text = msgEl.value.trim();
  if (!text) return;
  renderMessage('user', text, Date.now());
  msgEl.value = '';
  renderTyping();

  try{
    const r = await fetch('?action=send', {
      method:'POST',
      headers:{'Content-Type':'application/json'},
      body: JSON.stringify({ message: text, level: parseInt(lvlEl.value||'60'), tone: toneEl.value })
    });
    const j = await r.json();
    removeTyping();
    if (j.ok){
      // kleine „Tippen“-Verzögerung
      await new Promise(res=>setTimeout(res, 250 + Math.random()*600));
      renderMessage('bot', j.reply, Date.now());
    } else {
      renderMessage('bot', 'Uff… da ist was schief gelaufen. Versuch’s nochmal 🙏', Date.now());
    }
  } catch(e){
    removeTyping();
    renderMessage('bot', 'Netzwerk-Glitch. Einmal F5, bitte 🌀', Date.now());
  }
}

sendEl.addEventListener('click', send);
msgEl.addEventListener('keydown', e=>{ if(e.key==='Enter' && !e.shiftKey){ e.preventDefault(); send(); }});
clearEl.addEventListener('click', async ()=>{
  await fetch('?action=clear'); chatEl.innerHTML=''; renderMessage('bot','Neuer Start. Was liegt an? ✨',Date.now());
});

loadHistory().then(()=>{ renderMessage('bot','Heyyy… ich bin in „Stoned“-Laune – frag mich alles, aber bleib freundlich 😌',Date.now()); });
</script>
</body>
</html>
Dreamcodes Redaktion
Dreamcodes Redaktion
Qualität als Standard. Verantwortung als Prinzip. Jede Ressource auf Dreamcodes basiert auf geprüften Best Practices und fundierter Praxiserfahrung. Unser Anspruch ist ein belastbares Fundament statt experimenteller Lösungen. Die Integration und Absicherung der Inhalte liegt in Ihrem Ermessen. Wir liefern die fachliche Basis, die Verantwortung für den produktiven Einsatz verbleibt bei Ihnen.
Vorheriges Tutorial
Nächstes Tutorial

Vielleicht einen Blick WERT?