From 9ba3991d920acdab153217cf9345ab8ef63500d7 Mon Sep 17 00:00:00 2001 From: Leonard Excoffier <48970393+excoffierleonard@users.noreply.github.com> Date: Thu, 19 Feb 2026 19:56:54 -0500 Subject: [PATCH] feat: implement auto-response throttling to limit execution frequency --- src/auto_response/handler.rs | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/src/auto_response/handler.rs b/src/auto_response/handler.rs index 2c15fe9..5d8bbc1 100644 --- a/src/auto_response/handler.rs +++ b/src/auto_response/handler.rs @@ -2,6 +2,7 @@ use log::{debug, info}; use poise::serenity_prelude::{Context, CreateMessage, Message as SerenityMessage}; +use rand::random; use crate::error::Result; @@ -10,6 +11,10 @@ use super::{ rules::{AutoResponsePayload, AutoResponseRule}, }; +fn should_send_auto_response() -> bool { + random::().is_multiple_of(6) +} + /// Handle auto-responses for pre-configured match rules. /// /// Returns `true` if an auto-response was sent, `false` otherwise. @@ -34,6 +39,16 @@ pub async fn handle_auto_response( return Ok(false); }; + if !should_send_auto_response() { + debug!( + "Auto response throttle: skipped rule '{}' for {} in channel {}", + action.rule_name, + new_message.author.tag(), + new_message.channel_id + ); + return Ok(false); + } + let AutoResponsePayload::ImageUrl(content) = action.payload; let message = CreateMessage::new()