View file api/bot.php

File size: 3.21Kb
<?php
session_start();
require '../db.php';

// Игнорировать прерывание пользователем, чтобы скрипт продолжался даже если клиент отключился (опционально, но полезно)
ignore_user_abort(true);
set_time_limit(30);

if (!isset($_SESSION['user_id'])) exit;

$userId = $_SESSION['user_id'];
$lang = $_SESSION['lang'] ?? 'en';
session_write_close(); // Освободить блокировку

try {
    // 1. Получить ID бота
    $stmt = $pdo->prepare("SELECT id FROM users WHERE username = 'ChatBot' LIMIT 1");
    $stmt->execute();
    $bot = $stmt->fetch();

    $roomId = isset($_POST['room_id']) ? intval($_POST['room_id']) : 1;

    if ($bot && $userId != $bot['id']) {
        $botId = $bot['id'];

        // 2. Установить статус набора текста ботом
        $stmt = $pdo->prepare("UPDATE users SET last_typing = NOW(), last_seen = NOW() WHERE id = ?");
        $stmt->execute([$botId]);

        // 3. Ждать
        sleep(2);

        // 4. Локализованные ответы
        $responses = [
            'en' => [
                "That's very interesting!",
                "I see...",
                "Tell me more about it.",
                "I'm just a bot, but I'm listening.",
                "Can you elaborate?",
                "Wow, really?",
                "Keep going!",
                "I'm processing that information..."
            ],
            'uk' => [
                "Це дуже цікаво!",
                "Я розумію...",
                "Розкажіть більше про це.",
                "Я просто бот, але я слухаю.",
                "Можете уточнити?",
                "Ого, справді?",
                "Продовжуйте!",
                "Я обробляю цю інформацію..."
            ],
            'ru' => [
                "Это очень интересно!",
                "Я понимаю...",
                "Расскажите подробнее.",
                "Я просто бот, но я слушаю.",
                "Можете уточнить?",
                "Ого, правда?",
                "Продолжайте!",
                "Я обрабатываю эту информацию..."
            ]
        ];

        // Откат на английский, если язык не найден
        $pool = isset($responses[$lang]) ? $responses[$lang] : $responses['en'];
        $reply = $pool[array_rand($pool)];

        $stmt = $pdo->prepare("INSERT INTO messages (user_id, type, content, room_id) VALUES (?, 'text', ?, ?)");
        $stmt->execute([$botId, $reply, $roomId]);

        // 5. Очистить статус набора текста сразу после отправки
        $stmt = $pdo->prepare("UPDATE users SET last_typing = NULL WHERE id = ?");
        $stmt->execute([$botId]);
    }
} catch (PDOException $e) {
    file_put_contents('../bot_debug.log', date('Y-m-d H:i:s') . " Error: " . $e->getMessage() . "\n", FILE_APPEND);
}