All pastes #565004 Raw Edit

MessageParser

public text v1 · immutable
·published 2007-06-13 20:32 UTC
rendered paste body
namespace IRCLib_Tester
{
    public class MessageParser
    {
        string[] likeWords;
        string[] hateWords;
        string[] nicknames;
        string[] ignoreWords;

        public MessageParser()
        {
            likeWords = new string[0];
            hateWords = new string[0];
            nicknames = new string[0];
            ignoreWords = new string[0];
        }

        public MessageType Parse( string message )
        {
            if ( HasIgnore( message ) )
                return MessageType.Ignored;

            if ( IsLike( message ) )
                return MessageType.Like;
            else if ( IsHate( message ) )
                return MessageType.Hate;
            else
                return MessageType.Neutral;
        }
        public MessageInfo GetInfo( string message )
        {
            MessageInfo mi = new MessageInfo();
            if ( HasIgnore( message ) )
            {
                mi.ContainsNick = false;
                return mi;
            }

            if ( HasNick( message ) )
            {
                mi.ContainsNick = true;
                mi.Nickname = WhichNick( message );
            }
            else
            {
                mi.ContainsNick = false;
            }
            return mi;
        }

        private bool IsLike( string message )
        {
            for ( int x = 0 ; x < likeWords.Length ; x++ )
            {
                if ( message.IndexOf( likeWords[x], 0, StringComparison.InvariantCultureIgnoreCase ) != -1 )
                    return true;
            }
            return false;
        }
        private bool IsHate( string message )
        {
            for ( int x = 0 ; x < hateWords.Length ; x++ )
            {
                if ( message.IndexOf( hateWords[x], 0, StringComparison.InvariantCultureIgnoreCase ) != -1 )
                    return true;
            }
            return false;
        }
        private bool HasNick( string message )
        {
            for ( int x = 0 ; x < nicknames.Length ; x++ )
            {
                if ( message.IndexOf( nicknames[x], 0, StringComparison.InvariantCultureIgnoreCase ) != -1 )
                    return true;
            }
            return false;
        }
        private bool HasIgnore( string message )
        {
            for ( int x = 0 ; x < ignoreWords.Length ; x++ )
            {
                if ( message.IndexOf( ignoreWords[x], 0, StringComparison.InvariantCultureIgnoreCase ) != -1 )
                    return true;
            }
            return false;
        }
        private string WhichNick( string message )
        {
            for ( int x = 0 ; x < nicknames.Length ; x++ )
            {
                if ( message.IndexOf( nicknames[x], 0, StringComparison.InvariantCultureIgnoreCase ) != -1 )
                    return nicknames[x];
            }
            return null;
        }

        public string[] LikeWords
        {
            get { return likeWords; }
            set { likeWords = value; }
        }
        public string[] HateWords
        {
            get { return hateWords; }
            set { hateWords = value; }
        }
        public string[] Nicknames
        {
            get { return nicknames; }
            set { nicknames = value; }
        }
        public string[] IgnoreWords
        {
            get { return ignoreWords; }
            set { ignoreWords = value; }
        }
    }

    public struct MessageInfo
    {
        public bool ContainsNick;
        public string Nickname;
    }
    public enum MessageType
    {
        Like,
        Hate,
        Neutral,
        Ignored,
    }
}