diff options
| author | seth <[email protected]> | 2023-12-05 05:17:49 -0500 |
|---|---|---|
| committer | seth <[email protected]> | 2023-12-15 16:41:13 -0500 |
| commit | 815cb0df3b3e3f9dd2078b00f85754da87b1d55e (patch) | |
| tree | 85099483f8ebb0586bc097b65f6c5a2b5997150e /src/handlers/event/reactboard.rs | |
| parent | 0ca61ddff6ec7404f0aeabc1c8c785bbc8db7fd5 (diff) | |
refactor: centralize storage handlers
Diffstat (limited to 'src/handlers/event/reactboard.rs')
| -rw-r--r-- | src/handlers/event/reactboard.rs | 57 |
1 files changed, 13 insertions, 44 deletions
diff --git a/src/handlers/event/reactboard.rs b/src/handlers/event/reactboard.rs index 2435976..53b51a7 100644 --- a/src/handlers/event/reactboard.rs +++ b/src/handlers/event/reactboard.rs @@ -1,26 +1,9 @@ -use crate::{utils, Data, Settings}; +use crate::{storage, utils, Data}; +use storage::{ReactBoardEntry, REACT_BOARD_KEY}; use color_eyre::eyre::{eyre, Context as _, Result}; use log::*; -use poise::serenity_prelude::{ChannelId, Context, Message, MessageId, MessageReaction, Reaction}; -use redis::AsyncCommands as _; -use redis_macros::{FromRedisValue, ToRedisArgs}; -use serde::{Deserialize, Serialize}; - -#[derive(Clone, Debug, Serialize, Deserialize, FromRedisValue, ToRedisArgs)] -struct ReactBoardEntry { - original_id: MessageId, - reaction_count: u64, - channel_id: ChannelId, - message_id: MessageId, -} - -#[derive(Default, Serialize, Deserialize, FromRedisValue, ToRedisArgs)] -struct ReactBoardInfo { - reactions: Vec<ReactBoardEntry>, -} - -const REACT_BOARD_KEY: &str = "reactboard-v1"; +use poise::serenity_prelude::{Context, Message, MessageReaction, Reaction}; pub async fn handle(ctx: &Context, reaction: &Reaction, data: &Data) -> Result<()> { let msg = reaction @@ -52,8 +35,9 @@ async fn send_to_reactboard( msg: &Message, data: &Data, ) -> Result<()> { + let storage = &data.storage; let gid = msg.guild_id.unwrap_or_default(); - let settings = Settings::from_redis(&data.redis, &gid).await?; + let settings = storage.get_guild_settings(&gid).await?; // make sure everything is in order... let target = if let Some(target) = settings.reactboard_channel { @@ -76,22 +60,7 @@ async fn send_to_reactboard( return Ok(()); } - let mut con = data.redis.get_async_connection().await?; - let req = con.get(REACT_BOARD_KEY).await; - - let mut reactboard: ReactBoardInfo = if let Err(why) = req { - // set the value to the default if the key is uninitialized - match why.kind() { - redis::ErrorKind::TypeError => { - warn!("Initializing {REACT_BOARD_KEY} key in Redis..."); - con.set(REACT_BOARD_KEY, ReactBoardInfo::default()).await?; - con.get(REACT_BOARD_KEY).await? - } - _ => return Err(why.into()), - } - } else { - req? - }; + let mut reactboard = storage.get_reactboard_info().await?; // try to find previous reactboard entry by the id of the original message let old_index = reactboard @@ -107,11 +76,11 @@ async fn send_to_reactboard( // bail if we don't need to edit anything if old_entry.reaction_count >= reaction.count { - info!("Message {} doesn't need updating", msg.id); + debug!("Message {} doesn't need updating", msg.id); return Ok(()); } - info!( + debug!( "Bumping {} reaction count from {} to {}", msg.id, old_entry.reaction_count, reaction.count ); @@ -138,11 +107,11 @@ async fn send_to_reactboard( reactboard.reactions.remove(old_index); reactboard.reactions.push(new_entry.clone()); - info!( - "Updating ReactBoard entry {} in {REACT_BOARD_KEY}\nOld:\n{old_entry:#?}\nNew:\n{new_entry:#?}", + debug!( + "Updating ReactBoard entry {}\nOld entry:\n{old_entry:#?}\n\nNew:\n{new_entry:#?}\n", msg.id ); - con.set(REACT_BOARD_KEY, reactboard).await?; + storage.create_reactboard_info_key(reactboard).await?; // make new message and add entry to redis otherwise } else { let embed = utils::resolve_message_to_embed(ctx, msg).await; @@ -164,11 +133,11 @@ async fn send_to_reactboard( reactboard.reactions.push(entry.clone()); - info!( + debug!( "Creating new ReactBoard entry {} in {REACT_BOARD_KEY}:\n{:#?}", msg.id, entry ); - con.set(REACT_BOARD_KEY, reactboard).await?; + storage.create_reactboard_info_key(reactboard).await?; } Ok(()) |
