Click here to Skip to main content
15,867,328 members
Articles / Programming Languages / XML

SmartIrc4net - The C# IRC Library

Rate me:
Please Sign up or sign in to vote.
4.92/5 (18 votes)
19 Sep 20042 min read 139.4K   1.6K   56   32
IRC library for .NET

Introduction

I wrote SmartIrc4net for having a high-level IRC API for .NET/C#. I started a long time ago with IRC programming for PHP, I wrote Net_SmartIRC. Net_SmartIRC is a PEAR class. Later, I was disappointed that the OO features of PHP are so limited. I was starting to port the project to C++, after a few weeks I stopped, so many things are missing and have to be written (even simple things like string manipulation). Then I found C#. And I ported SmartIRC in about 1-2 weeks! After that, the API got better and better, it's just great what it is now... so here we are SmartIrc4net.

Object Design

This library has a 3 layered API, allows developers to pick the layer/features they need. You could use any layer for writing IRC applications, the question is how much IRC abstraction and features you need. You have the choice!

Layer 1: IrcConnection

This layer is a low-level API and manages the messagebuffer (for reading and writing). Also, the ping/pong and connection handling is done.

Layer 2: IrcCommands (extends IrcConnection)

This layer is a middle-level API. It contains all IRC RFC commands plus some useful and easy to use IRC methods (like Op, Deop, Ban, Unban, etc.).

Layer 3: IrcClient (extends IrcCommands)

This layer is a high-level API with all features you could need for IRC programming, like channel syncing (keeping track of channels in objects with modes/topic/users), user syncing (for nicks, indents, hosts, realnames, servers, and hopcounts). This layer is fully event driven, all received data is parsed into different events with special arguments for each event (this makes it very easy to use the received IRC data without checking the RFC each time!)

How to Use SmartIrc4net

Here is an example of how to use the library using the high-level API:

C#
using System;
using System.Collections;
using Meebey.SmartIrc4net;
using Meebey.SmartIrc4net.Delegates;

public class Test
{
    public static IrcClient irc = new IrcClient();

    public static void OnQueryMessage(Data ircdata)
    {
        switch (ircdata.MessageEx[0]) {
            case "join":
                irc.Join(ircdata.MessageEx[1]);
            break;
            case "part":
                irc.Part(ircdata.MessageEx[1]);
            break;
            case "say":
                irc.Message(SendType.Message, MessageEx[1], MessageEx[2]);
            break;
        }
    }

    public static void Main(string[] args)
    {
        irc.SendDelay = 200;
        irc.AutoRetry = true;
        irc.ChannelSyncing = true;
        irc.OnQueryMessage += new MessageEventHandler(OnQueryMessage);

        string[] serverlist;
        serverlist = new string[] {"irc.ircnet.net"};

        int    port   = 6667;
        if(irc.Connect(serverlist, port) == true) {
            irc.Login("SmartIRC", "Stupid Bot");
            irc.Join("#smartirc");
            irc.Message(SendType.Message, "#smartirc", "test message");
            irc.Message(SendType.Action, "#smartirc", " thinks this is cool");
            irc.Message(SendType.Notice, "#smartirc", "SmartIrc4net rocks!");
            }
            irc.Listen();
            irc.Disconnect();
        } else {
            System.Console.WriteLine("couldn't connect!");
        }
    }
}

Connect to your favorite IRC server, set the IRC server in the source. Join the #smartirc channel. Compile the source, spawn the bot. The bot should come and say three messages, after that, send him a private message: "/msg smartirc say #smartirc hello!".

Official Project Page

SmartIrc4net is an own project which you can find here. There you get the current versions, can report bugs or post help requests on the forum. Comments, suggestions and criticism are welcome!

Have Fun

There you go, have fun with bot coding! ;)

License

This article has no explicit license attached to it, but may contain usage terms in the article text or the download files themselves. If in doubt, please contact the author via the discussion board below.

A list of licenses authors might use can be found here.


Written By
Germany Germany
This member has not yet provided a Biography. Assume it's interesting and varied, and probably something to do with programming.

Comments and Discussions

 
QuestionHow to stop listening to the server? Pin
Member 1021809125-Aug-13 19:55
Member 1021809125-Aug-13 19:55 
QuestionMutliple-Users for AJAX Chat Pin
Member 807251618-May-12 23:42
Member 807251618-May-12 23:42 
GeneralMy vote of 1 Pin
xComaWhitex6-Jan-11 22:28
xComaWhitex6-Jan-11 22:28 
QuestionC# Application instead of console? Pin
Levisaxos9-Nov-09 3:38
Levisaxos9-Nov-09 3:38 
GeneralStill not working... Pin
supra5619-Jul-07 5:08
supra5619-Jul-07 5:08 
GeneralVoice Conference-HELP PLZ!! Pin
mfc_surfer12-Jun-07 3:21
mfc_surfer12-Jun-07 3:21 
GeneralRe: Voice Conference-HELP PLZ!! Pin
meebey12-Jun-07 3:30
meebey12-Jun-07 3:30 
GeneralRe: Voice Conference-HELP PLZ!! Pin
mfc_surfer12-Jun-07 23:04
mfc_surfer12-Jun-07 23:04 
GeneralRe: Voice Conference-HELP PLZ!! Pin
User 281682214-Oct-07 19:39
User 281682214-Oct-07 19:39 
GeneralRe: Voice Conference-HELP PLZ!! Pin
CompMan4423-Aug-08 21:12
CompMan4423-Aug-08 21:12 
GeneralIRC Server Pin
mfc_surfer10-Jun-07 22:02
mfc_surfer10-Jun-07 22:02 
GeneralRe: IRC Server Pin
User 281682214-Oct-07 19:55
User 281682214-Oct-07 19:55 
Questionhow do I compile this? Pin
V32546-Apr-07 3:03
V32546-Apr-07 3:03 
AnswerRe: how do I compile this? Pin
meebey6-Apr-07 4:45
meebey6-Apr-07 4:45 
GeneralRe: how do I compile this? Pin
Member 1115323314-Oct-14 8:08
Member 1115323314-Oct-14 8:08 
AnswerRe: how do I compile this? Pin
Tinkering Turtle11-May-09 8:18
Tinkering Turtle11-May-09 8:18 
Questionother english language can support ? Pin
abcomp0120-Nov-06 20:53
abcomp0120-Nov-06 20:53 
Questioncan through NAT? Pin
iamcoder27-Apr-06 23:18
iamcoder27-Apr-06 23:18 
AnswerRe: can through NAT? Pin
meebey28-Apr-06 0:25
meebey28-Apr-06 0:25 
GeneralRe: can through NAT? Pin
iamcoder28-Apr-06 21:07
iamcoder28-Apr-06 21:07 
GeneralRe: can through NAT? Pin
meebey29-Apr-06 1:39
meebey29-Apr-06 1:39 
GeneralRe: can through NAT? Pin
iamcoder29-Apr-06 17:01
iamcoder29-Apr-06 17:01 
Hi,Meebey:

Your reply that can explain my question.Thank you!

Hope the next version of SmartIrc4net will include the DCC.

Regards!
GeneralExample has few errors. Pin
chmod222224-Jan-06 23:07
chmod222224-Jan-06 23:07 
GeneralUpdated Article Pin
meebey16-Jan-05 7:27
meebey16-Jan-05 7:27 
GeneralHesh wants DCC! :P Pin
FocusedWolf28-Sep-04 2:54
FocusedWolf28-Sep-04 2:54 

General General    News News    Suggestion Suggestion    Question Question    Bug Bug    Answer Answer    Joke Joke    Praise Praise    Rant Rant    Admin Admin   

Use Ctrl+Left/Right to switch messages, Ctrl+Up/Down to switch threads, Ctrl+Shift+Left/Right to switch pages.