query("SELECT * FROM auto_reply_rules ORDER BY id DESC"); $rules = $stmt->fetchAll(); json_response(['success' => true, 'data' => $rules]); break; case 'create': $keyword = trim((string)($_POST['keyword'] ?? '')); $matchType = $_POST['match_type'] ?? 'contain'; $replyText = trim((string)($_POST['reply_text'] ?? '')); $isActive = (int)($_POST['is_active'] ?? 1); if ($keyword === '' || $replyText === '') { json_response(['success' => false, 'message' => '关键词和回复内容不能为空']); } if (!in_array($matchType, ['contain', 'equal'], true)) { $matchType = 'contain'; } $stmt = $pdo->prepare(" INSERT INTO auto_reply_rules(keyword, match_type, reply_text, is_active, created_at, updated_at) VALUES(:kw, :mt, :rt, :act, NOW(), NOW()) "); $stmt->execute([ ':kw' => $keyword, ':mt' => $matchType, ':rt' => $replyText, ':act' => $isActive, ]); json_response(['success' => true]); break; case 'toggle': $id = (int)($_POST['id'] ?? 0); $isActive = (int)($_POST['is_active'] ?? 0); if ($id <= 0) { json_response(['success' => false, 'message' => '参数错误']); } $stmt = $pdo->prepare("UPDATE auto_reply_rules SET is_active = :act, updated_at = NOW() WHERE id = :id"); $stmt->execute([':act' => $isActive, ':id' => $id]); json_response(['success' => true]); break; case 'delete': $id = (int)($_POST['id'] ?? 0); if ($id <= 0) { json_response(['success' => false, 'message' => '参数错误']); } $stmt = $pdo->prepare("DELETE FROM auto_reply_rules WHERE id = :id"); $stmt->execute([':id' => $id]); json_response(['success' => true]); break; case 'settings_get': $autoOn = get_setting('auto_reply_enabled', '1'); json_response(['success' => true, 'auto_reply_enabled' => $autoOn === '1']); break; case 'settings_set': $autoOn = ($_POST['auto_reply_enabled'] ?? '1') === '1' ? '1' : '0'; set_setting('auto_reply_enabled', $autoOn); json_response(['success' => true]); break; case 'messages_recent': $limit = max(1, min(100, (int)($_GET['limit'] ?? 50))); $stmt = $pdo->prepare(" SELECT * FROM messages ORDER BY id DESC LIMIT :lim "); $stmt->bindValue(':lim', $limit, PDO::PARAM_INT); $stmt->execute(); $rows = $stmt->fetchAll(); json_response(['success' => true, 'data' => $rows]); break; default: json_response(['success' => false, 'message' => '未知操作']); } } catch (Throwable $e) { json_response(['success' => false, 'message' => $e->getMessage()]); }