<?php
/* به نام خدا 
اوپن شده در :
@jahanbots
@jahanbots

با اسکی رفتن بدون منبع ناموس خود را به ما بسپارید !
*/
$active = json_decode(file_get_contents("Settings/data.json"),true)['is_active'];
$info = [
    // اطلاعات مربوط به دیتابیس
    'db_username' => 'kingtype_rr', // یوزر نیم دیتابیس
    'db_password' => '$5rl7)o8m4h$', // پسورد دیتابیس
    'db_name' => 'kingtype_rr', // اسم دیتابیس
    'db_address' => 'localhost', // آدرس دیتابیس
    'table_name' => 'antiflood', // اسم دلخواه خود برای جدول مربوط به آنتی فلود را وارد کنید، این جدول به صورت اتوماتیک ایجاد میشود
    
    // سایر اطلاعات
    'update' => $update, // متغیر مربوط به آپدیت تلگرام رو جایگذاری کنید
    'user_id' => $from_id, // متغیر مربوط به آیدی کاربر رو جایگذاری کنید
    
    'count' => 5, // تعداد پیام مورد نظر
    'time' => 10, // بازه زمانی مورد نظر - به ثانیه
    'ban' => 20, // مدت زمانی که کاربر محروم میشود - به ثانیه
    'is_active' => $active, // اگر آنتی فلود روشن است مقدار ترو و اگر خاموش است مقدار فالس بدید
    
    /*
         در کل اگر کاربر بیشتر از
    count
         پیام در بازه زمانی
    time
        ثانیه ارسال کند، به مدت
    ban
       ثانیه محروم میشود
       اگر به جای این چهار متغیر در پنل خود متغیر خاصی دارید، اسم متغیر مربوط به هرکدام را جایگذاری کنید
    */
    ];


$flooddb = new PDO('mysql:host='.$info['db_address'].';dbname='.$info['db_name'], $info['db_username'], $info['db_password']);

$info['update'] = json_decode(json_encode($info['update'])?:file_get_contents('php://input'), true);
$user_id = ($info['update']['message']['from']['id']?:$info['update']['callback_query']['from']['id'])?:$info['user_id'];

unset($info['db_address'], $info['db_name'], $info['db_username'], $info['db_password']);

$sql = "CREATE TABLE IF NOT EXISTS `{$info['table_name']}` (
            user_id bigint(12) PRIMARY KEY,
            detail text(2000),
            ban_until bigint(12)
        )";
$flooddb->exec($sql);

$sql = "SELECT * FROM `{$info['table_name']}` WHERE `user_id`={$user_id}";
$sql = $flooddb->prepare($sql);
$sql->execute();
$userinfo = $sql->fetch();

if($userinfo == false){
    $userinfo=[
        'user_id'=> $user_id,
        'detail'=> '[]',
        'ban_until'=> 0
        ];
    $sql = "INSERT INTO `{$info['table_name']}` (`user_id`, `detail`, `ban_until`) VALUES(:user_id, :detail, :ban_until)";
    $sql = $flooddb->prepare($sql);
    $sql->execute(['user_id'=>$userinfo['user_id'], 'detail'=>$userinfo['detail'], 'ban_until'=>$userinfo['ban_until']]);
}

$detail = json_decode($userinfo['detail'], true);

if($info['is_active'] && ($info['update']['message']['date']?:1e15)>time()-60 && isset($user_id)){
    
    if($userinfo['ban_until']>time())
        exit;
    
    if($detail == false){
        for($i=0; $i<$info['count']; $i++)
            $detail[$i]=$info['time']*$i;
    }
    
    for($i=0; $i<$info['count']-1; $i++)
        $detail[$i]=$detail[$i+1];
    
    $detail[$i]=time();
    
    if(($detail[$info['count']-1]-$detail[0])<$info['time']-1){
        $userinfo['ban_until']=time()+$info['ban'];
        $sql = "UPDATE `{$info['table_name']}` SET `detail`=?, `ban_until`=? WHERE `user_id`={$user_id}";
        $flooddb->prepare($sql)->execute([json_encode($detail), $userinfo['ban_until']]);
     // اینجا میتونید عملیات مورد نظر خودتون در واکنش به فلود کاربر انجام بدید. مثل ارسال پیام به کاربر و گفتن اینکه فلود کرده و بن شده
        SendMessage($from_id,"🗼 20 ثانیه به دلیل اسپم محدود شدید!","HTML",$message_id,null);
        
        
        
        
        
        exit;
    }
    
    $sql = "SELECT * FROM `{$info['table_name']}`";
    $sql = $flooddb->prepare($sql);
    $sql->execute();
    $usersinfo = $sql->fetchall();
    foreach($usersinfo as $user){
        if(json_decode($user['detail'], true)[$info['count']-1]<time()-$info['ban'] && $user['user_id'] != $user_id){
            $sql = "DELETE FROM `{$info['table_name']}` WHERE `user_id`={$user['user_id']}";
            $flooddb->exec($sql);
        }
    }
    
    $sql = "UPDATE `{$info['table_name']}` SET `detail`=?, `ban_until`=? WHERE `user_id`={$user_id}";
    $flooddb->prepare($sql)->execute([json_encode($detail), $userinfo['ban_until']]);
}

unset($info, $flooddb, $userinfo, $userid, $sql, $detail, $usersinfo); 
/* به نام خدا 
اوپن شده در :
@jahanbots
@jahanbots

با اسکی رفتن بدون منبع ناموس خود را به ما بسپارید !
*/
