Skip to content

Instantly share code, notes, and snippets.

@t3h2mas
Created July 2, 2014 21:57
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save t3h2mas/35c1b908e106131188ba to your computer and use it in GitHub Desktop.
Save t3h2mas/35c1b908e106131188ba to your computer and use it in GitHub Desktop.
var blessed = require('blessed');
var screen = blessed.screen();
// FOR THE GLORY OF THE LOG
var fs = require('fs');
var log = require('npmlog');
var stream = fs.createWriteStream('loggit.duh');
log.stream = stream;
log.heading = "node irclient";
var irc = require('irc');
var client = new irc.Client('irc.esper.net', 'nodecli', {
channels: ['#smth'],
});
var box = blessed.box({
bottom: 0,
left: 'center',
height: 3,
width: '100%',
tags: true,
});
screen.append(box);
var buffer = blessed.Text({
top: 0,
width: '100%',
height: '93%',
border: {
type: 'line'
}
});
screen.append(buffer)
var form = blessed.Form({
});
box.append(form);
var text = blessed.Textbox({
name: 'input',
inputOnFocus: true,
keys: true,
border: {
type: 'line'
}
});
box.append(text);
text.key('enter', function (ch, key) {
// do work with text.getValue()
msg = text.getValue()
if (msg == '/quit')
process.exit(0);
buffer.setText(buffer.getText() + '\n' + '#smth:nodecli -> ' + msg);
client.say('#smth', msg);
text.clearValue()
text.focus()
screen.render();
});
// irc
client.on('message', function (from, to, message) {
buffer.setText(buffer.getText() + '\n' + to + ':' + from + ' > ' + message);
screen.render();
});
// test
client.on('join', function (channel, nick, message) { // test this
bufferAppend('* JOIN ' + channel + ' *');
log.info('join', 'nick : %j', nick);
});
client.on('names', function (channel, nicks) {
var current = buffer.getText() + '\n'
var i = 0;
log.info('debug', 'nicks: %j', nicks);
Object.keys(nicks).forEach(function (nick) {
current = current + ', ' + nick;
i++;
if (i == 8) { // hardcoded
current = current + '\n';
i = 0;
}
});
buffer.setText(current + '\n');
screen.render();
});
client.on('registered', function (msg) {
bufferAppend('* CONNECTED ' + msg.server + ' *');
});
// BUG -- MOTD fills buffer, buffer won't scroll.
//client.on('motd', function (motd) {
// bufferAppend(motd);
//});
screen.key(['escape', 'C-c'], function (ch, key) {
cleanup();
});
function bufferAppend(message) {
buffer.setText(buffer.getText() + '\n' + message);
screen.render()
};
function cleanup(msg) {
var m = msg || 'hasta luego \o';
// BUG HERE. what happens when there are no channels?
client.chans.forEach(function (chan) {
client.part(chan, m, function () {});
});
client.disconnect('BUHBYE');
log.info('die', 'disconnected');
stream.end();
}
text.focus();
screen.render();
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment