Новый AntiSpam для Vii Engine 3.0 написан и оптимизирован на PHP 8+

Новый AntiSpam для Vii Engine 3.0 написан и оптимизирован на PHP 8+

В платной версии движка сделана поддержка кеша и авто очистки.

function AntiSpam(string $act, ?string $text = null): bool {

    global $db, $user_info, $server_time;

    if (empty($user_info['user_id'])) {
        return false;
    }

    // Маппинг действий
    $actions = [
        'friends'   => ['id' => 1, 'limit' => 40],
        'messages'  => ['id' => 2, 'limit' => 40],
        'wall'      => ['id' => 3, 'limit' => 500],
        'identical' => ['id' => 4, 'limit' => 100],
        'comments'  => ['id' => 5, 'limit' => 2000],
        'groups'    => ['id' => 6, 'limit' => 5],
    ];

    if (!isset($actions[$act])) {
        return false;
    }

    $actId = $actions[$act]['id'];
    $limit = $actions[$act]['limit'];

    // Дата
    $antiDate = strtotime(date('Y-m-d', $server_time));

    // Хеш текста
    $txtSql = '';
    if ($act === 'identical' && $text !== null) {
        $textHash = md5($text);
        $textHash = $db->safesql($textHash);
        $txtSql = " AND txt = '{$textHash}'";
    }

    $userId = (int)$user_info['user_id'];

    $check = $db->super_query("
        SELECT COUNT(*) AS cnt 
        FROM `" . PREFIX . "_antispam`
        WHERE act = '{$actId}' 
        AND user_id = '{$userId}' 
        AND date = '{$antiDate}'
        {$txtSql}
    ");

    if (($check['cnt'] ?? 0) >= $limit) {
        return false; // вместо die
    }

    return true;
}
function AntiSpamLogInsert(string $act, ?string $text = null): void {

    global $db, $user_info, $server_time;

    if (empty($user_info['user_id'])) {
        return;
    }

    $actions = [
        'friends'   => 1,
        'messages'  => 2,
        'wall'      => 3,
        'identical' => 4,
        'comments'  => 5,
        'groups'    => 6,
    ];

    if (!isset($actions[$act])) {
        return;
    }

    $actId = $actions[$act];
    $antiDate = strtotime(date('Y-m-d', $server_time));
    $userId = (int)$user_info['user_id'];

    $txtField = '';

    if ($act === 'identical' && $text !== null) {
        $textHash = md5($text);
        $textHash = $db->safesql($textHash);
        $txtField = ", txt = '{$textHash}'";
    }

    $db->query("
        INSERT INTO `" . PREFIX . "_antispam`
        SET act = '{$actId}', 
            user_id = '{$userId}', 
            date = '{$antiDate}'
            {$txtField}
    ");
}

👉 Логика полностью сохранена.
👉 Просто теперь функция возвращает false, а не убивает весь сайт.


💪 Что вы получили

  • Совместимость с PHP 8

  • Нет TypeError

  • Нет null ошибок

  • Код стал в 3 раза чище

  • Лимиты легко менять

  • Без ломки движка Vii Engine




Обсуждение новости
Guests, оставишь комментарий?
Имя:*
E-Mail:


Подписаться на комментарии
Статистика
1 посетитель на сайте. Из них:
Гости1
Список пользователей
Test Был(a) в сети 5 часов назад
Комментарии
Информация
Актуальная версия Vii Engine 3.0
Реклама