Finish refactoring

This commit is contained in:
2025-08-10 21:15:53 -03:00
parent f123282699
commit a004fe2308
50 changed files with 2639 additions and 587 deletions
+95
View File
@@ -0,0 +1,95 @@
use std::sync::Arc;
use async_trait::async_trait;
use twilight_model::gateway::payload::incoming::{GuildCreate, GuildDelete, GuildUpdate};
use crate::{
database::models::Server,
framework::{
events::traits::{
EventResult, OnServerCreateHandler, OnServerDeleteHandler, OnServerUpdateHandler,
},
runtime::Runtime,
},
state::State,
};
#[derive(Debug)]
pub struct ServerCreateHandler;
#[async_trait]
impl OnServerCreateHandler<State> for ServerCreateHandler {
async fn on_server_create(&self, event: &GuildCreate, rt: Arc<Runtime<State>>) -> EventResult {
let server = match event {
GuildCreate::Available(guild) => Server::from(guild.clone()),
GuildCreate::Unavailable(_) => {
// If the guild is unavailable, Discord will later send this event again when the guild
// becomes available.
return Ok(());
}
};
log::debug!("The server \"{}\" was created", server.name);
server.insert(&rt.state.db).await.inspect_err(|e| {
log::error!(
"Could not insert the recently joined server into the DB!\n\n{server:?}\n\n{e:?}\n"
)
})?;
// TODO: Send hello message to the server's default channel on server join.
Ok(())
}
}
#[derive(Debug)]
pub struct ServerUpdateHandler;
#[async_trait]
impl OnServerUpdateHandler<State> for ServerUpdateHandler {
async fn on_server_update(&self, event: &GuildUpdate, rt: Arc<Runtime<State>>) -> EventResult {
let mut server = match Server::get_by_id(event.0.id.get(), &rt.state.db)
.await
.inspect_err(|e| {
log::error!("Could not get server from DB when it was updated! {e:?}")
})? {
Some(server) => server,
None => {
log::debug!("Server was updated but it was not in DB");
return Ok(());
}
};
if server.name != event.name {
server.name = event.name.clone();
server
.upsert(&rt.state.db)
.await
.inspect_err(|e| log::error!("Could not update server's name. {e:?}"))?;
}
Ok(())
}
}
#[derive(Debug)]
pub struct ServerDeleteHandler;
#[async_trait]
impl OnServerDeleteHandler<State> for ServerDeleteHandler {
async fn on_server_delete(&self, event: &GuildDelete, rt: Arc<Runtime<State>>) -> EventResult {
Server::delete_by_id(event.id.get(), &rt.state.db)
.await
.inspect(|_| log::debug!("Deleted server with ID {} because Payphone left", event.id))
.inspect_err(|e| {
log::error!(
"Could not delete server with ID {} from DB when Payphone left! {e:?}",
event.id
)
})?;
Ok(())
}
}
+1
View File
@@ -0,0 +1 @@
pub mod events;