Ejemplo n.º 1
0
        private static Player[] MatchPlayers(BotBitsClient client, string query, PlayerSearchFilter filter)
        {
            IList <Player> list = new List <Player>();

            var exactMatch = filter.HasFlag(PlayerSearchFilter.ExactMatch);
            var regex      = filter.HasFlag(PlayerSearchFilter.Regex);

            foreach (var player in Players.Of(client))
            {
                var match = false;
                if (exactMatch)
                {
                    if (player.Username.Equals(query, StringComparison.OrdinalIgnoreCase))
                    {
                        match = true;
                    }
                }
                else if (regex)
                {
                    try
                    {
                        if (Regex.IsMatch(player.Username, query, RegexOptions.IgnoreCase | RegexOptions.CultureInvariant))
                        {
                            match = true;
                        }
                    }
                    catch (ArgumentException ex)
                    {
                        throw new CommandException("Regex error: " + ex.Message);
                    }
                }
                else
                {
                    if (player.Username.StartsWith(query, StringComparison.OrdinalIgnoreCase) ||
                        player.GetTrimmedName().StartsWith(query, StringComparison.OrdinalIgnoreCase))
                    {
                        match = true;
                    }
                }
                if (match)
                {
                    list.Add(player);
                }
            }

            if (list.Count == 0)
            {
                throw new UnknownPlayerCommandException("No player found!");
            }
            if (!filter.HasFlag(PlayerSearchFilter.AllowMultiple) && list.GroupBy(i => i.Username).Count() > 1)
            {
                throw new CommandException("Multiple players with different usernames found.");
            }
            return(list.ToArray());
        }
        private static Player[] MatchPlayers(BotBitsClient client, string query, PlayerSearchFilter filter)
        {
            IList<Player> list = new List<Player>();

            var exactMatch = filter.HasFlag(PlayerSearchFilter.ExactMatch);
            var regex = filter.HasFlag(PlayerSearchFilter.Regex);
            foreach (var player in Players.Of(client))
            {
                var match = false;
                if (exactMatch)
                {
                    if (player.Username.Equals(query, StringComparison.OrdinalIgnoreCase))
                        match = true;
                }
                else if (regex)
                {
                    try
                    {
                        if (Regex.IsMatch(player.Username, query, RegexOptions.IgnoreCase | RegexOptions.CultureInvariant))
                            match = true;
                    }
                    catch (ArgumentException ex)
                    {
                        throw new CommandException("Regex error: " + ex.Message);
                    }
                }
                else
                {
                    if (player.Username.StartsWith(query, StringComparison.OrdinalIgnoreCase) ||
                        player.GetTrimmedName().StartsWith(query, StringComparison.OrdinalIgnoreCase))
                        match = true;
                }
                if (match)
                    list.Add(player);
            }

            if (list.Count == 0)
                throw new UnknownPlayerCommandException("No player found!");
            if (!filter.HasFlag(PlayerSearchFilter.AllowMultiple) && list.GroupBy(i => i.Username).Count() > 1)
                throw new CommandException("Multiple players with different usernames found.");
            return list.ToArray();
        }
Ejemplo n.º 3
0
        public static string TrimFilterPrefix(string chatName, out PlayerSearchFilter filters)
        {
            filters = PlayerSearchFilter.None;
            if (String.IsNullOrEmpty(chatName))
            {
                return(chatName);
            }

            if (chatName.StartsWith("@"))
            {
                filters |= PlayerSearchFilter.ExactMatch;
            }
            else if (chatName.StartsWith("~"))
            {
                filters |= PlayerSearchFilter.FirstResult;
            }
            else if (chatName.StartsWith("%"))
            {
                filters |= PlayerSearchFilter.AllowMultiple;
            }
            else if (chatName.StartsWith(":"))
            {
                filters |= PlayerSearchFilter.Regex;
                return(chatName.Substring(1)); // no more parsing after regex
            }
            else
            {
                return(chatName);
            }

            PlayerSearchFilter innerFilters;

            chatName = TrimFilterPrefix(chatName.Substring(1), out innerFilters);
            filters |= innerFilters;
            return(chatName);
        }
        public static string TrimFilterPrefix(string chatName, out PlayerSearchFilter filters)
        {
            filters = PlayerSearchFilter.None;
            if (String.IsNullOrEmpty(chatName)) return chatName;

            if (chatName.StartsWith("@"))
            {
                filters |= PlayerSearchFilter.ExactMatch;
            }
            else if (chatName.StartsWith("~"))
            {
                filters |= PlayerSearchFilter.FirstResult;
            }
            else if (chatName.StartsWith("%"))
            {
                filters |= PlayerSearchFilter.AllowMultiple;
            }
            else if (chatName.StartsWith(":"))
            {
                filters |= PlayerSearchFilter.Regex;
                return chatName.Substring(1); // no more parsing after regex
            }
            else
            {
                return chatName;
            }

            PlayerSearchFilter innerFilters;
            chatName = TrimFilterPrefix(chatName.Substring(1), out innerFilters);
            filters |= innerFilters;
            return chatName;
        }