use std::{error::Error, fmt::Debug, sync::Arc}; use async_trait::async_trait; use twilight_model::gateway::payload::incoming::{ GuildCreate, GuildDelete, GuildUpdate, InteractionCreate, MessageCreate, MessageDelete, MessageUpdate, Ready, }; use crate::framework::runtime::Runtime; pub type EventResult = Result<(), Box>; #[async_trait] pub trait OnReadyHandler: Send + Sync + Debug where T: Send + Sync, { async fn on_ready(&self, event: &Ready, rt: Arc>) -> EventResult; } #[async_trait] pub trait OnReconnectHandler: Send + Sync + Debug where T: Send + Sync, { async fn on_reconnect(&self, rt: Arc>) -> EventResult; } #[async_trait] pub trait OnInteractionHandler: Send + Sync + Debug where T: Send + Sync, { async fn on_interaction(&self, event: &InteractionCreate, rt: Arc>) -> EventResult; } #[async_trait] pub trait OnMessageHandler: Send + Sync + Debug where T: Send + Sync, { async fn on_message(&self, event: &MessageCreate, rt: Arc>) -> EventResult; } #[async_trait] pub trait OnMessageEditHandler: Send + Sync + Debug where T: Send + Sync, { async fn on_message_edit(&self, event: &MessageUpdate, rt: Arc>) -> EventResult; } #[async_trait] pub trait OnMessageDeleteHandler: Send + Sync + Debug where T: Send + Sync, { async fn on_message_delete(&self, event: &MessageDelete, rt: Arc>) -> EventResult; } #[async_trait] pub trait OnServerCreateHandler: Send + Sync + Debug where T: Send + Sync, { async fn on_server_create(&self, event: &GuildCreate, rt: Arc>) -> EventResult; } #[async_trait] pub trait OnServerUpdateHandler: Send + Sync + Debug where T: Send + Sync, { async fn on_server_update(&self, event: &GuildUpdate, rt: Arc>) -> EventResult; } #[async_trait] pub trait OnServerDeleteHandler: Send + Sync + Debug where T: Send + Sync, { async fn on_server_delete(&self, event: &GuildDelete, rt: Arc>) -> EventResult; }