" turadi — brauzerda ochib bo'lmaydi. function db_decode(string $raw): array { $p = strpos($raw, "\n"); $d = json_decode($p === false ? '' : substr($raw, $p + 1), true); $def = ['users' => [], 'channels' => [], 'pool' => [], 'logs' => [], 'stats' => ['reactions' => 0, 'runs' => 0], 'settings' => []]; $d = is_array($d) ? array_merge($def, $d) : $def; $d['settings'] = array_merge([ 'emojis' => DEFAULT_EMOJIS, 'delay_ms' => 250, 'max_per_run' => 50, 'daily_limit' => 200, 'maintenance' => false, ], is_array($d['settings']) ? $d['settings'] : []); return $d; } function db_init(): void { $dir = dirname(DB_FILE); if (!is_dir($dir)) @mkdir($dir, 0750, true); $ht = $dir . '/.htaccess'; if (!file_exists($ht)) @file_put_contents($ht, "Require all denied\n"); } function db_read(): array { db_init(); $fh = fopen(DB_FILE, 'c+'); flock($fh, LOCK_SH); $raw = stream_get_contents($fh); flock($fh, LOCK_UN); fclose($fh); return db_decode((string)$raw); } /** Bazani o'qiydi → $fn(&$db) ni chaqiradi → saqlaydi. Hammasi bitta qulf ostida. */ function db_mutate(callable $fn) { db_init(); $fh = fopen(DB_FILE, 'c+'); flock($fh, LOCK_EX); $db = db_decode((string)stream_get_contents($fh)); $ret = $fn($db); ftruncate($fh, 0); rewind($fh); fwrite($fh, "