internal static string ResolveEmoji(ITag tag, TagHandling mode) { if (mode != TagHandling.Remove) { Emote emoji = (Emote)tag.Value; //Remove if its name contains any bad chars (prevents a few tag exploits) for (int i = 0; i < emoji.Name.Length; i++) { char c = emoji.Name[i]; if (!char.IsLetterOrDigit(c) && c != '_' && c != '-') { return(""); } } switch (mode) { case TagHandling.Name: case TagHandling.FullName: return($":{emoji.Name}:"); case TagHandling.NameNoPrefix: case TagHandling.FullNameNoPrefix: return($"{emoji.Name}"); case TagHandling.Sanitize: return($"<{emoji.Id}{SanitizeChar}:{SanitizeChar}{emoji.Name}>"); } } return(""); }
internal static string ResolveRoleMention(ITag tag, TagHandling mode) { if (mode != TagHandling.Remove) { var role = tag.Value as IRole; switch (mode) { case TagHandling.Name: case TagHandling.FullName: if (role != null) { return($"@{role.Name}"); } else { return($""); } case TagHandling.NameNoPrefix: case TagHandling.FullNameNoPrefix: if (role != null) { return($"{role.Name}"); } else { return($""); } case TagHandling.Sanitize: return(MentionRole($"{SanitizeChar}{tag.Key}")); } } return(""); }
internal static string ResolveChannelMention(ITag tag, TagHandling mode) { if (mode != TagHandling.Remove) { var channel = tag.Value as IChannel; switch (mode) { case TagHandling.Name: case TagHandling.FullName: if (channel != null) { return($"#{channel.Name}"); } else { return($""); } case TagHandling.NameNoPrefix: case TagHandling.FullNameNoPrefix: if (channel != null) { return($"{channel.Name}"); } else { return($""); } case TagHandling.Sanitize: return(MentionChannel($"{SanitizeChar}{tag.Key}")); } } return(""); }
public string Resolve(TagHandling userHandling = TagHandling.Name, TagHandling channelHandling = TagHandling.Name, TagHandling roleHandling = TagHandling.Name, TagHandling everyoneHandling = TagHandling.Ignore, TagHandling emojiHandling = TagHandling.Name) { if (Original != null) { return(Original.Resolve(userHandling, channelHandling, roleHandling, everyoneHandling, emojiHandling)); } else { return(null); } }
internal static string ResolveHereMention(ITag tag, TagHandling mode) { if (mode != TagHandling.Remove) { switch (mode) { case TagHandling.Name: case TagHandling.FullName: case TagHandling.NameNoPrefix: case TagHandling.FullNameNoPrefix: return("here"); case TagHandling.Sanitize: return($"@{SanitizeChar}here"); } } return(""); }
internal static string ResolveEmoji(ITag tag, TagHandling mode) { if (mode != TagHandling.Remove) { Emoji emoji = (Emoji)tag.Value; switch (mode) { case TagHandling.Name: case TagHandling.FullName: return($":{emoji.Name}:"); case TagHandling.NameNoPrefix: case TagHandling.FullNameNoPrefix: return($"{emoji.Name}"); case TagHandling.Sanitize: return($"<{emoji.Id}{SanitizeChar}:{SanitizeChar}{emoji.Name}>"); } } return(""); }
/// <inheritdoc /> public string Resolve(TagHandling userHandling = TagHandling.Name, TagHandling channelHandling = TagHandling.Name, TagHandling roleHandling = TagHandling.Name, TagHandling everyoneHandling = TagHandling.Ignore, TagHandling emojiHandling = TagHandling.Name) => MentionUtils.Resolve(this, 0, userHandling, channelHandling, roleHandling, everyoneHandling, emojiHandling);
/// <inheritdoc /> public string Resolve(TagHandling userHandling = TagHandling.Name, TagHandling channelHandling = TagHandling.Name, TagHandling roleHandling = TagHandling.Name, TagHandling everyoneHandling = TagHandling.Ignore, TagHandling emojiHandling = TagHandling.Name) => RestUserMessage.Resolve(userHandling, channelHandling, roleHandling, everyoneHandling, emojiHandling);
internal static string ResolveUserMention(ITag tag, TagHandling mode) { if (mode != TagHandling.Remove) { var user = tag.Value as IUser; var guildUser = user as IGuildUser; switch (mode) { case TagHandling.Name: if (user != null) { return($"@{guildUser?.Nickname ?? user?.Username}"); } else { return($""); } case TagHandling.NameNoPrefix: if (user != null) { return($"{guildUser?.Nickname ?? user?.Username}"); } else { return($""); } case TagHandling.FullName: if (user != null) { return($"@{user.Username}#{user.Discriminator}"); } else { return($""); } case TagHandling.FullNameNoPrefix: if (user != null) { return($"{user.Username}#{user.Discriminator}"); } else { return($""); } case TagHandling.Sanitize: if (guildUser != null && guildUser.Nickname == null) { return(MentionUser($"{SanitizeChar}{tag.Key}", false)); } else { return(MentionUser($"{SanitizeChar}{tag.Key}", true)); } } } return(""); }
internal static string Resolve(IMessage msg, int startIndex, TagHandling userHandling, TagHandling channelHandling, TagHandling roleHandling, TagHandling everyoneHandling, TagHandling emojiHandling) { var text = new StringBuilder(msg.Content.Substring(startIndex)); var tags = msg.Tags; int indexOffset = -startIndex; foreach (var tag in tags) { if (tag.Index < startIndex) { continue; } string newText = ""; switch (tag.Type) { case TagType.UserMention: if (userHandling == TagHandling.Ignore) { continue; } newText = ResolveUserMention(tag, userHandling); break; case TagType.ChannelMention: if (channelHandling == TagHandling.Ignore) { continue; } newText = ResolveChannelMention(tag, channelHandling); break; case TagType.RoleMention: if (roleHandling == TagHandling.Ignore) { continue; } newText = ResolveRoleMention(tag, roleHandling); break; case TagType.EveryoneMention: if (everyoneHandling == TagHandling.Ignore) { continue; } newText = ResolveEveryoneMention(tag, everyoneHandling); break; case TagType.HereMention: if (everyoneHandling == TagHandling.Ignore) { continue; } newText = ResolveHereMention(tag, everyoneHandling); break; case TagType.Emoji: if (emojiHandling == TagHandling.Ignore) { continue; } newText = ResolveEmoji(tag, emojiHandling); break; } text.Remove(tag.Index + indexOffset, tag.Length); text.Insert(tag.Index + indexOffset, newText); indexOffset += newText.Length - tag.Length; } return(text.ToString()); }
public string Resolve(TagHandling userHandling = TagHandling.Name, TagHandling channelHandling = TagHandling.Name, TagHandling roleHandling = TagHandling.Name, TagHandling everyoneHandling = TagHandling.Ignore, TagHandling emojiHandling = TagHandling.Name) { throw new NotImplementedException(); }