bool HasBannedWord(string text, out RegexMatch banWord)
        {
            banWord = null;
            foreach (var word in m_wordBanlist)
            {
                if (word.IsMatch(text))
                {
                    banWord = word;
                    return(true);
                }
            }

            return(false);
        }
        void CheckMessage(WinterBot bot, TwitchUser user, string text)
        {
            if (user.IsModerator)
            {
                return;
            }


            if (CheckAndTimeoutSpam(bot, user, text))
            {
                return;
            }

            string     clearReason = null;
            RegexMatch banWord     = null;

            Url[] urls;
            if (HasUrls(text, out urls))
            {
                // Check bans.
                if (MatchesAny(urls, m_urlBanlist))
                {
                    m_winterBot.Ban(user);
                    if (!string.IsNullOrEmpty(m_urlOptions.BanMessage))
                    {
                        bot.SendUnconditional("{0}: {1}", user.Name, m_urlOptions.BanMessage);
                    }

                    m_winterBot.WriteDiagnostic(DiagnosticFacility.Ban, "Banned {0} for {1}.", user.Name, string.Join(", ", urls.Select(url => url.FullUrl)));
                }
                else if ((m_urlOptions.ShouldEnforce(user) || m_denyList.Contains(user)) && (!MatchesAll(urls, m_urlWhitelist) || MatchesAny(urls, m_urlBlacklist)))
                {
                    if (m_permit.Contains(user))
                    {
                        m_permit.Remove(user);
                    }
                    else
                    {
                        clearReason = m_urlOptions.Message;
                    }
                }
            }
            else if (m_banWordOptions.ShouldEnforce(user) && HasBannedWord(text, out banWord))
            {
                clearReason = EnforceBannedWord(bot, user, banWord.String);
            }
            else if (m_symbolOptions.ShouldEnforce(user) && HasSpecialCharacter(text))
            {
                clearReason = m_symbolOptions.Message;
            }
            else if (m_capsOptions.ShouldEnforce(user) && TooManyCaps(user, text))
            {
                clearReason = m_capsOptions.Message;
            }
            else if (m_emoteOptions.ShouldEnforce(user) && TooManyEmotes(user, text))
            {
                clearReason = m_emoteOptions.Message;
            }
            else if (m_lengthOptions.ShouldEnforce(user) && MessageTooLong(user, text))
            {
                clearReason = m_lengthOptions.Message;
            }

            if (clearReason != null)
            {
                ClearChat(bot, user, clearReason);
            }
            else if (!user.IsModerator && !user.IsStreamer)
            {
                m_lastMsgs[m_currMsg++ % m_lastMsgs.Length] = new Tuple <TwitchUser, string>(user, text.ToLower());
            }
        }