All pastes #2066584 Raw Edit

Untitled

public text v1 · immutable
#2066584 ·published 2011-05-22 07:34 UTC
rendered paste body

using System;
using System.Net.Sockets;
using System.IO;
using System.Text;
namespace x_bot
{
    class IrcClient
    {
        private NetworkStream Reader;
        private NetworkStream Writer;
        private TcpClient xBot;
        public bool Connected
        {
            get
            {
                return xBot.Connected;
            }
            protected set { }
        }
        public IrcClient(string server, int port)
        {
            xBot = new TcpClient();
            xBot.Connect(server, port);
            if (xBot.Connected)
            {
                Reader = xBot.GetStream();
                Writer = xBot.GetStream();
            }
        }
        private void Write(string data)
        {
            try
            {
                byte[] packet = Encoding.ASCII.GetBytes(data + "\r\n");
                Writer.Write(packet, 0, packet.Length);
                Console.WriteLine("Wrote -> {0}", data);
            }
            catch (Exception)
            { }
        }
        private bool NullOrEmpty(byte[] packet)
        {
            foreach(byte b in packet)
            {
                if((char)b != '\r' && (char)b != '\n' && (char)b != '\0')
                {
                    return false;
                }
            }
            return true;
        }
        private void Write(string data, params string[] args)
        {
            Write(String.Format(data, args)); 
        }
        private byte[] Read(int length)
        {
            try
            {
                byte[] packet = new byte[length];
                Reader.Read(packet, 0, packet.Length);
                if (NullOrEmpty(packet)) { return packet; }
                Console.WriteLine("Read -> {0}", Encoding.ASCII.GetString(packet));
                return packet;

            }
            catch (Exception)
            {
                return new byte[length];
            }
        }
        public void Nick(string nick)
        {
            Write("NICK {0}", nick);
        }
        public void Quit(string msg)
        {
            Write("QUIT :{0}", msg);
        }
        public void Notice(string target, string msg)
        {
            Write("NOTICE {0} :{1}", target, msg);
        }
        public void Msg(string target, string msg)
        {
            Write("PRIVMSG {0} :{1}", target, msg);
        }
        public void Join(string chan)
        {
            Write("JOIN {0}", chan);
        }
        public void Join(string chan, string key)
        {
            Write("JOIN {0} {1}", chan, key);
        }
        public void Pong(string server)
        {
            Write("PONG :{0}", server);
        }
        public void Part(string chan)
        {
            Write("PART {0}", chan);
        }
        public void Raw(string data)
        {
            Write(data);
        }
        public void User()
        {
            Write("USER {0} 0 * :{3}", Bot.RandString(8), Bot.RandString(8), Bot.RandString(8), Bot.RandString(8));
        }
        public string ReadLine()
        {
            return Encoding.ASCII.GetString(Read(1024));
        }
    }
}

    {
        public class IRCParsed
        {
            public string Prefix;

            public string Command;

            public List<string> Args = new List<string>();
        }

        public static IRCParsed ParseMessage(string s)
        {
            IRCParsed parsed = new IRCParsed();

            List<string> trailing = new List<string>();

            if (s.IndexOf(":") == 0)
            {
                string[] returned = s.Substring(1).Split(new char[] { ' ' }, 2);
                if (returned.Length > 1)
                {
                    parsed.Prefix = returned[0];
                    s = returned[1];
                }
            }

            if (!(s.IndexOf(" :") == -1))
            {
                string[] returned = s.Split(new string[] { " :" }, 2, StringSplitOptions.None);
                s = returned[0];
                trailing.Add(returned[1]);
                string[] split_args = s.Split(new char[] { ' ' }, StringSplitOptions.None);
                foreach (string arg in split_args)
                {
                    parsed.Args.Add(arg);
                }
                foreach (string trail in trailing)
                {
                    parsed.Args.Add(trail);
                }
            }
            else
            {
                foreach (string arg in s.Split(new char[] { ' ' }, StringSplitOptions.None))
                {
                    parsed.Args.Add(arg);
                }
            }

            parsed.Command = parsed.Args[0];
            parsed.Args.RemoveAt(0);

            return parsed;

        }
    }
}