Beispiel #1
0
        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("");
        }
Beispiel #2
0
        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("");
        }
Beispiel #3
0
        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("");
        }
Beispiel #4
0
 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);
     }
 }
Beispiel #5
0
        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("");
        }
Beispiel #6
0
        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);
Beispiel #9
0
        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("");
        }
Beispiel #10
0
        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());
        }
Beispiel #11
0
 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();
 }