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="http://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=>({ '&':'&','<':'<','>':'>','"':'"',"'":''' }[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>