From a4acdd3a702834286f8bf174705c99c27a865c4a Mon Sep 17 00:00:00 2001 From: David Gomes <10091092+davidgomesdev@users.noreply.github.com> Date: Tue, 30 Dec 2025 20:20:21 +0000 Subject: [PATCH] feat: ignore features on locked threads --- src/agenda_cultural/api.rs | 10 +++------- src/discord/api.rs | 2 +- src/main.rs | 18 ++++++++++++++---- 3 files changed, 18 insertions(+), 12 deletions(-) diff --git a/src/agenda_cultural/api.rs b/src/agenda_cultural/api.rs index 2172d6f..aec2df7 100644 --- a/src/agenda_cultural/api.rs +++ b/src/agenda_cultural/api.rs @@ -9,10 +9,10 @@ use reqwest_middleware::{ClientBuilder, ClientWithMiddleware}; use reqwest_retry::policies::ExponentialBackoff; use reqwest_retry::RetryTransientMiddleware; use scraper::{Html, Selector}; +use std::cmp::Ordering; use std::collections::BTreeMap; use std::ops::Add; use std::time::Duration; -use std::{cmp::Ordering}; use tracing::{debug, info, instrument, trace, warn}; use voca_rs::strip::strip_tags; @@ -127,10 +127,7 @@ impl AgendaCulturalAPI { while min_date.cmp(&max_date) != Ordering::Greater { events_by_date.insert(min_date, Vec::from([])); trace!("Going for {:?}", min_date); - min_date = min_date - .add(TimeDelta::days(31)) - .with_day(1) - .unwrap(); + min_date = min_date.add(TimeDelta::days(31)).with_day(1).unwrap(); } } } @@ -231,8 +228,7 @@ impl AgendaCulturalAPI { .map_err(APIError::InvalidResponse) .await?; - serde_json::from_str::>(&json_response) - .map_err(APIError::ParseError) + serde_json::from_str::>(&json_response).map_err(APIError::ParseError) } async fn get_full_description(link: &str) -> Option { diff --git a/src/discord/api.rs b/src/discord/api.rs index 5845c91..b2e1d1f 100644 --- a/src/discord/api.rs +++ b/src/discord/api.rs @@ -163,7 +163,7 @@ impl DiscordAPI { .await { Ok(_) => { - debug!("Successfully added '{}' reaction", emoji.name); + trace!("Successfully added '{}' reaction", emoji.name); } Err(err) => { error!( diff --git a/src/main.rs b/src/main.rs index 7d41c56..bd4d1cc 100644 --- a/src/main.rs +++ b/src/main.rs @@ -6,10 +6,10 @@ use alertaemcena::config::model::{Config, DebugConfig, EmojiConfig}; use alertaemcena::discord::api::{DiscordAPI, EventsThread}; use alertaemcena::tracing::setup_loki; use lazy_static::lazy_static; -use serenity::all::{ChannelId, GuildChannel}; +use serenity::all::{ChannelId, GuildChannel, MessageType}; use std::collections::BTreeMap; use std::process::exit; -use tracing::{debug, error, info, instrument, warn}; +use tracing::{debug, error, info, instrument, trace, warn}; lazy_static! { pub static ref SAVE_FOR_LATER_EMOJI: char = '🔖'; @@ -74,8 +74,8 @@ async fn run(config: &Config, discord: &DiscordAPI, category: Category, channel_ return; } - let events = AgendaCulturalAPI::get_events_by_month(&category, config.debug_config.event_limit) - .await; + let events = + AgendaCulturalAPI::get_events_by_month(&category, config.debug_config.event_limit).await; if events.is_err() { let err = events.unwrap_err(); @@ -112,6 +112,11 @@ async fn handle_reaction_features( vote_emojis: &[EmojiConfig; 5], ) { for thread in threads { + if thread.thread_metadata.expect("Should be a thread!").locked { + trace!("Ignoring locked thread (probably out-of-date)"); + continue; + } + let messages = discord .get_all_messages(thread.id) .await @@ -132,6 +137,11 @@ async fn handle_reaction_features( continue; } + if message.kind != MessageType::Regular { + trace!("Ignoring non-regular message (id={})", message.id); + continue; + } + if message.embeds.is_empty() { warn!( "Found message without embed (id={}; content={})",