From 725b9fe5c544c083c02fc934da2a3446a966f023 Mon Sep 17 00:00:00 2001 From: jude Date: Fri, 10 Jul 2020 12:02:46 +0100 Subject: [PATCH] self permission checkers --- src/main.rs | 40 +++++++++++++++++++++++++++++++++++++--- 1 file changed, 37 insertions(+), 3 deletions(-) diff --git a/src/main.rs b/src/main.rs index 496c3f2..5c394e1 100644 --- a/src/main.rs +++ b/src/main.rs @@ -25,7 +25,10 @@ use serenity::{ } }, model::{ - channel::Message, + channel::{ + Channel, + Message, + }, guild::Guild, id::{ GuildId, @@ -120,18 +123,49 @@ lazy_static! { #[group] #[commands(info, help, list_sounds, change_public, search_sounds, show_popular_sounds, show_random_sounds, set_greet_sound)] +#[checks(self_perm_check)] struct AllUsers; #[group] #[commands(play, upload_new_sound, change_volume, delete_sound, stop_playing)] -#[checks(role_check)] +#[checks(self_perm_check, role_check)] struct RoleManagedUsers; #[group] #[commands(change_prefix, set_allowed_roles, allow_greet_sounds)] -#[checks(permission_check)] +#[checks(self_perm_check, permission_check)] struct PermissionManagedUsers; +#[check] +#[name("self_perm_check")] +async fn self_perm_check(ctx: &Context, msg: &Message, _args: &mut Args) -> CheckResult { + let channel_o = msg.channel(&ctx).await; + + if let Some(channel_e) = channel_o { + if let Channel::Guild(channel) = channel_e { + let permissions_r = channel.permissions_for_user(&ctx, &ctx.cache.current_user_id().await).await; + + if let Ok(permissions) = permissions_r { + if permissions.send_messages() && permissions.embed_links() { + CheckResult::Success + } + else { + CheckResult::Failure(Reason::Log("Bot does not have enough permissions".to_string())) + } + } + else { + CheckResult::Failure(Reason::Log("No perms found".to_string())) + } + } + else { + CheckResult::Failure(Reason::Log("No DM commands".to_string())) + } + } + else { + CheckResult::Failure(Reason::Log("Channel not available".to_string())) + } +} + #[check] #[name("role_check")] async fn role_check(ctx: &Context, msg: &Message, _args: &mut Args) -> CheckResult {