diff options
Diffstat (limited to 'src/handlers')
| -rw-r--r-- | src/handlers/error.rs | 33 | ||||
| -rw-r--r-- | src/handlers/event/mod.rs | 20 | ||||
| -rw-r--r-- | src/handlers/event/pinboard.rs | 15 | ||||
| -rw-r--r-- | src/handlers/event/reactboard.rs | 22 |
4 files changed, 49 insertions, 41 deletions
diff --git a/src/handlers/error.rs b/src/handlers/error.rs index 034e870..4bca032 100644 --- a/src/handlers/error.rs +++ b/src/handlers/error.rs @@ -3,8 +3,8 @@ use crate::Data; use color_eyre::eyre::Report; use log::error; -use poise::serenity_prelude::Timestamp; -use poise::FrameworkError; +use poise::serenity_prelude::{CreateEmbed, Timestamp}; +use poise::{CreateReply, FrameworkError}; pub async fn handle(error: poise::FrameworkError<'_, Data, Report>) { match error { @@ -12,24 +12,23 @@ pub async fn handle(error: poise::FrameworkError<'_, Data, Report>) { error, framework, .. } => { error!("Error setting up client! Bailing out"); - framework.shard_manager().lock().await.shutdown_all().await; + framework.shard_manager().shutdown_all().await; panic!("{error}") } - FrameworkError::Command { error, ctx } => { + FrameworkError::Command { error, ctx, .. } => { error!("Error in command {}:\n{error}", ctx.command().name); - ctx.send(|c| { - c.embed(|e| { - e.title("Something went wrong!") - .description("oopsie") - .timestamp(Timestamp::now()) - .color(Colors::Orange) - }) - }) - .await - .ok(); + let embed = CreateEmbed::default() + .title("Something went wrong!") + .description("oopsie") + .timestamp(Timestamp::now()) + .color(Colors::Orange); + + let reply = CreateReply::default().embed(embed); + + ctx.send(reply).await.ok(); } FrameworkError::EventHandler { @@ -37,8 +36,12 @@ pub async fn handle(error: poise::FrameworkError<'_, Data, Report>) { ctx: _, event, framework: _, + .. } => { - error!("Error while handling event {}:\n{error}", event.name()); + error!( + "Error while handling event {}:\n{error}", + event.snake_case_name() + ); } error => { diff --git a/src/handlers/event/mod.rs b/src/handlers/event/mod.rs index 5fd3db5..50a19d5 100644 --- a/src/handlers/event/mod.rs +++ b/src/handlers/event/mod.rs @@ -3,7 +3,8 @@ use crate::Data; use color_eyre::eyre::{Report, Result}; use log::info; use poise::serenity_prelude as serenity; -use poise::{Event, FrameworkContext}; +use poise::FrameworkContext; +use serenity::FullEvent; mod guild; mod message; @@ -12,24 +13,29 @@ mod reactboard; pub async fn handle( ctx: &serenity::Context, - event: &Event<'_>, + event: &FullEvent, framework: FrameworkContext<'_, Data, Report>, data: &Data, ) -> Result<()> { match event { - Event::Ready { data_about_bot } => { + FullEvent::Ready { data_about_bot } => { info!("Logged in as {}!", data_about_bot.user.name); } - Event::Message { new_message } => { + FullEvent::Message { new_message } => { message::handle(ctx, framework, new_message, data).await?; pinboard::handle(ctx, new_message, data).await?; } - Event::ReactionAdd { add_reaction } => reactboard::handle(ctx, add_reaction, data).await?, + FullEvent::ReactionAdd { add_reaction } => { + reactboard::handle(ctx, add_reaction, data).await?; + } + + FullEvent::GuildCreate { guild, is_new } => { + guild::handle_create(guild, &is_new.unwrap_or_default(), data).await?; + } - Event::GuildCreate { guild, is_new } => guild::handle_create(guild, is_new, data).await?, - Event::GuildDelete { + FullEvent::GuildDelete { incomplete, full: _, } => guild::handle_delete(incomplete, data).await?, diff --git a/src/handlers/event/pinboard.rs b/src/handlers/event/pinboard.rs index cc67334..1db14b6 100644 --- a/src/handlers/event/pinboard.rs +++ b/src/handlers/event/pinboard.rs @@ -2,7 +2,9 @@ use crate::{utils, Data}; use color_eyre::eyre::{eyre, Context as _, Result}; use log::debug; -use poise::serenity_prelude::{ChannelId, Context, Message, MessageType, User}; +use poise::serenity_prelude::{ + ChannelId, Context, CreateAllowedMentions, CreateMessage, Message, MessageType, User, +}; pub async fn handle(ctx: &Context, message: &Message, data: &Data) -> Result<()> { if message.kind != MessageType::PinsAdd { @@ -59,13 +61,14 @@ pub async fn handle(ctx: &Context, message: &Message, data: &Data) -> Result<()> async fn redirect(ctx: &Context, pin: &Message, pinner: &User, target: ChannelId) -> Result<()> { let embed = utils::resolve_message_to_embed(ctx, pin).await; + let mentions = CreateAllowedMentions::new().empty_roles().empty_users(); + let message = CreateMessage::default() + .allowed_mentions(mentions) + .content(format!("📌'd by {pinner} in {}", pin.link())) + .embed(embed); target - .send_message(&ctx.http, |m| { - m.allowed_mentions(|am| am.empty_parse()) - .content(format!("📌'd by {pinner} in {}", pin.link())) - .set_embed(embed) - }) + .send_message(&ctx.http, message) .await .wrap_err_with(|| "Couldn't redirect message")?; diff --git a/src/handlers/event/reactboard.rs b/src/handlers/event/reactboard.rs index 7341565..17deeb0 100644 --- a/src/handlers/event/reactboard.rs +++ b/src/handlers/event/reactboard.rs @@ -3,7 +3,9 @@ use storage::ReactBoardEntry; use color_eyre::eyre::{eyre, Context as _, Result}; use log::debug; -use poise::serenity_prelude::{Context, GuildId, Message, MessageReaction, Reaction}; +use poise::serenity_prelude::{ + Context, CreateMessage, EditMessage, GuildId, Message, MessageReaction, Reaction, +}; pub async fn handle(ctx: &Context, reaction: &Reaction, data: &Data) -> Result<()> { let msg = reaction @@ -87,11 +89,10 @@ async fn send_to_reactboard( msg.id, old_entry.reaction_count, reaction.count ); + let edited = EditMessage::new().content(content); + ctx.http - .get_message( - *old_entry.posted_channel_id.as_u64(), - *old_entry.posted_message_id.as_u64(), - ) + .get_message(old_entry.posted_channel_id, old_entry.posted_message_id) .await .wrap_err_with(|| { format!( @@ -99,7 +100,7 @@ async fn send_to_reactboard( old_entry.original_message_id ) })? - .edit(ctx, |m| m.content(content)) + .edit(ctx, edited) .await?; // update reaction count in redis @@ -111,14 +112,9 @@ async fn send_to_reactboard( // make new message and add entry to redis otherwise } else { let embed = utils::resolve_message_to_embed(ctx, msg).await; + let message = CreateMessage::default().content(content).embed(embed); - let resp = target - .send_message(ctx, |m| { - m.allowed_mentions(|am| am.empty_parse()) - .content(content) - .set_embed(embed) - }) - .await?; + let resp = target.send_message(ctx, message).await?; let entry = ReactBoardEntry { original_message_id: msg.id, |
