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 ResolveChannelMentions(string text, IGuild guild, ChannelMentionHandling mode) { if (mode == ChannelMentionHandling.Ignore) { return(text); } return(_channelRegex.Replace(text, new MatchEvaluator(e => { ulong id; if (ulong.TryParse(e.Groups[1].Value, NumberStyles.None, CultureInfo.InvariantCulture, out id)) { switch (mode) { case ChannelMentionHandling.Remove: return ""; case ChannelMentionHandling.Name: if (guild != null && guild.IsAttached) //It's too expensive to do a channel lookup in REST mode { IGuildChannel channel = null; channel = guild.GetChannel(id); if (channel != null) { return $"#{channel.Name}"; } else { return $"#deleted-channel"; } } break; } } 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);