-
-
Save ChristopherKing42/2a6e38f266ed7903a0c1883fc974794a to your computer and use it in GitHub Desktop.
Node.JS - Quick & Dirty Poloniex Trollbox IRC Relay. Debian/Ubuntu: apt-get install libicu-dev / NPM Modules: npm install autobahn ent irc irc-colors
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// Poloniex Trollbox IRC Relay with filter | |
var autobahn = require('autobahn'); | |
var ent = require('ent'); | |
var irc = require('irc'); | |
var c = require('irc-colors'); | |
// set it up | |
var config = { | |
network: 'irc.freenode.net', | |
channelName: '##testbox', | |
botName: 'TROLLBOX', | |
captureDuration: 60 * 1000, // 60 seconds in milis | |
wsuri: 'wss://api.poloniex.com', | |
useFilters: true | |
} | |
// filter strings (always lowercase) | |
var keywords = ['monero', 'xmr', 'moonero']; | |
var nicks = ['fluffypony', 'needmoney90']; | |
// colour replacements (requires both to avoid modifying original) | |
var colours = { | |
'xmr': c.blue, | |
'XMR': c.blue, | |
'btc': c.green, | |
'BTC': c.green, | |
'know': c.rainbow, | |
'fluffypony': c.rainbow | |
}; | |
// connect to web socket | |
var connection = new autobahn.Connection({ | |
url: config.wsuri, | |
realm: "realm1" | |
}); | |
// configure irc client | |
var client = new irc.Client(config.network, config.botName, { | |
userName: config.botName, | |
realName: 'Poloniex Trollbox IRC Relay', | |
port: 6667, | |
debug: false, | |
autoRejoin: true, | |
channels: [config.channelName] | |
}); | |
client.addListener('error', function(message) { | |
console.log('error: ', message); | |
}); | |
connection.onopen = function (session) { | |
session.subscribe('trollbox', messageReceived); | |
}; | |
function messageReceived(args, kwargs) { | |
var nick = args[2]; | |
var msg = ent.decode(args[3]); | |
if(shouldCaptureMessage(nick, msg)) { | |
say(nick, msg); | |
} | |
} | |
/** | |
* Check if we should say it | |
*/ | |
function shouldCaptureMessage(nick, msg) { | |
var shouldCapture = false; | |
nick = nick.toLowerCase(); | |
msg = msg.toLowerCase(); | |
// skip if filtering is off | |
if(!config.useFilters) return true; | |
// check for keywords | |
keywords.forEach(function(capture) { | |
if(msg.indexOf(capture) != -1 || nick == capture) { | |
nicks.push(nick); | |
setTimeout(function() { | |
nicks.splice(nicks.indexOf(nick), 1); | |
}, config.captureDuration); | |
shouldCapture = true; | |
} | |
}); | |
// check for user nicks | |
nicks.forEach(function(capture) { | |
if(msg.indexOf(capture) != -1 || capture == nick) { | |
shouldCapture = true; | |
} | |
}); | |
return shouldCapture; | |
} | |
/** | |
* Send the message to IRC | |
*/ | |
function say(nick, msg) { | |
client.say(config.channelName, '-> ' + c.bold(nick) + ': ' + colourize(msg)); | |
} | |
/** | |
* Add some colour | |
*/ | |
function colourize(msg) { | |
Object.keys(colours).forEach(function(key) { | |
msg = msg.replace(key, colours[key](key)); | |
}); | |
return msg; | |
} | |
connection.onclose = function () { | |
console.log("Websocket connection closed."); | |
} | |
connection.open(); |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment