From 24b9d67198d70fecab7b6b419c582b7c701947e8 Mon Sep 17 00:00:00 2001 From: Max batleforc Date: Sat, 8 Jun 2024 16:45:33 +0200 Subject: [PATCH] feat: commit before reinstall --- src/botv2/cmd/meme/enable.rs | 43 +++++++------------- src/domain/meme/change_auto_meme.rs | 61 +++++++++++++++++++++++++++++ 2 files changed, 76 insertions(+), 28 deletions(-) diff --git a/src/botv2/cmd/meme/enable.rs b/src/botv2/cmd/meme/enable.rs index 01a97e8..0b40413 100644 --- a/src/botv2/cmd/meme/enable.rs +++ b/src/botv2/cmd/meme/enable.rs @@ -1,5 +1,5 @@ -use crate::botv2::init::{Context,Error}; -use poise::{serenity_prelude::{CreateEmbed, CreateEmbedFooter, CreateMessage}, CreateReply}; +use crate::{botv2::init::{Context,Error}, domain::meme::change_auto_meme::change_auto_meme}; +use poise::CreateReply; use tracing::instrument; /// Enable/Disable auto answer available meme keywords @@ -9,35 +9,22 @@ use tracing::instrument; prefix_command, category = "meme" )] -pub async fn enable(ctx: Context<'_>) -> Result<(), Error> { +pub async fn enable( + ctx: Context<'_>, + #[description = "Enable or diable "] enable: Option +) -> Result<(), Error> { tracing::info!(channel = ctx.channel_id().get(), guild = ?ctx.guild_id().unwrap().get(),"Enable command called"); - let config_img = ctx.data().config_img.clone(); - let list_value: Vec<(String, String, bool)> = config_img - .keyword - .iter() - .map(|x| (x.value.clone().join(", "), String::new(), true)) - .collect(); - if list_value.is_empty() { - let builder = CreateMessage::new().content("No meme keyword found"); - if let Err(why) = ctx.channel_id().send_message(ctx.http(), builder).await { - tracing::error!("Error sending message: {:?}", why); - } - return Ok(()); - } - let embed_vec = list_value.chunks(25).map(|chunks| { - let footer = CreateEmbedFooter::new("WeeboBot"); - CreateEmbed::new() - .title("Meme List") - .fields(chunks.to_vec()) - .footer(footer) - }); + let guild = match ctx.guild_id() { + Some(guild) => guild, + None => return Ok(()), + }; + let embed = change_auto_meme(enable, ctx.author().id.get(), guild.get()).await; let mut reply = CreateReply::default(); - reply.embeds = embed_vec.collect(); + if let Ok(embed) = embed { + reply.embeds = embed; + } if let Err(why) = ctx.send(reply).await { tracing::error!("Error sending message: {:?}", why); } - Ok(()) -} - -// https://github.com/serenity-rs/poise/blob/current/examples/fluent_localization/main.rs \ No newline at end of file +} \ No newline at end of file diff --git a/src/domain/meme/change_auto_meme.rs b/src/domain/meme/change_auto_meme.rs index f2d6a2f..bbe835f 100644 --- a/src/domain/meme/change_auto_meme.rs +++ b/src/domain/meme/change_auto_meme.rs @@ -1,3 +1,7 @@ +use poise::serenity_prelude::{model::colour, CreateEmbed, CreateEmbedFooter}; +use tracing::instrument; + +use crate::db::user_image::User; pub enum MemeChangeAutoMemeError { UserNotFound, @@ -5,4 +9,61 @@ pub enum MemeChangeAutoMemeError { UserUpdateError, UserFindError, UnknownError(String), +} + +#[instrument(level = "info")] +pub async fn change_auto_meme( + enable: Option, + user_id: u64, + guild_id: u64, +) -> Result, MemeChangeAutoMemeError> { + let footer = CreateEmbedFooter::new("WeeboBot"); + let mut embed = CreateEmbed::new() + .title("Enable/Disable auto meme answer") + .footer(footer); + let mut user_in_db: User = + match User::find_by_server_id_user_id(&guild_id, &user_id).await { + Ok(Some(user_in_db)) => user_in_db.clone(), + Ok(None) => { + let user_in_db = User::new(guild_id, user_id, false).unwrap(); + match user_in_db.create().await { + Ok(_) => user_in_db, + Err(e) => { + let embed = embed + .field("Could't create user in db", e.to_string(), false) + .color(colour::Color::RED); + return Ok(vec![embed]); + } + } + } + Err(e) => { + let embed = embed + .field("Error finding user image", e.to_string(), false) + .color(colour::Color::RED); + return Ok(vec![embed]); + } + }; + + if let Some(new_status) = enable { + if user_in_db.enable == new_status { + let embed = embed.field( + format!("Auto answer the same : {}", new_status), + String::new(), + false, + ); + return Ok(vec![embed]); + } + user_in_db.enable = new_status; + match user_in_db.update().await { + Ok(_) => { + embed = embed.field("Auto answer", new_status.to_string(), false); + } + Err(e) => { + embed = embed.field("Couldn't update user in db", e.to_string(), false); + } + } + } else { + embed = embed.field("Auto answer", user_in_db.enable.to_string(), false); + } + return Ok(vec![embed]); } \ No newline at end of file