Skip to content

Commit f809e7b

Browse files
author
Samuel Mills (Henchman)
committed
Finished refactor, all necessary variables/functions should be within the constructor scope now.
1 parent d76f042 commit f809e7b

File tree

2 files changed

+91
-97
lines changed

2 files changed

+91
-97
lines changed

index.js

Lines changed: 90 additions & 96 deletions
Original file line numberDiff line numberDiff line change
@@ -16,19 +16,6 @@ var logger = require('jethro');
1616
var util = require('util');
1717
var EventEmitter= require('eventemitter3');
1818

19-
// Defining variables
20-
var slackData = {};
21-
var i = 0;
22-
var token = '';
23-
var logging;
24-
25-
// Core functions
26-
var out = function(severity, message) {
27-
if (logging) {
28-
logger(severity, "SlackAPI", message);
29-
}
30-
};
31-
3219
var events = {
3320
hello: 'hello',
3421
message: 'message',
@@ -89,58 +76,38 @@ var events = {
8976
accounts_changed: 'accounts_changed'
9077
};
9178

92-
var reqAPI = function(method, data, callback) {
93-
data.token = token;
94-
if(typeof data.attachments !== 'undefined') data.attachments = JSON.stringify(data.attachments);
95-
request.post('https://slack.com/api/'+method, function (error, response, body) {
96-
if (!error && response.statusCode == 200) {
97-
if (!callback) {
98-
return JSON.parse(body);
99-
} else {
100-
return callback(JSON.parse(body));
101-
}
102-
}
103-
}).form(data);
104-
};
105-
106-
var sendSock = function(data) {
107-
if (typeof data !== "undefined") {
108-
data.id = i;
109-
data = JSON.stringify(data);
110-
out("debug", "Send: "+data);
111-
this.ws.send(data);
112-
i++;
113-
} else {
114-
out('error', 'Send: No arguments specified!');
115-
}
116-
};
117-
11879
function slackAPI(args) {
11980
var self = this;
12081
var authtoken = args['token'];
82+
83+
this.slackData = {};
84+
this.token = "";
85+
this.logging;
86+
this.i = 0;
87+
12188
if (typeof args !== 'object') {
122-
logging = true;
123-
out('error', 'Invalid arguments! Please provide an object with settings.');
89+
this.logging = true;
90+
this.out('error', 'Invalid arguments! Please provide an object with settings.');
12491
process.exit(1);
12592
} if (typeof args['logging'] !== 'boolean') {
126-
logging = true;
127-
out('error', 'Invalid arguments! Please provide a valid boolean for logging.');
93+
this.logging = true;
94+
this.out('error', 'Invalid arguments! Please provide a valid boolean for logging.');
12895
} else {
129-
logging = args['logging'];
96+
this.logging = args['logging'];
13097
} if (!authtoken || typeof authtoken !== 'string' || !authtoken.match(/^([a-z]*)\-([0-9]*)\-([0-9a-zA-Z]*)/)) {
131-
logging = true;
132-
out('error', 'Invalid arguments! Please provide a valid auth token.');
98+
this.logging = true;
99+
this.out('error', 'Invalid arguments! Please provide a valid auth token.');
133100
process.exit(1);
134101
}
135102

136-
token = authtoken;
137-
reqAPI('rtm.start', {}, function (data) {
138-
slackData.self = data.self;
139-
slackData.team = data.team;
140-
slackData.channels = data.channels;
141-
slackData.groups = data.groups;
142-
slackData.users = data.users;
143-
slackData.ims = data.ims;
103+
this.token = authtoken;
104+
self.reqAPI('rtm.start', {}, function (data) {
105+
self.slackData.self = data.self;
106+
self.slackData.team = data.team;
107+
self.slackData.channels = data.channels;
108+
self.slackData.groups = data.groups;
109+
self.slackData.users = data.users;
110+
self.slackData.ims = data.ims;
144111
self.connectSlack(data.url, function(err, data){
145112
if (!err){
146113
self.emit(events[data.type], data);
@@ -152,28 +119,55 @@ function slackAPI(args) {
152119
util.inherits(slackAPI, EventEmitter);
153120

154121
// Protoypes
155-
slackAPI.prototype.reqAPI = reqAPI;
156-
slackAPI.prototype.sendSock = sendSock;
157-
slackAPI.prototype.data = slackData;
158-
slackAPI.prototype.logger = logger.output;
122+
slackAPI.prototype.reqAPI = function(method, data, callback) {
123+
data.token = this.token;
124+
request.post('https://slack.com/api/' + method, function (error, response, body) {
125+
if (!error && response.statusCode == 200) {
126+
if (!callback) {
127+
return JSON.parse(body);
128+
} else {
129+
return callback(JSON.parse(body));
130+
}
131+
}
132+
}).form(data);
133+
};
134+
159135
slackAPI.prototype.ping = function() {
160-
sendSock({'type': 'ping'});
136+
this.sendSock({'type': 'ping'});
137+
};
138+
139+
slackAPI.prototype.out = function(severity, message) {
140+
if (this.logging) {
141+
logger(severity, "SlackAPI", message);
142+
}
143+
};
144+
145+
slackAPI.prototype.sendSock = function(data) {
146+
if (typeof data !== "undefined") {
147+
data.id = this.i;
148+
data = JSON.stringify(data);
149+
this.out("debug", "Send: "+data);
150+
this.ws.send(data);
151+
this.i++;
152+
} else {
153+
this.out('error', 'Send: No arguments specified!');
154+
}
161155
};
162156

163157
slackAPI.prototype.connectSlack = function(wsurl, cb) {
164158
var self = this;
165159
self.ws = new webSocket(wsurl);
166160
self.ws.on('open', function() {
167-
out('transport', 'Connected as '+slackData.self.name+' ['+slackData.self.id+'].');
161+
self.out('transport', 'Connected as '+self.slackData.self.name+' ['+self.slackData.self.id+'].');
168162
self.emit("open")
169163
}).on('close', function(data) {
170-
out('warning', 'Disconnected. Error: '+data);
164+
self.out('warning', 'Disconnected. Error: '+data);
171165
self.emit("close", data)
172166
}).on('error', function(data) {
173-
out('error', 'Error. Error: '+data);
167+
self.out('error', 'Error. Error: '+data);
174168
self.emit("error", data)
175169
}).on('message', function(data) {
176-
out('transport', "Recieved: " + data);
170+
self.out('transport', "Recieved: " + data);
177171
data = JSON.parse(data);
178172
if (typeof data.type != 'undefined'){
179173
if (typeof events[data.type] !== 'undefined') {
@@ -186,50 +180,50 @@ slackAPI.prototype.connectSlack = function(wsurl, cb) {
186180
};
187181

188182
slackAPI.prototype.getChannel = function(term) {
189-
var channel = null;
190-
for(var i in slackData.channels) {
191-
if(slackData.channels[i]['name'] === term) {
192-
channel = slackData.channels[i];
183+
var channel = null, self = this;
184+
for(var i in self.slackData.channels) {
185+
if(self.slackData.channels[i]['name'] === term) {
186+
channel = self.slackData.channels[i];
193187
}
194188
}
195189
if (channel === null) {
196-
for(var i_ in slackData.channels) {
197-
if(slackData.channels[i_]['id'] === term) {
198-
channel = slackData.channels[i_];
190+
for(var i_ in self.slackData.channels) {
191+
if(self.slackData.channels[i_]['id'] === term) {
192+
channel = self.slackData.channels[i_];
199193
}
200194
}
201195
}
202196
return channel;
203197
};
204198

205199
slackAPI.prototype.getUser = function(term) {
206-
var user = null;
207-
for(var i in slackData.users) {
208-
if(slackData.users[i]['name'] === term) {
209-
user = slackData.users[i];
200+
var user = null, self = this;
201+
for(var i in self.slackData.users) {
202+
if(self.slackData.users[i]['name'] === term) {
203+
user = self.slackData.users[i];
210204
}
211205
}
212206
if (user === null) {
213-
for(var i_ in slackData.users) {
214-
if(slackData.users[i_]['id'] === term) {
215-
user = slackData.users[i_];
207+
for(var i_ in self.slackData.users) {
208+
if(self.slackData.users[i_]['id'] === term) {
209+
user = self.slackData.users[i_];
216210
}
217211
}
218212
}
219213
return user;
220214
};
221215

222216
slackAPI.prototype.getUserByEmail = function(term) {
223-
var user = null;
224-
for(var i in slackData.users) {
225-
if(slackData.users[i]['profile']['email'] === term) {
226-
user = slackData.users[i];
217+
var user = null, self = this;
218+
for(var i in self.slackData.users) {
219+
if(self.slackData.users[i]['profile']['email'] === term) {
220+
user = self.slackData.users[i];
227221
}
228222
}
229223
if (user === null) {
230-
for(var i_ in slackData.users) {
231-
if(slackData.users[i_]['id'] === term) {
232-
user = slackData.users[i_];
224+
for(var i_ in self.slackData.users) {
225+
if(self.slackData.users[i_]['id'] === term) {
226+
user = self.slackData.users[i_];
233227
}
234228
}
235229
}
@@ -238,36 +232,36 @@ slackAPI.prototype.getUserByEmail = function(term) {
238232

239233
slackAPI.prototype.getIM = function(term) {
240234
var im = null;
241-
for (var i in slackData.ims) {
242-
if(slackData.ims[i]['user'] === term) {
243-
im = slackData.ims[i];
235+
for (var i in self.slackData.ims) {
236+
if(self.slackData.ims[i]['user'] === term) {
237+
im = self.slackData.ims[i];
244238
}
245239
}
246240
if (im === null) {
247-
for (var i_ in slackData.ims) {
248-
if (slackData.ims[i_]['user'] === this.getUser(term).id) {
249-
im = slackData.ims[i_];
241+
for (var i_ in self.slackData.ims) {
242+
if (self.slackData.ims[i_]['user'] === this.getUser(term).id) {
243+
im = self.slackData.ims[i_];
250244
}
251245
}
252246
}
253247
if (im === null) {
254-
for (var i__ in slackData.ims) {
255-
if (slackData.ims[i__]['id'] === term) {
256-
im = slackData.ims[i__];
248+
for (var i__ in self.slackData.ims) {
249+
if (self.slackData.ims[i__]['id'] === term) {
250+
im = self.slackData.ims[i__];
257251
}
258252
}
259253
}
260254
return im;
261255
};
262256

263257
slackAPI.prototype.sendMsg = function(channel, text) {
264-
sendSock({'type': 'message', 'channel': channel, 'text': text});
258+
this.sendSock({'type': 'message', 'channel': channel, 'text': text});
265259
};
266260

267261
slackAPI.prototype.sendPM = function(user, text) {
268-
sendSock({'type': 'message', 'channel': this.getIM(user).id, 'text': text});
262+
this.sendSock({'type': 'message', 'channel': this.getIM(user).id, 'text': text});
269263
};
270264

271265
slackAPI.prototype.events = events;
272266

273-
module.exports = slackAPI;
267+
module.exports = slackAPI;

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "slackbotapi",
3-
"version": "1.2.3",
3+
"version": "1.3.0",
44
"description": "a node.js API using Slack their RTM API",
55
"main": "index.js",
66
"scripts": {

0 commit comments

Comments
 (0)