maxbot 0.1.3

Автоматизация работы с чат-ботами MAX
Documentation
use std::sync::{Mutex, OnceLock};
use std::time::{Duration, Instant};
use crate::config::get_global_max_rps;

static LAST_REQUEST_TIME: OnceLock<Mutex<Instant>> = OnceLock::new();

fn get_last_request_time() -> &'static Mutex<Instant> {
    LAST_REQUEST_TIME.get_or_init(|| Mutex::new(Instant::now()))
}

/// Приостанавливает выполнение, если превышен лимит RPS.
pub async fn enforce_global_rate_limit() {
    let max_rps = get_global_max_rps();
    if max_rps == 0 {
        return;
    }
    let min_interval = Duration::from_millis(1000 / max_rps as u64);
    let last = get_last_request_time();
    let mut last_guard = last.lock().unwrap();
    let now = Instant::now();
    let elapsed = now - *last_guard;
    if elapsed < min_interval {
        tokio::time::sleep(min_interval - elapsed).await;
    }
    *last_guard = Instant::now();
}