Properly block pinging normally unmentionable roles
This commit is contained in:
parent
fd0e46f40d
commit
5d3e159f54
@ -66,7 +66,7 @@ namespace PluralKit.Bot
|
|||||||
var dwb = new DiscordWebhookBuilder();
|
var dwb = new DiscordWebhookBuilder();
|
||||||
dwb.WithUsername(FixClyde(name).Truncate(80));
|
dwb.WithUsername(FixClyde(name).Truncate(80));
|
||||||
dwb.WithContent(content);
|
dwb.WithContent(content);
|
||||||
dwb.AddMentions(content.ParseAllMentions(allowEveryone));
|
dwb.AddMentions(content.ParseAllMentions(allowEveryone, channel.Guild));
|
||||||
if (avatarUrl != null) dwb.WithAvatarUrl(avatarUrl);
|
if (avatarUrl != null) dwb.WithAvatarUrl(avatarUrl);
|
||||||
|
|
||||||
var attachmentChunks = ChunkAttachmentsOrThrow(attachments, 8 * 1024 * 1024);
|
var attachmentChunks = ChunkAttachmentsOrThrow(attachments, 8 * 1024 * 1024);
|
||||||
|
@ -183,13 +183,20 @@ namespace PluralKit.Bot
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static IEnumerable<IMention> ParseAllMentions(this string input, bool allowEveryone = false)
|
public static IEnumerable<IMention> ParseAllMentions(this string input, bool allowEveryone = false, DiscordGuild guild = null)
|
||||||
{
|
{
|
||||||
var mentions = new List<IMention>();
|
var mentions = new List<IMention>();
|
||||||
mentions.AddRange(USER_MENTION.Matches(input)
|
mentions.AddRange(USER_MENTION.Matches(input)
|
||||||
.Select(x => new UserMention(ulong.Parse(x.Groups[1].Value)) as IMention));
|
.Select(x => new UserMention(ulong.Parse(x.Groups[1].Value)) as IMention));
|
||||||
|
|
||||||
|
// Only allow role mentions through where the role is actually listed as *mentionable*
|
||||||
|
// (ie. any user can @ them, regardless of permissions)
|
||||||
|
// Still let the allowEveryone flag override this though (privileged users can @ *any* role)
|
||||||
|
// Original fix by Gwen
|
||||||
mentions.AddRange(ROLE_MENTION.Matches(input)
|
mentions.AddRange(ROLE_MENTION.Matches(input)
|
||||||
.Select(x => new RoleMention(ulong.Parse(x.Groups[1].Value)) as IMention));
|
.Select(x => ulong.Parse(x.Groups[1].Value))
|
||||||
|
.Where(x => allowEveryone || guild != null && guild.GetRole(x).IsMentionable)
|
||||||
|
.Select(x => new RoleMention(x) as IMention));
|
||||||
if (EVERYONE_HERE_MENTION.IsMatch(input) && allowEveryone)
|
if (EVERYONE_HERE_MENTION.IsMatch(input) && allowEveryone)
|
||||||
mentions.Add(new EveryoneMention());
|
mentions.Add(new EveryoneMention());
|
||||||
return mentions;
|
return mentions;
|
||||||
|
Loading…
Reference in New Issue
Block a user