-
Notifications
You must be signed in to change notification settings - Fork 61
/
irc.js
94 lines (78 loc) · 3.08 KB
/
irc.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
/*
* Copyright 2011 Rackspace
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*
*/
var async = require('async');
var irc = require('irc');
var sprintf = require('util/sprintf');
exports.run = function(dreadnot) {
var clients = {},
joined = {},
config = dreadnot.config.plugins.irc;
async.forEach(Object.keys(config.channels), function(network, callback) {
var client = new irc.Client(network, config.nick, config.connect_opts ? config.connect_opts[network] : undefined);
client.on('registered', function() {
var i;
clients[network] = client;
joined[network] = [];
client.on('join', function(channel, nick) {
if (nick === config.nick) {
joined[network].push(channel);
}
});
for (i = 0; i < config.channels[network].length; i++) {
clients[network].join(config.channels[network][i]);
}
});
});
dreadnot.emitter.on('deployments', function(deployment) {
var link = sprintf('%s/stacks/%s/regions/%s/deployments/%s', dreadnot.config.default_url, deployment.stack, deployment.region,
deployment.deployment),
msg = sprintf('%s is deploying %s to %s:%s - %s', deployment.user, deployment.stack, dreadnot.config.env,
deployment.region, link),
endPath = ['stacks', deployment.stack, 'regions', deployment.region, 'deployments', deployment.deployment, 'end'].join('.'),
i;
onEach(clients, joined, function(client, channel) {
client.notice(channel, msg);
});
dreadnot.emitter.once(endPath, function(success) {
var endMsg = sprintf('deployment #%s of %s to %s:%s %s', deployment.deployment, deployment.stack, dreadnot.config.env,
deployment.region, success ? 'succeeded' : '\u0002FAILED\u000f');
onEach(clients, joined, function(client, channel) {
client.notice(channel, endMsg);
});
});
});
dreadnot.emitter.on('warning.set', function(obj) {
var msg = sprintf('Warning has been set to "%s" by %s', obj.text, obj.username);
onEach(clients, joined, function(client, channel) {
client.notice(channel, msg);
});
});
dreadnot.emitter.on('warning.removed', function(obj) {
var msg = sprintf('Warning "%s" has been removed by %s', obj.text, obj.username);
onEach(clients, joined, function(client, channel) {
client.notice(channel, msg);
});
});
};
function onEach(clients, joined, fn) {
var network, i;
for (network in joined) {
for (i = 0; i < joined[network].length; i++) {
fn(clients[network], joined[network][i]);
}
}
}