From b643a6a235b0c1c9902b97421f24eff2b0d0a5ac Mon Sep 17 00:00:00 2001 From: seth Date: Fri, 9 Aug 2024 23:35:41 -0400 Subject: tree-wide: end of summer cleanup (#214) * api: refactor & rename module to http * client: split from main.rs * tree-wide: use eyre::Report as error * nix: alejandra -> nixfmt * nix: start using treefmt-nix * nix: simplify flake * nix: refactor derivation & docker image * nix: remove overlay * ci: update & cleanup workflows * commands: assign all commands automatically * commands/copypasta: remove * http/teawie: update response struct for upstream rust rewrite * handlers: rename modules to events; flatten * crates: rename self to teawie-bot * nix: fenix -> rust-overlay i want a specific rust version grrrrrrr * ci: pin rust to 1.79 this is what our nix dev shell uses and what we can compile on. it seems the time crate doesn't like v1.80 of the compiler :( * ci: always run release gates * nix: fix static toolchain * nix: rust-overlay -> nixpkgs * ci: adopt actions-rust-lang actions * nix: use docker arch names for containers * crates/time: 0.3.30 -> 0.3.36 fixes building on rust 1.80.0 --- src/events/error.rs | 54 +++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 54 insertions(+) create mode 100644 src/events/error.rs (limited to 'src/events/error.rs') 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:#?}"); + } + } + } +} -- cgit v1.2.3