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 ResolveUserMentions(string text, IMessageChannel channel, IReadOnlyCollection <IUser> mentions, UserMentionHandling mode) { if (mode == UserMentionHandling.Ignore) { return(text); } return(_userRegex.Replace(text, new MatchEvaluator(e => { ulong id; if (ulong.TryParse(e.Groups[1].Value, NumberStyles.None, CultureInfo.InvariantCulture, out id)) { IUser user = null; foreach (var mention in mentions) { if (mention.Id == id) { user = mention; break; } } if (user != null) { string name = user.Username; var guildUser = user as IGuildUser; if (e.Value[2] == '!') { if (guildUser != null && guildUser.Nickname != null) { name = guildUser.Nickname; } } switch (mode) { case UserMentionHandling.Remove: default: return ""; case UserMentionHandling.Name: return $"@{name}"; case UserMentionHandling.NameAndDiscriminator: return $"@{name}#{user.Discriminator}"; } } } 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);