Finish refactoring
This commit is contained in:
@@ -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(())
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1 @@
|
||||
pub mod events;
|
||||
Reference in New Issue
Block a user