diff options
| author | seth <[email protected]> | 2023-12-06 03:57:33 -0500 |
|---|---|---|
| committer | seth <[email protected]> | 2023-12-15 16:41:13 -0500 |
| commit | 904259063831738d357a8092bee7c0e30988b0f6 (patch) | |
| tree | 9290284e1ec3f639167e03b862ab776c74eddfc6 /src/handlers | |
| parent | 14c417db576bc45e768143832750e6ed47d2d776 (diff) | |
refactor: use reactboard-v2
yay! we don't need to fetch every single reaction from
every guild whenever a new one is triggered
Diffstat (limited to 'src/handlers')
| -rw-r--r-- | src/handlers/error.rs | 4 | ||||
| -rw-r--r-- | src/handlers/event/guild.rs | 14 | ||||
| -rw-r--r-- | src/handlers/event/mod.rs | 11 | ||||
| -rw-r--r-- | src/handlers/event/pinboard.rs | 6 | ||||
| -rw-r--r-- | src/handlers/event/reactboard.rs | 45 |
5 files changed, 24 insertions, 56 deletions
diff --git a/src/handlers/error.rs b/src/handlers/error.rs index c6cefa2..bddd4f4 100644 --- a/src/handlers/error.rs +++ b/src/handlers/error.rs @@ -18,7 +18,7 @@ pub async fn handle(error: poise::FrameworkError<'_, Data, Report>) { } FrameworkError::Command { error, ctx } => { - error!("Error in command {}:\n{error:?}", ctx.command().name); + error!("Error in command {}:\n{error}", ctx.command().name); ctx.send(|c| { c.embed(|e| { e.title("Something went wrong!") @@ -37,7 +37,7 @@ pub async fn handle(error: poise::FrameworkError<'_, Data, Report>) { event, framework: _, } => { - error!("Error while handling event {}:\n{error:?}", event.name()); + error!("Error while handling event {}:\n{error}", event.name()); } error => { diff --git a/src/handlers/event/guild.rs b/src/handlers/event/guild.rs index 3473276..4583688 100644 --- a/src/handlers/event/guild.rs +++ b/src/handlers/event/guild.rs @@ -3,14 +3,12 @@ use log::*; use poise::serenity_prelude::{Guild, UnavailableGuild}; use crate::{storage, Data}; -use storage::settings::Settings; -use storage::Storage; +use storage::Settings; pub async fn handle_create(guild: &Guild, _is_new: &bool, data: &Data) -> Result<()> { let storage = &data.storage; - let key = Storage::format_settings_key(guild.id); - if storage.key_exists(&key).await? { + if storage.guild_settings_exist(&guild.id).await? { debug!("Not recreating settings key for {}", guild.id); return Ok(()); } @@ -21,14 +19,14 @@ pub async fn handle_create(guild: &Guild, _is_new: &bool, data: &Data) -> Result ..Default::default() }; - warn!("Creating new settings key {key}:\n{settings:#?}"); - storage.create_settings_key(settings).await?; + warn!("Creating new settings key for {}:\n{settings:#?}", guild.id); + storage.create_guild_settings(settings).await?; Ok(()) } pub async fn handle_delete(guild: &UnavailableGuild, data: &Data) -> Result<()> { - let key = Storage::format_settings_key(guild.id); - data.storage.delete_key(&key).await?; + data.storage.delete_guild_settings(&guild.id).await?; + Ok(()) } diff --git a/src/handlers/event/mod.rs b/src/handlers/event/mod.rs index 6b1fc9b..5abbfb4 100644 --- a/src/handlers/event/mod.rs +++ b/src/handlers/event/mod.rs @@ -1,4 +1,3 @@ -use crate::storage::{ReactBoardInfo, REACT_BOARD_KEY}; use crate::Data; use color_eyre::eyre::{Report, Result}; @@ -20,16 +19,6 @@ pub async fn handle( match event { Event::Ready { data_about_bot } => { info!("Logged in as {}!", data_about_bot.user.name); - - // make sure react board is setup - let storage = &data.storage; - if !storage.key_exists(REACT_BOARD_KEY).await? { - warn!("Creating new ReactBoardInfo key {REACT_BOARD_KEY}"); - - storage - .create_reactboard_info_key(ReactBoardInfo::default()) - .await?; - } } Event::Message { new_message } => { diff --git a/src/handlers/event/pinboard.rs b/src/handlers/event/pinboard.rs index 7a13b88..4a1dad7 100644 --- a/src/handlers/event/pinboard.rs +++ b/src/handlers/event/pinboard.rs @@ -1,6 +1,6 @@ use crate::{utils, Data}; -use color_eyre::eyre::{eyre, Context as _, Result}; +use color_eyre::eyre::{Context as _, Result}; use log::*; use poise::serenity_prelude::model::prelude::*; use poise::serenity_prelude::Context; @@ -37,7 +37,7 @@ pub async fn handle(ctx: &Context, pin: &ChannelPinsUpdateEvent, data: &Data) -> .channel_id .pins(&ctx.http) .await - .expect("Couldn't get a list of pins!?"); + .wrap_err_with(|| "Couldn't get a list of pins!?")?; for pin in pins { // We call `take` because it's supposed to be just for the latest message. @@ -64,7 +64,7 @@ async fn redirect( .set_embed(embed) }) .await - .wrap_err_with(|| eyre!("couldn't redirect message"))?; + .wrap_err_with(|| "Couldn't redirect message")?; Ok(()) } diff --git a/src/handlers/event/reactboard.rs b/src/handlers/event/reactboard.rs index fa546c0..7550c6a 100644 --- a/src/handlers/event/reactboard.rs +++ b/src/handlers/event/reactboard.rs @@ -1,5 +1,5 @@ use crate::{storage, utils, Data}; -use storage::{ReactBoardEntry, REACT_BOARD_KEY}; +use storage::ReactBoardEntry; use color_eyre::eyre::{eyre, Context as _, Result}; use log::*; @@ -72,19 +72,11 @@ async fn send_to_reactboard( return Ok(()); } - 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 - .reactions - .iter() - .position(|r| r.original_id == msg.id); - let content = format!("{} **#{}**", reaction.reaction_type, reaction.count); // bump reaction count if previous entry exists - if let Some(old_index) = old_index { - let old_entry = reactboard.reactions[old_index].clone(); + if storage.reactboard_entry_exists(guild_id, &msg.id).await? { + let old_entry = storage.get_reactboard_entry(guild_id, &msg.id).await?; // bail if we don't need to edit anything if old_entry.reaction_count >= reaction.count { @@ -99,14 +91,14 @@ async fn send_to_reactboard( ctx.http .get_message( - *old_entry.channel_id.as_u64(), - *old_entry.message_id.as_u64(), + *old_entry.posted_channel_id.as_u64(), + *old_entry.posted_message_id.as_u64(), ) .await .wrap_err_with(|| { format!( "Couldn't get previous message from ReactBoardEntry {} in Redis DB!", - old_entry.original_id + old_entry.original_message_id ) })? .edit(ctx, |m| m.content(content)) @@ -116,14 +108,8 @@ async fn send_to_reactboard( let mut new_entry = old_entry.clone(); new_entry.reaction_count = reaction.count; - reactboard.reactions.remove(old_index); - reactboard.reactions.push(new_entry.clone()); - - debug!( - "Updating ReactBoard entry {}\nOld entry:\n{old_entry:#?}\n\nNew:\n{new_entry:#?}\n", - msg.id - ); - storage.create_reactboard_info_key(reactboard).await?; + debug!("Updating ReactBoard entry\nOld entry:\n{old_entry:#?}\n\nNew:\n{new_entry:#?}\n",); + storage.create_reactboard_entry(guild_id, new_entry).await?; // make new message and add entry to redis otherwise } else { let embed = utils::resolve_message_to_embed(ctx, msg).await; @@ -137,19 +123,14 @@ async fn send_to_reactboard( .await?; let entry = ReactBoardEntry { - original_id: msg.id, + original_message_id: msg.id, reaction_count: reaction.count, - channel_id: resp.channel_id, - message_id: resp.id, + posted_channel_id: resp.channel_id, + posted_message_id: resp.id, }; - reactboard.reactions.push(entry.clone()); - - debug!( - "Creating new ReactBoard entry {} in {REACT_BOARD_KEY}:\n{:#?}", - msg.id, entry - ); - storage.create_reactboard_info_key(reactboard).await?; + debug!("Creating new ReactBoard entry:\n{entry:#?}"); + storage.create_reactboard_entry(guild_id, entry).await?; } Ok(()) |
