diff options
Diffstat (limited to 'src/events/error.rs')
| -rw-r--r-- | src/events/error.rs | 54 |
1 files changed, 54 insertions, 0 deletions
diff --git a/src/events/error.rs b/src/events/error.rs new file mode 100644 index 0000000..d98bb5c --- /dev/null +++ b/src/events/error.rs @@ -0,0 +1,54 @@ +use crate::{ + client::{Data, Error}, + consts::Colors, +}; + +use log::error; +use poise::serenity_prelude::{CreateEmbed, Timestamp}; +use poise::{CreateReply, FrameworkError}; + +pub async fn handle(error: poise::FrameworkError<'_, Data, Error>) { + match error { + FrameworkError::Setup { + error, framework, .. + } => { + error!("Error setting up client! Bailing out"); + framework.shard_manager().shutdown_all().await; + + panic!("{error}") + } + + FrameworkError::Command { error, ctx, .. } => { + error!("Error in command {}:\n{error}", ctx.command().name); + + 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 { + error, + ctx: _, + event, + framework: _, + .. + } => { + error!( + "Error while handling event {}:\n{error}", + event.snake_case_name() + ); + } + + error => { + if let Err(e) = poise::builtins::on_error(error).await { + error!("Unhandled error occurred:\n{e:#?}"); + } + } + } +} |
