summaryrefslogtreecommitdiff
path: root/src/handlers/event/pinboard.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src/handlers/event/pinboard.rs')
-rw-r--r--src/handlers/event/pinboard.rs31
1 files changed, 20 insertions, 11 deletions
diff --git a/src/handlers/event/pinboard.rs b/src/handlers/event/pinboard.rs
index 0c87a5b..33d2680 100644
--- a/src/handlers/event/pinboard.rs
+++ b/src/handlers/event/pinboard.rs
@@ -1,15 +1,15 @@
-use crate::settings::Settings;
-use crate::utils;
+use crate::{utils, Data};
+use color_eyre::eyre::{eyre, Context as _, Result};
use log::*;
use poise::serenity_prelude::model::prelude::*;
use poise::serenity_prelude::Context;
-pub async fn handle(ctx: &Context, pin: &ChannelPinsUpdateEvent, settings: &Settings) {
- if let Some(sources) = &settings.pinboard_sources {
+pub async fn handle(ctx: &Context, pin: &ChannelPinsUpdateEvent, data: &Data) -> Result<()> {
+ if let Some(sources) = &data.settings.pinboard_sources {
if !sources.contains(&pin.channel_id) {
- warn!("can't access source of pin!");
- return;
+ warn!("Can't access source of pin!");
+ return Ok(());
}
}
@@ -18,16 +18,23 @@ pub async fn handle(ctx: &Context, pin: &ChannelPinsUpdateEvent, settings: &Sett
.channel_id
.pins(&ctx.http)
.await
- .expect("couldn't get a list of pins!?");
+ .expect("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.
- redirect(ctx, &pin, pinner.take(), settings.pinboard_target).await;
- pin.unpin(&ctx).await.expect("couldn't unpin message");
+ redirect(ctx, &pin, pinner.take(), data.settings.pinboard_target).await?;
+ pin.unpin(&ctx).await?;
}
+
+ Ok(())
}
-async fn redirect(ctx: &Context, pin: &Message, pinner: Option<UserId>, target: ChannelId) {
+async fn redirect(
+ ctx: &Context,
+ pin: &Message,
+ pinner: Option<UserId>,
+ target: ChannelId,
+) -> Result<()> {
let pinner = pinner.map_or("*someone*".to_owned(), |u| format!("<@{u}>"));
let embed = utils::resolve_message_to_embed(ctx, pin).await;
@@ -38,7 +45,9 @@ async fn redirect(ctx: &Context, pin: &Message, pinner: Option<UserId>, target:
.set_embed(embed)
})
.await
- .expect("couldn't redirect message");
+ .wrap_err_with(|| eyre!("couldn't redirect message"))?;
+
+ Ok(())
}
/// (Desperate, best-effort) attempt to get the user that pinned the last message