diff --git a/crates/bot/src/command.rs b/crates/bot/src/command.rs index 56b8e73..dc7ed81 100644 --- a/crates/bot/src/command.rs +++ b/crates/bot/src/command.rs @@ -2,10 +2,13 @@ use std::collections::HashMap; use entities::{channel, members, messages, server}; use sea_orm::{ColumnTrait, DatabaseConnection, EntityTrait, QueryFilter, Related}; -use serenity::all::{ - Color, Command, CommandInteraction, Context, CreateCommand, CreateEmbed, CreateEmbedFooter, - CreateInteractionResponse, CreateInteractionResponseMessage, Embed, EmbedMessageBuilding, - InteractionContext, Message, MessageBuilder, MessageId, ResolvedOption, +use serenity::{ + all::{ + Color, Command, CommandInteraction, Context, CreateCommand, CreateEmbed, CreateEmbedFooter, + CreateInteractionResponse, CreateInteractionResponseMessage, Embed, EmbedMessageBuilding, + InteractionContext, Message, MessageBuilder, MessageId, ResolvedOption, + }, + model::guild, }; use crate::common::{self, error_msg}; @@ -27,7 +30,7 @@ impl Retrive { return error_msg(Box::new(e)); } - let server_db_id = server::Model::get_by_discord_id(guild_id, db).await; + let server_db_id = server::Model::get_by_discord_id(guild_id, "".into(), db).await; if let Err(e) = server_db_id { return error_msg(Box::new(e)); diff --git a/crates/bot/src/logger.rs b/crates/bot/src/logger.rs index e7329bb..df11246 100644 --- a/crates/bot/src/logger.rs +++ b/crates/bot/src/logger.rs @@ -15,7 +15,8 @@ pub async fn log_message( let content = content::Model::get_or_create(msg.content.clone(), db).await?; let member = - members::Model::get_or_create(msg.author.id.get().try_into()?, msg.author.name, db).await?; + members::Model::get_or_create(msg.author.id.get().try_into()?, msg.clone().author.name, db) + .await?; let server_id = msg.guild_id.unwrap().get(); let server_id_i32 = server_id.clone() as i64; @@ -28,58 +29,27 @@ pub async fn log_message( .name .clone(); - let server_db = entities::server::Entity::find() - .filter(entities::server::Column::IdDiscord.eq(server_id_i32)) - .one(db) - .await - .unwrap(); - - let server_db = match server_db { - Some(x) => x, - None => { - let activeModel = server::ActiveModel { - id: sea_orm::ActiveValue::NotSet, - name: sea_orm::ActiveValue::Set(guild_name.to_string()), - id_discord: sea_orm::ActiveValue::Set(server_id.clone() as i64), - }; - activeModel.insert(db).await.unwrap() - } - }; + let server = server::Model::get_or_create(server_id_i32, guild_name, db).await?; let channel_id = msg.channel(&ctx.http).await.unwrap().id().get() as i64; - let channel = entities::channel::Entity::find() - .filter(entities::channel::Column::IdDiscord.eq(channel_id)) - .one(db) - .await - .unwrap(); - - let channel = match channel { - Some(x) => x, - None => { - let activeModel = channel::ActiveModel { - id: sea_orm::ActiveValue::NotSet, - id_discord: sea_orm::ActiveValue::Set(channel_id as i64), - }; - activeModel.insert(db).await.unwrap() - } - }; + let channel = channel::Model::get_or_create(channel_id, db).await?; println!( "{}, {}, {}, {}, {}", msg.id.get(), member, - server.id, + server, content, - channel.id + channel ); let activeModel = messages::ActiveModel { id: sea_orm::ActiveValue::NotSet, id_discord: sea_orm::ActiveValue::Set(msg.id.get() as i64), id_sender: sea_orm::ActiveValue::Set(member), - id_server: sea_orm::ActiveValue::Set(server.id), + id_server: sea_orm::ActiveValue::Set(server), id_content: sea_orm::ActiveValue::Set(content), - id_channel: sea_orm::ActiveValue::Set(channel.id), + id_channel: sea_orm::ActiveValue::Set(channel), }; activeModel.insert(db).await; Ok(()) diff --git a/crates/entities/src/channel.rs b/crates/entities/src/channel.rs index 7309cd7..45701d5 100644 --- a/crates/entities/src/channel.rs +++ b/crates/entities/src/channel.rs @@ -10,6 +10,28 @@ pub struct Model { pub id_discord: i64, } +impl Model { + pub async fn get_or_create(id: i64, db: &DatabaseConnection) -> Result { + let channel = Entity::find() + .filter(Column::IdDiscord.eq(id)) + .one(db) + .await + .unwrap(); + + let channel = match channel { + Some(x) => x, + None => { + let activeModel = ActiveModel { + id: sea_orm::ActiveValue::NotSet, + id_discord: sea_orm::ActiveValue::Set(id as i64), + }; + activeModel.insert(db).await.unwrap() + } + }; + Ok(channel.id) + } +} + #[derive(Copy, Clone, Debug, EnumIter, DeriveRelation)] pub enum Relation { #[sea_orm(has_many = "super::messages::Entity")] diff --git a/crates/entities/src/server.rs b/crates/entities/src/server.rs index f768840..a60515f 100644 --- a/crates/entities/src/server.rs +++ b/crates/entities/src/server.rs @@ -15,6 +15,7 @@ pub struct Model { impl Model { pub async fn get_by_discord_id( id: i64, + name: String, db: &DatabaseConnection, ) -> Result, DbErr> { let server_db_id = Entity::find() @@ -30,6 +31,30 @@ impl Model { Err(e) => Err(e), } } + pub async fn get_or_create( + id: i64, + name: String, + db: &DatabaseConnection, + ) -> Result { + let server_db = Entity::find() + .filter(Column::IdDiscord.eq(id)) + .one(db) + .await + .unwrap(); + + let reply = match server_db { + Some(x) => x.id, + None => { + let activeModel = ActiveModel { + id: sea_orm::ActiveValue::NotSet, + name: sea_orm::ActiveValue::Set(name), + id_discord: sea_orm::ActiveValue::Set(id), + }; + activeModel.insert(db).await.unwrap().id + } + }; + Ok(reply) + } } #[derive(Copy, Clone, Debug, EnumIter, DeriveRelation)]