From 51cba44c58296c9616e6dad107d081b965a87ce6 Mon Sep 17 00:00:00 2001 From: max Date: Sun, 11 Feb 2024 00:25:36 +0000 Subject: [PATCH] feat: Mise en place de la commande ou on/off l'auto answer --- src/bot/cmd/meme/enable.rs | 91 ++++++++++++++++++++++++++++++++++++-- src/bot/handler.rs | 2 +- src/db/user_image.rs | 19 +++++++- 3 files changed, 105 insertions(+), 7 deletions(-) diff --git a/src/bot/cmd/meme/enable.rs b/src/bot/cmd/meme/enable.rs index 7957dd6..138ee02 100644 --- a/src/bot/cmd/meme/enable.rs +++ b/src/bot/cmd/meme/enable.rs @@ -1,14 +1,97 @@ use serenity::{ all::Message, client::Context, - framework::standard::{macros::command, CommandResult}, + framework::standard::{macros::command, Args, CommandResult}, }; +use crate::db::user_image::UserImage; + #[command] #[description = "Enable/Disable the auto meme answer"] -pub async fn enable(ctx: &Context, msg: &Message) -> CommandResult { - if let Err(why) = msg.channel_id.say(&ctx.http, "Pong from framework!").await { - println!("Error sending message: {:?}", why) +pub async fn enable(ctx: &Context, msg: &Message, mut args: Args) -> CommandResult { + let guild = match msg.guild_id { + Some(guild) => guild, + None => return Ok(()), + }; + let mut user_in_db: UserImage = + match UserImage::find_by_server_id_user_id(&guild.get(), &msg.author.id.get()).await { + Ok(Some(user_in_db)) => user_in_db.clone(), + Ok(None) => { + let user_in_db = UserImage::new(guild.get(), msg.author.id.get(), false).unwrap(); + match user_in_db.create().await { + Ok(_) => user_in_db, + Err(e) => { + if let Err(why) = msg + .channel_id + .say(&ctx.http, "Couldn't create user in db") + .await + { + println!("Error sending message: {:?}", why) + } + println!("Error saving user image: {:?}", e); + return Ok(()); + } + } + } + Err(e) => { + if let Err(why) = msg + .channel_id + .say(&ctx.http, "Error finding user image") + .await + { + println!("Error sending message: {:?}", why) + } + println!("Error finding user image: {:?}", e); + return Ok(()); + } + }; + if let Ok(new_status) = args.single::() { + if user_in_db.enable == new_status { + if let Err(why) = msg + .channel_id + .say(&ctx.http, format!("Auto answer the same : {}", new_status)) + .await + { + println!("Error sending message: {:?}", why) + } + return Ok(()); + } + user_in_db.enable = new_status; + match user_in_db.update().await { + Ok(_) => { + if let Err(why) = msg + .channel_id + .say(&ctx.http, format!("Auto answer : {}", new_status)) + .await + { + println!("Error sending message: {:?}", why) + } + } + Err(e) => { + if let Err(why) = msg + .channel_id + .say(&ctx.http, "Couldn't update user in db") + .await + { + println!("Error sending message: {:?}", why) + } + println!("Error saving user image: {:?}", e); + return Ok(()); + } + } + return Ok(()); + } else { + if let Err(why) = msg + .channel_id + .say( + &ctx.http, + format!("Auto answer enabled : {}", user_in_db.enable), + ) + .await + { + println!("Error sending message: {:?}", why) + } } + Ok(()) } diff --git a/src/bot/handler.rs b/src/bot/handler.rs index 2280f69..054599c 100644 --- a/src/bot/handler.rs +++ b/src/bot/handler.rs @@ -38,7 +38,7 @@ impl EventHandler for Handler { Ok(None) => { let user_in_db = UserImage::new(guild.get(), msg.author.id.get(), false).unwrap(); - match user_in_db.save().await { + match user_in_db.create().await { Ok(_) => user_in_db, Err(e) => { println!("Error saving user image: {:?}", e); diff --git a/src/db/user_image.rs b/src/db/user_image.rs index 8f4ab30..a1ae440 100644 --- a/src/db/user_image.rs +++ b/src/db/user_image.rs @@ -21,7 +21,7 @@ impl UserImage { }) } - pub async fn save(&self) -> Result<(), surrealdb::Error> { + pub async fn create(&self) -> Result<(), surrealdb::Error> { match DB.create(Resource::from(USERIMAGE)).content(&self).await { Ok(_) => {} Err(e) => { @@ -31,6 +31,22 @@ impl UserImage { Ok(()) } + pub async fn update(&self) -> Result<(), surrealdb::Error> { + let sql = format!( + "UPDATE {} SET enable = {} WHERE server_id = {} AND user_id = {}", + USERIMAGE, self.enable, self.server_id, self.user_id + ); + match DB.query(sql).await { + Ok(res) => { + println!("{:?}", res); + } + Err(e) => { + return Err(e); + } + }; + Ok(()) + } + pub async fn find_by_server_id_user_id( server_id: &u64, user_id: &u64, @@ -45,7 +61,6 @@ impl UserImage { return Err(e); } }; - println!("{:?}", results); let user_image: UserImage = match results.take(0) { Ok(Some(user_image)) => user_image, Ok(None) => {