Det er godt i C# men det burde ikke være så vært at konvertere.
IrcBot.cs:  
using System;
using System.Net;
using System.Net.Sockets;
using System.IO;
using System.Threading;  
/* 
 *  This program establishes a connection to irc server, joins a channel and greets every nickname that
 *  joins the channel.
 *
 *  Coded by Pasi Havia 17.11.2001 
http://koti.mbnet.fi/~curupted */ 
class IrcBot
{
        // Irc server to connect 
        public static string SERVER = "irc.df.lth.se";
        // Irc server's port (6667 is default port)
        private static int PORT = 6667;  
        // User information defined in RFC 2812 (Internet Relay Chat: Client Protocol) is sent to irc server    
        private static string USER = "USER CSharpBot 8 * :I'm a C# irc bot";        
        // Bot's nickname
        private static string NICK = "BotNick";  
        // Channel to join
        private static string CHANNEL = "#my_channel";  
        // StreamWriter is declared here so that PingSender can access it
        public static StreamWriter writer;        
        static void Main (string[] args)
        {       
               NetworkStream stream;
               TcpClient irc;
               string inputLine;
               StreamReader reader;
               string nickname;               
               try
               {
                       irc = new TcpClient (SERVER, PORT);
                       stream = irc.GetStream ();
                       reader = new StreamReader (stream);
                       writer = new StreamWriter (stream);                       
                       // Start PingSender thread
                       PingSender ping = new PingSender ();
                       ping.Start ();                       
                       writer.WriteLine (USER);
                       writer.Flush ();
                       writer.WriteLine ("NICK " + NICK);
                       writer.Flush ();
                       writer.WriteLine ("JOIN " + CHANNEL);
                       writer.Flush ();  
                       while (true)
                       {                      
                               while ( (inputLine = reader.ReadLine () ) != null )
                               {
                                      if (inputLine.EndsWith ("JOIN :" + CHANNEL) )
                                      {
                                              // Parse nickname of person who joined the channel
                                              nickname = inputLine.Substring(1, inputLine.IndexOf ("!") - 1);                                              
                                              // Welcome the nickname to channel by sending a notice
                                              writer.WriteLine ("NOTICE " + nickname + " :Hi " + nickname + 
                                              " and welcome to " + CHANNEL + " channel!");
                                              writer.Flush ();
                                              // Sleep to prevent excess flood
                                              Thread.Sleep (2000);
                                      }
                               }                               
                               // Close all streams
                               writer.Close ();
                               reader.Close ();
                               irc.Close ();
                       }
               }
               catch (Exception e)
               {
                       // Show the exception, sleep for a while and try to establish a new connection to irc server
                       Console.WriteLine (e.ToString () );
                       Thread.Sleep (5000);
                       string[] argv = { };
                       Main (argv);
               }
        }
}  
PingSender.cs:
using System;
using System.Threading;  
/*
 *  Class that sends PING to irc server every 15 seconds
 */
class PingSender
{
        static string PING = "PING :";
        private Thread pingSender;
        // Empty constructor makes instance of Thread
        public PingSender () 
        {
               pingSender = new Thread (new ThreadStart (this.Run) ); 
        }  
        // Starts the thread
        public void Start () 
        { 
               pingSender.Start (); 
        } 
        // Send PING to irc server every 15 seconds
        public void Run ()
        {
               while (true)
               {
                       IrcBot.writer.WriteLine (PING + IrcBot.SERVER);
                       IrcBot.writer.Flush ();
                       Thread.Sleep (15000);
               }
        }
}