From 5a6fdd74fcc45f024c54bdeb5481c76914df3970 Mon Sep 17 00:00:00 2001 From: Max batleforc Date: Thu, 20 Jun 2024 00:45:25 +0200 Subject: [PATCH] feat: prevent non admin to configure server --- src/botv2/cmd/server_config/feature.rs | 37 ++++++++++++++++++- src/botv2/cmd/server_config/server.rs | 37 ++++++++++++++++++- src/botv2/domain/concour/check_if_allowed.rs | 2 +- .../check_if_server_enable_and_admin.rs | 2 +- 4 files changed, 74 insertions(+), 4 deletions(-) diff --git a/src/botv2/cmd/server_config/feature.rs b/src/botv2/cmd/server_config/feature.rs index 6a594a0..963cea9 100644 --- a/src/botv2/cmd/server_config/feature.rs +++ b/src/botv2/cmd/server_config/feature.rs @@ -1,5 +1,8 @@ use crate::botv2::{ - domain::server_config::change_enable_server::change_enable_server, + domain::server_config::{ + change_enable_server::change_enable_server, + check_if_server_enable_and_admin::check_if_server_enable_and_user_admin, + }, init::{Context, Error}, }; use poise::{ @@ -27,6 +30,38 @@ pub async fn feature( }; let entity_name = ctx.data().entity_name.clone(); let footer = CreateEmbedFooter::new(entity_name.clone()); + match check_if_server_enable_and_user_admin(guild.get(), ctx.author().id.get(), ctx.http()) + .await + { + Ok((ok, _)) => { + if !ok { + let embed = CreateEmbed::new() + .title("You are not an admin") + .color(colour::Color::RED) + .footer(footer); + if let Err(why) = ctx + .send(CreateReply::default().embed(embed).ephemeral(true)) + .await + { + tracing::error!("Error sending message: {:?}", why); + } + return Ok(()); + } + } + Err(_) => { + let embed = CreateEmbed::new() + .title("You are not an admin") + .color(colour::Color::RED) + .footer(footer); + if let Err(why) = ctx + .send(CreateReply::default().embed(embed).ephemeral(true)) + .await + { + tracing::error!("Error sending message: {:?}", why); + } + return Ok(()); + } + }; let answer_auto_meme = match auto_meme { Some(enable) => match change_enable_server(guild.get(), enable).await { Ok(_) => Some( diff --git a/src/botv2/cmd/server_config/server.rs b/src/botv2/cmd/server_config/server.rs index 49db84e..2ae1514 100644 --- a/src/botv2/cmd/server_config/server.rs +++ b/src/botv2/cmd/server_config/server.rs @@ -1,6 +1,9 @@ use crate::botv2::{ cmd::server_config::{feature::feature, init_server::init}, - domain::server_config::get_server_config::get_server_config, + domain::server_config::{ + check_if_server_enable_and_admin::check_if_server_enable_and_user_admin, + get_server_config::get_server_config, + }, init::{Context, Error}, }; use poise::{ @@ -48,6 +51,38 @@ async fn server_info(ctx: Context<'_>, ephemeral: Option) -> Result<(), Er }; let entity_name = ctx.data().entity_name.clone(); let footer = CreateEmbedFooter::new(entity_name.clone()); + match check_if_server_enable_and_user_admin(guild.get(), ctx.author().id.get(), ctx.http()) + .await + { + Ok((ok, _)) => { + if !ok { + let embed = CreateEmbed::new() + .title("You are not an admin") + .color(colour::Color::RED) + .footer(footer); + if let Err(why) = ctx + .send(CreateReply::default().embed(embed).ephemeral(true)) + .await + { + tracing::error!("Error sending message: {:?}", why); + } + return Ok(()); + } + } + Err(_) => { + let embed = CreateEmbed::new() + .title("You are not an admin") + .color(colour::Color::RED) + .footer(footer); + if let Err(why) = ctx + .send(CreateReply::default().embed(embed).ephemeral(true)) + .await + { + tracing::error!("Error sending message: {:?}", why); + } + return Ok(()); + } + }; let answer = match get_server_config(guild.get()).await { Ok(config) => match config { Some(server_config) => { diff --git a/src/botv2/domain/concour/check_if_allowed.rs b/src/botv2/domain/concour/check_if_allowed.rs index c2e4d70..65ce453 100644 --- a/src/botv2/domain/concour/check_if_allowed.rs +++ b/src/botv2/domain/concour/check_if_allowed.rs @@ -41,7 +41,7 @@ pub async fn check_if_concour_allowed( pub async fn check_if_allowed( server_id: u64, user_id: u64, - http: serenity_prelude::Http, + http: &serenity_prelude::Http, ) -> Result { if let Ok((enable, server_config)) = check_if_server_enable_and_user_admin(server_id, user_id, http).await diff --git a/src/botv2/domain/server_config/check_if_server_enable_and_admin.rs b/src/botv2/domain/server_config/check_if_server_enable_and_admin.rs index 81f0d10..e774ed4 100644 --- a/src/botv2/domain/server_config/check_if_server_enable_and_admin.rs +++ b/src/botv2/domain/server_config/check_if_server_enable_and_admin.rs @@ -7,7 +7,7 @@ use tracing::instrument; pub async fn check_if_server_enable_and_user_admin( server_id: u64, user_id: u64, - http: serenity_prelude::Http, + http: &serenity_prelude::Http, ) -> Result<(bool, Option), CheckIfServerEnableError> { let server_config = match check_if_server_enable(server_id).await { Ok((status, config)) => {