Skip to content

Commit 20eda51

Browse files
committed
ephemeral response on permission error, hide "hide body" when body is hidden
1 parent 1c5ba1a commit 20eda51

2 files changed

Lines changed: 34 additions & 10 deletions

File tree

src/commands/mod.rs

Lines changed: 17 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,8 +8,9 @@ pub(crate) const ERROR_COLOUR: Colour = Colour(0xe74c3c);
88
use crate::{Context, Error};
99

1010
use poise::serenity_prelude::{
11-
self as serenity, Colour, ComponentInteractionCollector, CreateActionRow, CreateButton,
12-
CreateEmbed, CreateEmbedFooter, CreateInteractionResponse, CreateInteractionResponseMessage,
11+
self as serenity, Colour, ComponentInteraction, ComponentInteractionCollector, CreateActionRow,
12+
CreateButton, CreateEmbed, CreateEmbedFooter, CreateInteractionResponse,
13+
CreateInteractionResponseMessage,
1314
};
1415
use poise::CreateReply;
1516

@@ -49,6 +50,20 @@ pub async fn respond_err(ctx: &Context<'_>, title: &str, content: &str) {
4950
respond_embed(ctx, embed, false).await;
5051
}
5152

53+
pub async fn interaction_err(ctx: &serenity::Context, press: &ComponentInteraction, content: &str) {
54+
let builder = CreateInteractionResponse::Message(
55+
CreateInteractionResponseMessage::new()
56+
.embed(
57+
CreateEmbed::new()
58+
.title("Unable to execute interaction")
59+
.description(content)
60+
.colour(ERROR_COLOUR),
61+
)
62+
.ephemeral(true),
63+
);
64+
let _ = press.create_response(ctx, builder).await;
65+
}
66+
5267
pub async fn paginate_lists<U, E>(
5368
ctx: poise::Context<'_, U, E>,
5469
pages: &[Vec<(String, String, bool)>],

src/events/issue.rs

Lines changed: 17 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,12 @@
11
use std::time::Duration;
22

3-
use crate::{structures::Embeddable, Data};
3+
use crate::{structures::Embeddable, Data, commands::interaction_err};
44
use ::serenity::builder::CreateEmbedAuthor;
55
use octocrab::models::issues::Issue;
66
use octocrab::models::pulls::PullRequest;
77
use poise::serenity_prelude::{
8-
self as serenity, Colour, Context, CreateEmbed, Message, Permissions,
8+
self as serenity, ButtonStyle, Colour, Context, CreateActionRow, CreateButton, CreateEmbed,
9+
CreateInteractionResponse, Message, Permissions,
910
};
1011
use regex::Regex;
1112

@@ -23,11 +24,15 @@ pub async fn message(data: &Data, ctx: &Context, message: &Message) {
2324
let ctx_id = message.id.get(); // poise context isn't available here.
2425
let remove_id = format!("{}remove", ctx_id);
2526
let hide_body_id = format!("{}hide_body", ctx_id);
27+
let remove = CreateActionRow::Buttons(vec![CreateButton::new(&remove_id)
28+
.label("delete")
29+
.style(ButtonStyle::Danger)]);
30+
2631
let components = serenity::CreateActionRow::Buttons(vec![
27-
serenity::CreateButton::new(&remove_id)
32+
CreateButton::new(&remove_id)
2833
.label("delete")
29-
.style(serenity::ButtonStyle::Danger),
30-
serenity::CreateButton::new(&hide_body_id).label("hide body"),
34+
.style(ButtonStyle::Danger),
35+
CreateButton::new(&hide_body_id).label("hide body"),
3136
]);
3237

3338
let content: serenity::CreateMessage = serenity::CreateMessage::default()
@@ -56,12 +61,14 @@ pub async fn message(data: &Data, ctx: &Context, message: &Message) {
5661
&& (press.user.id == message.author.id || has_perms)
5762
{
5863
let _ = press
59-
.create_response(ctx, serenity::CreateInteractionResponse::Acknowledge)
64+
.create_response(ctx, CreateInteractionResponse::Acknowledge)
6065
.await;
6166
if let Ok(ref msg) = msg_result {
6267
let _ = msg.delete(ctx).await;
6368
}
6469
msg_deleted = true;
70+
} else {
71+
interaction_err(ctx, &press, "Unable to use interaction because you are missing `MANAGE_MESSAGES`.").await;
6572
}
6673

6774
if press.data.custom_id == hide_body_id
@@ -82,12 +89,15 @@ pub async fn message(data: &Data, ctx: &Context, message: &Message) {
8289
ctx,
8390
serenity::CreateInteractionResponse::UpdateMessage(
8491
serenity::CreateInteractionResponseMessage::new()
85-
.embeds(hid_body_embeds),
92+
.embeds(hid_body_embeds)
93+
.components(vec![remove.clone()]),
8694
),
8795
)
8896
.await;
8997
}
9098
body_hid = true;
99+
} else {
100+
interaction_err(ctx, &press, "Unable to use interaction because you are missing `MANAGE_MESSAGES`.").await;
91101
}
92102
}
93103
// Triggers on timeout.
@@ -98,7 +108,6 @@ pub async fn message(data: &Data, ctx: &Context, message: &Message) {
98108
.await;
99109
}
100110
}
101-
//
102111
}
103112
}
104113

0 commit comments

Comments
 (0)