utils::resolve_message: use perms from behind pk proxy
This commit is contained in:
parent
af9938a3c6
commit
6bd5db7208
2 changed files with 21 additions and 3 deletions
|
@ -15,7 +15,7 @@ mod support_onboard;
|
|||
pub async fn handle(
|
||||
ctx: &Context,
|
||||
event: &FullEvent,
|
||||
_framework: FrameworkContext<'_, Data, Report>,
|
||||
_: FrameworkContext<'_, Data, Report>,
|
||||
data: &Data,
|
||||
) -> Result<()> {
|
||||
match event {
|
||||
|
|
|
@ -1,3 +1,4 @@
|
|||
use crate::api::pluralkit;
|
||||
use std::str::FromStr;
|
||||
|
||||
use eyre::{eyre, Context as _, Result};
|
||||
|
@ -5,7 +6,7 @@ use log::{debug, trace};
|
|||
use once_cell::sync::Lazy;
|
||||
use poise::serenity_prelude::{
|
||||
Cache, CacheHttp, ChannelId, ChannelType, Colour, Context, CreateEmbed, CreateEmbedAuthor,
|
||||
CreateEmbedFooter, GuildChannel, Member, Message, MessageId, Permissions,
|
||||
CreateEmbedFooter, GuildChannel, Member, Message, MessageId, Permissions, UserId,
|
||||
};
|
||||
use regex::Regex;
|
||||
|
||||
|
@ -22,6 +23,14 @@ fn find_first_image(message: &Message) -> Option<String> {
|
|||
.map(|res| res.url.clone())
|
||||
}
|
||||
|
||||
async fn find_real_author_id(message: &Message) -> UserId {
|
||||
if let Ok(sender) = pluralkit::get_sender(message.id).await {
|
||||
sender
|
||||
} else {
|
||||
message.author.id
|
||||
}
|
||||
}
|
||||
|
||||
async fn member_can_view_channel(
|
||||
ctx: impl CacheHttp + AsRef<Cache>,
|
||||
member: &Member,
|
||||
|
@ -108,7 +117,16 @@ pub async fn from_message(ctx: &Context, msg: &Message) -> Result<Vec<CreateEmbe
|
|||
debug!("Not resolving message in DM");
|
||||
return Ok(Vec::new());
|
||||
};
|
||||
let author = guild_id.member(ctx, msg.author.id).await?;
|
||||
|
||||
// if the message was sent through pluralkit, we'll want
|
||||
// to reference the Member of the unproxied account
|
||||
let author_id = if msg.webhook_id.is_some() {
|
||||
find_real_author_id(msg).await
|
||||
} else {
|
||||
msg.author.id
|
||||
};
|
||||
|
||||
let author = guild_id.member(ctx, author_id).await?;
|
||||
|
||||
let matches = MESSAGE_PATTERN
|
||||
.captures_iter(&msg.content)
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue