irc-framework

A better IRC framework for node.js. For bots and full clients. Read the documentation.

Usage no npm install needed!

<script type="module">
  import ircFramework from 'https://cdn.skypack.dev/irc-framework';
</script>

README

irc-framework

A better IRC framework for node.js. For bots and full clients. Read the documentation.

Aims

  • Lightweight
  • Performant
  • Very easy to get going out of the box
  • Grows as needed for larger applications
  • IRCv3 compliant
  • Multiple (+ auto detected) encoding support
  • Complete test suite

A simple and low-boilerplate framework to build IRC bots.

var bot = new IRC.Client();
bot.connect({
    host: 'irc.freenode.net',
    port: 6667,
    nick: 'prawnsbot'
});

bot.on('message', function(event) {
    if (event.message.indexOf('hello') === 0) {
          event.reply('Hi!');
    }
    
    if (event.message.match(/^!join /)) {
        var to_join = event.message.split(' ');
        event.reply('Joining ' + to_join + '..');
        bot.join(to_join);
    }
});


// Or a quicker to match messages...
bot.matchMessage(/^hi/, function(event) {
    event.reply('hello there!');
});

Channel/buffer objects. Great for building clients

var bot = new IRC.Client();
bot.connect({
    host: 'irc.freenode.net',
    port: 6667,
    nick: 'prawnsbot'
});

var buffers = [];
bot.on('registered', function() {
    var channel = bot.channel('#prawnsalad');
    buffers.push(channel);
    
    channel.join();
    channel.say('Hi!');
    
    channel.updateUsers(function() {
        console.log(channel.users);
    });

    // Or you could even stream the channel messages elsewhere
    var stream = channel.stream();
    stream.pipe(process.stdout);
});

Middleware

function ExampleMiddleware() {
    return function(client, raw_events, parsed_events) {
        parsed_events.use(theMiddleware);
    }


    function theMiddleware(command, event, client, next) {
        if (command === 'registered') {
            if (client.options.nickserv) {
                var options = client.options.nickserv;
                client.say('nickserv', 'identify ' + options.account + ' ' + options.password);
            }
        }

        if (command === 'message' && client.caseCompare(event.event.nick, 'nickserv')) {
            // Handle success/retries/failures
        }

        next();
    }
}


var irc_bot = new IRC.Client();
irc_bot.use(ExampleMiddleware());