private string Resolve(string text, UserMentionHandling userHandling, ChannelMentionHandling channelHandling, RoleMentionHandling roleHandling, EveryoneMentionHandling everyoneHandling) { text = MentionUtils.ResolveUserMentions(text, Channel, MentionedUsers, userHandling); text = MentionUtils.ResolveChannelMentions(text, (Channel as IGuildChannel)?.Guild, channelHandling); text = MentionUtils.ResolveRoleMentions(text, MentionedRoles, roleHandling); text = MentionUtils.ResolveEveryoneMentions(text, everyoneHandling); return(text); }
internal static string ResolveRoleMentions(string text, IReadOnlyCollection <IRole> mentions, RoleMentionHandling mode) { if (mode == RoleMentionHandling.Ignore) { return(text); } return(_roleRegex.Replace(text, new MatchEvaluator(e => { ulong id; if (ulong.TryParse(e.Groups[1].Value, NumberStyles.None, CultureInfo.InvariantCulture, out id)) { switch (mode) { case RoleMentionHandling.Remove: return ""; case RoleMentionHandling.Name: IRole role = null; foreach (var mention in mentions) { if (mention.Id == id) { role = mention; break; } } if (role != null) { return $"@{role.Name}"; } else { return $"@deleted-role"; } } } return e.Value; }))); }
public string Resolve(UserMentionHandling userHandling, ChannelMentionHandling channelHandling, RoleMentionHandling roleHandling, EveryoneMentionHandling everyoneHandling) => Resolve(Content, userHandling, channelHandling, roleHandling, everyoneHandling);
public string Resolve(int startIndex, int length, UserMentionHandling userHandling, ChannelMentionHandling channelHandling, RoleMentionHandling roleHandling, EveryoneMentionHandling everyoneHandling) => Resolve(Content.Substring(startIndex, length), userHandling, channelHandling, roleHandling, everyoneHandling);