feat: commit before reinstall

This commit is contained in:
Max batleforc 2024-06-08 16:45:33 +02:00
parent 8af7c67a00
commit 24b9d67198
No known key found for this signature in database
GPG Key ID: 25D243AB4B6AC9E7
2 changed files with 76 additions and 28 deletions

View File

@ -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<bool>
) -> 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
}

View File

@ -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<bool>,
user_id: u64,
guild_id: u64,
) -> Result<Vec<CreateEmbed>, 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]);
}