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(
|
pub async fn handle(
|
||||||
ctx: &Context,
|
ctx: &Context,
|
||||||
event: &FullEvent,
|
event: &FullEvent,
|
||||||
_framework: FrameworkContext<'_, Data, Report>,
|
_: FrameworkContext<'_, Data, Report>,
|
||||||
data: &Data,
|
data: &Data,
|
||||||
) -> Result<()> {
|
) -> Result<()> {
|
||||||
match event {
|
match event {
|
||||||
|
|
|
@ -1,3 +1,4 @@
|
||||||
|
use crate::api::pluralkit;
|
||||||
use std::str::FromStr;
|
use std::str::FromStr;
|
||||||
|
|
||||||
use eyre::{eyre, Context as _, Result};
|
use eyre::{eyre, Context as _, Result};
|
||||||
|
@ -5,7 +6,7 @@ use log::{debug, trace};
|
||||||
use once_cell::sync::Lazy;
|
use once_cell::sync::Lazy;
|
||||||
use poise::serenity_prelude::{
|
use poise::serenity_prelude::{
|
||||||
Cache, CacheHttp, ChannelId, ChannelType, Colour, Context, CreateEmbed, CreateEmbedAuthor,
|
Cache, CacheHttp, ChannelId, ChannelType, Colour, Context, CreateEmbed, CreateEmbedAuthor,
|
||||||
CreateEmbedFooter, GuildChannel, Member, Message, MessageId, Permissions,
|
CreateEmbedFooter, GuildChannel, Member, Message, MessageId, Permissions, UserId,
|
||||||
};
|
};
|
||||||
use regex::Regex;
|
use regex::Regex;
|
||||||
|
|
||||||
|
@ -22,6 +23,14 @@ fn find_first_image(message: &Message) -> Option<String> {
|
||||||
.map(|res| res.url.clone())
|
.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(
|
async fn member_can_view_channel(
|
||||||
ctx: impl CacheHttp + AsRef<Cache>,
|
ctx: impl CacheHttp + AsRef<Cache>,
|
||||||
member: &Member,
|
member: &Member,
|
||||||
|
@ -108,7 +117,16 @@ pub async fn from_message(ctx: &Context, msg: &Message) -> Result<Vec<CreateEmbe
|
||||||
debug!("Not resolving message in DM");
|
debug!("Not resolving message in DM");
|
||||||
return Ok(Vec::new());
|
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
|
let matches = MESSAGE_PATTERN
|
||||||
.captures_iter(&msg.content)
|
.captures_iter(&msg.content)
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue