diff --git a/Cargo.lock b/Cargo.lock index 63b2257..3c5d57d 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -2389,7 +2389,7 @@ dependencies = [ [[package]] name = "reminder_web" -version = "0.1.4" +version = "0.1.5" dependencies = [ "base64 0.13.1", "chrono", diff --git a/src/hooks.rs b/src/hooks.rs index 5e1c2e8..b3c42a4 100644 --- a/src/hooks.rs +++ b/src/hooks.rs @@ -59,51 +59,54 @@ async fn macro_check(ctx: Context<'_>) -> bool { async fn check_self_permissions(ctx: Context<'_>) -> bool { let user_id = ctx.serenity_context().cache.current_user().id; - // DM permissions are always fine - if ctx.guild_id().is_none() { - return true; - } + match ctx.guild().map(|g| g.to_owned()) { + Some(guild) => { + let manage_webhooks = guild + .member(&ctx, user_id) + .await + .map_or(false, |m| m.permissions(&ctx).map_or(false, |p| p.manage_webhooks())); - let (view_channel, send_messages, embed_links, manage_webhooks) = ctx - .channel_id() - .to_channel(&ctx) - .await - .ok() - .and_then(|c| { - if let Channel::Guild(channel) = c { - let perms = channel.permissions_for_user(&ctx, user_id).ok()?; + let (view_channel, send_messages, embed_links) = ctx + .channel_id() + .to_channel(&ctx) + .await + .ok() + .and_then(|c| { + if let Channel::Guild(channel) = c { + let perms = channel.permissions_for_user(&ctx, user_id).ok()?; - Some(( - perms.view_channel(), - perms.send_messages(), - perms.embed_links(), - perms.manage_webhooks(), - )) + Some((perms.view_channel(), perms.send_messages(), perms.embed_links())) + } else { + None + } + }) + .unwrap_or((false, false, false)); + + if manage_webhooks && send_messages && embed_links { + true } else { - None - } - }) - .unwrap_or((false, false, false, false)); - - if view_channel && manage_webhooks && send_messages && embed_links { - true - } else { - let _ = ctx - .send(CreateReply::default().content(format!( - "Please ensure the bot has the correct permissions: + let _ = ctx + .send(CreateReply::default().content(format!( + "Please ensure the bot has the correct permissions: {} **View Channel** {} **Send Message** {} **Embed Links** {} **Manage Webhooks**", - if view_channel { "✅" } else { "❌" }, - if send_messages { "✅" } else { "❌" }, - if embed_links { "✅" } else { "❌" }, - if manage_webhooks { "✅" } else { "❌" }, - ))) - .await; + if view_channel { "✅" } else { "❌" }, + if send_messages { "✅" } else { "❌" }, + if embed_links { "✅" } else { "❌" }, + if manage_webhooks { "✅" } else { "❌" }, + ))) + .await; - false + false + } + } + + None => { + return true; + } } } diff --git a/web/Cargo.toml b/web/Cargo.toml index 6725cc2..204b65f 100644 --- a/web/Cargo.toml +++ b/web/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "reminder_web" -version = "0.1.4" +version = "0.1.5" authors = ["jellywx "] edition = "2018" diff --git a/web/src/routes/dashboard/mod.rs b/web/src/routes/dashboard/mod.rs index e9c1055..ba3f26c 100644 --- a/web/src/routes/dashboard/mod.rs +++ b/web/src/routes/dashboard/mod.rs @@ -673,7 +673,7 @@ async fn create_database_channel( pub enum DashboardPage { #[response(status = 200)] Ok(NamedFile), - #[response(status = 200)] + #[response(status = 302)] Unauthorised(Redirect), #[response(status = 500)] NotConfigured(Template),