feat: prevent non admin to configure server

This commit is contained in:
Max batleforc 2024-06-20 00:45:25 +02:00
parent acb9c721c6
commit 5a6fdd74fc
No known key found for this signature in database
GPG Key ID: 25D243AB4B6AC9E7
4 changed files with 74 additions and 4 deletions

View File

@ -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(

View File

@ -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<bool>) -> 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) => {

View File

@ -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<bool, CheckIfConcourEnable> {
if let Ok((enable, server_config)) =
check_if_server_enable_and_user_admin(server_id, user_id, http).await

View File

@ -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<ServerConfig>), CheckIfServerEnableError> {
let server_config = match check_if_server_enable(server_id).await {
Ok((status, config)) => {