From afe3dbc5257ffc0a9ad09a70c80e676990450f06 Mon Sep 17 00:00:00 2001 From: jude Date: Tue, 25 Aug 2020 17:19:08 +0100 Subject: [PATCH] blacklist stuff --- src/commands/moderation_cmds.rs | 7 ++++--- src/framework.rs | 26 ++++++++++++++++++-------- src/models.rs | 3 ++- 3 files changed, 24 insertions(+), 12 deletions(-) diff --git a/src/commands/moderation_cmds.rs b/src/commands/moderation_cmds.rs index c5ed4c1..f110821 100644 --- a/src/commands/moderation_cmds.rs +++ b/src/commands/moderation_cmds.rs @@ -18,20 +18,21 @@ use crate::{ #[command] #[supports_dm(false)] #[permission_level(Restricted)] +#[can_blacklist(false)] async fn blacklist(ctx: &Context, msg: &Message, args: String) -> CommandResult { let pool = ctx.data.read().await .get::().cloned().expect("Could not get SQLPool from data"); - let mut channel = ChannelData::from_id(msg.channel(&ctx).await.unwrap(), pool.clone()).await.unwrap(); + let mut channel = ChannelData::from_channel(msg.channel(&ctx).await.unwrap(), pool.clone()).await.unwrap(); channel.blacklisted = !channel.blacklisted; channel.commit_changes(pool).await; if channel.blacklisted { - + let _ = msg.channel_id.say(&ctx, "Blacklisted").await; } else { - + let _ = msg.channel_id.say(&ctx, "Unblacklisted").await; } Ok(()) diff --git a/src/framework.rs b/src/framework.rs index abef295..712ca05 100644 --- a/src/framework.rs +++ b/src/framework.rs @@ -34,7 +34,10 @@ use std::{ fmt, }; -use crate::SQLPool; +use crate::{ + models::ChannelData, + SQLPool, +}; type CommandFn = for<'fut> fn(&'fut Context, &'fut Message, String) -> BoxFuture<'fut, CommandResult>; @@ -311,14 +314,21 @@ impl Framework for RegexFramework { match check_self_permissions(&ctx, &guild, &channel).await { Ok(perms) => match perms { PermissionCheck::All => { - let command = self.commands.get(full_match.name("cmd").unwrap().as_str()).unwrap(); - let args = full_match.name("args") - .map(|m| m.as_str()) - .unwrap_or("") - .to_string(); + let pool = ctx.data.read().await + .get::().cloned().expect("Could not get SQLPool from data"); - if command.check_permissions(&ctx, &guild, &member).await { - (command.func)(&ctx, &msg, args).await.unwrap(); + let command = self.commands.get(full_match.name("cmd").unwrap().as_str()).unwrap(); + let channel_data = ChannelData::from_channel(msg.channel(&ctx).await.unwrap(), pool).await; + + if !command.can_blacklist || channel_data.map(|c| c.blacklisted).unwrap_or(false) { + let args = full_match.name("args") + .map(|m| m.as_str()) + .unwrap_or("") + .to_string(); + + if command.check_permissions(&ctx, &guild, &member).await { + (command.func)(&ctx, &msg, args).await.unwrap(); + } } } diff --git a/src/models.rs b/src/models.rs index c84dec3..1251feb 100644 --- a/src/models.rs +++ b/src/models.rs @@ -1,4 +1,5 @@ use serenity::model::{ + id::ChannelId, guild::Guild, channel::Channel }; @@ -58,7 +59,7 @@ SELECT id, guild, name, prefix FROM guilds WHERE guild = ? } impl ChannelData { - pub async fn from_id(channel: Channel, pool: MySqlPool) -> Result> { + pub async fn from_channel(channel: Channel, pool: MySqlPool) -> Result> { let channel_id = channel.id().as_u64().clone(); if let Ok(c) = sqlx::query_as_unchecked!(Self,