slackbotapi
Advanced tools
Comparing version 1.1.3 to 1.2.0
314
index.js
@@ -16,10 +16,5 @@ ////////////////////////////////////////////////////////////////// | ||
var logger = require('jethro'); | ||
var EventEmitter3 = require('eventemitter3'); | ||
var util = require('util'); | ||
var EventEmitter= require('eventemitter3'); | ||
// Starting the logger and EventEmitter | ||
EventEmitter = new EventEmitter3({ | ||
wildcard: true, | ||
delimiter: ':' | ||
}); | ||
// Defining variables | ||
@@ -32,80 +27,9 @@ var slackData = {}; | ||
// Core functions | ||
var outputLog = function(obj) { | ||
if(logging) { | ||
logger.output(obj); | ||
var out = function(severity, source, message) { | ||
if (logging) { | ||
logger(severity, source, message); | ||
} | ||
} | ||
var reqAPI = function(method, data, callback) { | ||
data.token = token; | ||
request.post('https://slack.com/api/'+method, function (error, response, body) { | ||
if (!error && response.statusCode == 200) { | ||
if(!callback) { return JSON.parse(body); } else { return callback(JSON.parse(body)); } | ||
} | ||
}).form(data); | ||
} | ||
var sendSock = function(data) { | ||
if(typeof data !== "undefined") { | ||
data.id = i; | ||
data = JSON.stringify(data); | ||
outputLog({severity:'debug', source:'Socket | Send',message: data,timestamp: new Date(),location: os.hostname()}); | ||
ws.send(data); | ||
i++; | ||
} else outputLog({severity:'error', source:'Socket | Send',message:'No arguments.',timestamp: new Date(),location: os.hostname()}); | ||
} | ||
var connectSlack = function(wsurl) { | ||
ws = new webSocket(wsurl); | ||
ws.on('open', function() { | ||
outputLog({severity:'info', source:'Socket',message:'Connected as '+slackData.self.name+' ['+slackData.self.id+'].',timestamp: new Date(),location: os.hostname()}); | ||
}); | ||
ws.on('close', function(data) { | ||
outputLog({severity:'error', source:'Socket',message:'Disconnected. Error: '+data,timestamp: new Date(),location: os.hostname()}); | ||
}); | ||
ws.on('close', function(data) { | ||
outputLog({severity:'error', source:'Socket',message:'Error. Error: '+data,timestamp: new Date(),location: os.hostname()}); | ||
}); | ||
ws.on('message', function(data) { | ||
outputLog({severity:'debug', source:'Socket | Receive',message: data,timestamp: new Date(),location: os.hostname()}); | ||
data = JSON.parse(data); | ||
if(typeof data.type != 'undefined' && typeof slackAPI['events'][data.type] !== 'undefined') EventEmitter.emit(slackAPI['events'][data.type], data); | ||
}); | ||
} | ||
}; | ||
// __init__ | ||
var slackAPI = function(args) { | ||
if(typeof args !== 'object') { | ||
logging = true; | ||
logger.init(); | ||
outputLog({severity:'error', source:'Slack API',message:'Invalid arguments! Please provide an object with settings.',timestamp: new Date(),location: os.hostname()}); | ||
process.exit(1); | ||
} | ||
var authtoken = args['token']; | ||
if(typeof args['logging'] !== 'boolean') { | ||
logging = true; | ||
logger.init(); | ||
outputLog({severity:'error', source:'Slack API',message:'Invalid arguments! Please provide a valid boolean for logging.',timestamp: new Date(),location: os.hostname()}); | ||
} else { | ||
if(logging === true) { logger.init(); } | ||
logging = args['logging']; | ||
} | ||
if (!authtoken || typeof authtoken !== 'string' || !authtoken.match(/^([a-z]*)\-([0-9]*)\-([0-9a-zA-Z]*)/)) { | ||
logging = true; | ||
logger.init(); | ||
outputLog({severity:'error', source:'Slack API',message:'Invalid arguments! Please provide a valid auth token.',timestamp: new Date(),location: os.hostname()}); | ||
process.exit(1); | ||
} | ||
token = authtoken; | ||
reqAPI('rtm.start', {}, function(data) { | ||
slackData.self = data.self; | ||
slackData.team = data.team; | ||
slackData.channels = data.channels; | ||
slackData.groups = data.groups; | ||
slackData.users = data.users; | ||
slackData.ims = data.ims; | ||
connectSlack(data.url); | ||
}); | ||
} | ||
// Events | ||
slackAPI.events = { | ||
var events = { | ||
hello: 'hello', | ||
@@ -170,2 +94,63 @@ message: 'message', | ||
var reqAPI = function(method, data, callback) { | ||
data.token = token; | ||
request.post('https://slack.com/api/'+method, function (error, response, body) { | ||
if (!error && response.statusCode == 200) { | ||
if (!callback) { | ||
return JSON.parse(body); | ||
} else { | ||
return callback(JSON.parse(body)); | ||
} | ||
} | ||
}).form(data); | ||
}; | ||
var sendSock = function(data) { | ||
if (typeof data !== "undefined") { | ||
data.id = i; | ||
data = JSON.stringify(data); | ||
out("debug", "Sender", "Send: "+data); | ||
this.ws.send(data); | ||
i++; | ||
} else { | ||
out('error', 'Sender', 'Send: No arguments specified!'); | ||
} | ||
}; | ||
function slackAPI(args) { | ||
var self = this; | ||
var authtoken = args['token']; | ||
if (typeof args !== 'object') { | ||
logging = true; | ||
out('error', 'Slack API', 'Invalid arguments! Please provide an object with settings.'); | ||
process.exit(1); | ||
} if (typeof args['logging'] !== 'boolean') { | ||
logging = true; | ||
out('error', 'Slack API', 'Invalid arguments! Please provide a valid boolean for logging.'); | ||
} else { | ||
logging = args['logging']; | ||
} if (!authtoken || typeof authtoken !== 'string' || !authtoken.match(/^([a-z]*)\-([0-9]*)\-([0-9a-zA-Z]*)/)) { | ||
logging = true; | ||
out('error', 'Slack API', 'Invalid arguments! Please provide a valid auth token.'); | ||
process.exit(1); | ||
} | ||
token = authtoken; | ||
reqAPI('rtm.start', {}, function (data) { | ||
slackData.self = data.self; | ||
slackData.team = data.team; | ||
slackData.channels = data.channels; | ||
slackData.groups = data.groups; | ||
slackData.users = data.users; | ||
slackData.ims = data.ims; | ||
self.connectSlack(data.url, function(err, data){ | ||
if (!err){ | ||
self.emit(events[data.type], data); | ||
} | ||
}); | ||
}); | ||
}; | ||
util.inherits(slackAPI, EventEmitter); | ||
// Protoypes | ||
@@ -178,105 +163,114 @@ slackAPI.prototype.reqAPI = reqAPI; | ||
sendSock({'type': 'ping'}); | ||
return this; | ||
} | ||
}; | ||
slackAPI.prototype.connectSlack = function(wsurl, cb) { | ||
var self = this; | ||
self.ws = new webSocket(wsurl); | ||
self.ws.on('open', function() { | ||
out('transport', 'Socket', 'Connected as '+slackData.self.name+' ['+slackData.self.id+'].'); | ||
self.emit("open") | ||
}).on('close', function(data) { | ||
out('warning', 'Socket', 'Disconnected. Error: '+data); | ||
self.emit("close", data) | ||
}).on('error', function(data) { | ||
out('error', 'Socket', 'Error. Error: '+data); | ||
self.emit("error", data) | ||
}).on('message', function(data) { | ||
out('transport', 'Socket', "Recieved: " + data); | ||
data = JSON.parse(data); | ||
if (typeof data.type != 'undefined'){ | ||
if (typeof events[data.type] !== 'undefined') { | ||
cb(null, data); | ||
} | ||
} else { | ||
cb(new Error("data.type not defined")); | ||
} | ||
}); | ||
}; | ||
slackAPI.prototype.getChannel = function(term) { | ||
var channel = null; | ||
for(var i in slackData.channels) { | ||
if(slackData.channels[i]['name'] === term) var channel = slackData.channels[i]; | ||
if(slackData.channels[i]['name'] === term) { | ||
channel = slackData.channels[i]; | ||
} | ||
} | ||
if(typeof channel == 'undefined') { | ||
for(var i in slackData.channels) { | ||
if(slackData.channels[i]['id'] === term) var channel = slackData.channels[i]; | ||
if (channel === null) { | ||
for(var i_ in slackData.channels) { | ||
if(slackData.channels[i_]['id'] === term) { | ||
channel = slackData.channels[i_]; | ||
} | ||
} | ||
} | ||
return channel; | ||
} | ||
}; | ||
slackAPI.prototype.getUser = function(term) { | ||
var user = null; | ||
for(var i in slackData.users) { | ||
if(slackData.users[i]['name'] === term) var user = slackData.users[i]; | ||
if(slackData.users[i]['name'] === term) { | ||
user = slackData.users[i]; | ||
} | ||
} | ||
if(typeof user == 'undefined') { | ||
for(var i in slackData.users) { | ||
if(slackData.users[i]['id'] === term) var user = slackData.users[i]; | ||
if (user === null) { | ||
for(var i_ in slackData.users) { | ||
if(slackData.users[i_]['id'] === term) { | ||
user = slackData.users[i_]; | ||
} | ||
} | ||
} | ||
return user; | ||
} | ||
}; | ||
slackAPI.prototype.getUserByEmail = function(term) { | ||
for(var i in slackData.users) { | ||
if(slackData.users[i]['profile']['email'] === term) var user = slackData.users[i]; | ||
} | ||
if(typeof user == 'undefined') { | ||
for(var i in slackData.users) { | ||
if(slackData.users[i]['id'] === term) var user = slackData.users[i]; | ||
} | ||
} | ||
return user; | ||
} | ||
var user = null; | ||
for(var i in slackData.users) { | ||
if(slackData.users[i]['profile']['email'] === term) { | ||
user = slackData.users[i]; | ||
} | ||
} | ||
if (user === null) { | ||
for(var i_ in slackData.users) { | ||
if(slackData.users[i_]['id'] === term) { | ||
user = slackData.users[i_]; | ||
} | ||
} | ||
} | ||
return user; | ||
}; | ||
slackAPI.prototype.getIM = function(term) { | ||
for(var i in slackData.ims) { | ||
if(slackData.ims[i]['user'] === term) var im = slackData.ims[i]; | ||
var im = null; | ||
for (var i in slackData.ims) { | ||
if(slackData.ims[i]['user'] === term) { | ||
im = slackData.ims[i]; | ||
} | ||
} | ||
if(typeof im == 'undefined') { | ||
for(var i in slackData.ims) { | ||
if(slackData.ims[i]['user'] === this.getUser(term).id) var im = slackData.ims[i]; | ||
if (im === null) { | ||
for (var i_ in slackData.ims) { | ||
if (slackData.ims[i_]['user'] === this.getUser(term).id) { | ||
im = slackData.ims[i_]; | ||
} | ||
} | ||
} | ||
if(typeof im == 'undefined') { | ||
for(var i in slackData.ims) { | ||
if(slackData.ims[i]['id'] === term) var im = slackData.ims[i]; | ||
if (im === null) { | ||
for (var i__ in slackData.ims) { | ||
if (slackData.ims[i__]['id'] === term) { | ||
im = slackData.ims[i__]; | ||
} | ||
} | ||
} | ||
return im; | ||
} | ||
}; | ||
slackAPI.prototype.sendMsg = function(channel, text) { | ||
sendSock({'type': 'message', 'channel': channel, 'text': text}); | ||
return this; | ||
} | ||
}; | ||
slackAPI.prototype.sendPM = function(user, text) { | ||
sendSock({'type': 'message', 'channel': this.getIM(user).id, 'text': text}); | ||
return this; | ||
} | ||
// Event prototypes | ||
slackAPI.prototype.addListener = function() { | ||
EventEmitter.addListener.apply(EventEmitter, arguments); | ||
return this; | ||
}; | ||
slackAPI.prototype.on = function() { | ||
EventEmitter.on.apply(EventEmitter, arguments); | ||
return this; | ||
}; | ||
slackAPI.prototype.once = function() { | ||
EventEmitter.once.apply(EventEmitter, arguments); | ||
return this; | ||
}; | ||
slackAPI.prototype.many = function() { | ||
EventEmitter.many.apply(EventEmitter, arguments); | ||
return this; | ||
}; | ||
slackAPI.prototype.removeListener = function() { | ||
EventEmitter.removeListener.apply(EventEmitter, arguments); | ||
return this; | ||
}; | ||
slackAPI.prototype.off = function() { | ||
EventEmitter.off.apply(EventEmitter, arguments); | ||
return this; | ||
}; | ||
slackAPI.prototype.removeAllListeners = function() { | ||
EventEmitter.removeAllListeners.apply(EventEmitter, arguments); | ||
return this; | ||
}; | ||
slackAPI.prototype.setMaxListeners = function() { | ||
EventEmitter.setMaxListeners.apply(EventEmitter, arguments); | ||
return this; | ||
}; | ||
slackAPI.prototype.listeners = function() { | ||
EventEmitter.listeners.apply(EventEmitter, arguments); | ||
return this; | ||
}; | ||
slackAPI.prototype.emit = function() { | ||
EventEmitter.emit.apply(EventEmitter, arguments); | ||
return this; | ||
}; | ||
module.exports = slackAPI; | ||
slackAPI.prototype.events = events; | ||
module.exports = slackAPI; |
{ | ||
"name": "slackbotapi", | ||
"version": "1.1.3", | ||
"version": "1.2.0", | ||
"description": "a node.js API using Slack their RTM API", | ||
@@ -27,4 +27,7 @@ "main": "index.js", | ||
}, | ||
"author": "xBytez", | ||
"license": "ISC", | ||
"author": "xBytez <me@xbytez.eu>", | ||
"contributors": [ | ||
"Samuel Mills <spam.mills@hotmail.com>" | ||
], | ||
"license": "LGPL 3.0", | ||
"bugs": { | ||
@@ -31,0 +34,0 @@ "url": "https://github.com/xBytez/slackbotapi/issues" |
@@ -5,3 +5,3 @@ SlackbotAPI | ||
[](https://github.com/xBytez/slackbotapi/issues) | ||
[](https://github.com/xBytez/slackbotapi) | ||
[](https://github.com/xBytez/slackbotapi) | ||
@@ -8,0 +8,0 @@ A Node.JS module for Slack's RTM API |
Copyleft License
License(Experimental) Copyleft license information was found.
Found 1 instance in 1 package
Non-permissive License
License(Experimental) A license not known to be considered permissive was found.
Found 1 instance in 1 package
20674
5
2
70
304