/
irc-manager.js
87 lines (67 loc) · 2.54 KB
/
irc-manager.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
/*
This file is part of botten-nappet -- a Twitch bot and streaming tool.
<https://joelpurra.com/projects/botten-nappet/>
Copyright (c) 2018 Joel Purra <https://joelpurra.com/>
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU Affero General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU Affero General Public License for more details.
You should have received a copy of the GNU Affero General Public License
along with this program. If not, see <https://www.gnu.org/licenses/>.
*/
const assert = require("assert");
const Promise = require("bluebird");
export default class IrcManager {
constructor(ircConnection) {
assert.strictEqual(arguments.length, 1);
assert.strictEqual(typeof ircConnection, "object");
this._ircConnection = ircConnection;
this._killSwitch = null;
}
start() {
assert.strictEqual(arguments.length, 0);
return this._ircConnection.listen(this._dataHandler.bind(this), this._filter.bind(this))
.then((killSwitch) => {
this._killSwitch = killSwitch;
return undefined;
})
.tapCatch(() => this._executeKillSwitch());
}
stop() {
assert.strictEqual(arguments.length, 0);
// TODO: assert killSwitch?
return Promise.try(() => {
if (typeof this._killSwitch === "function") {
this._executeKillSwitch();
}
});
}
_dataHandler(data) {
assert.strictEqual(arguments.length, 1);
assert.strictEqual(typeof data, "object");
/* eslint-disable no-console */
console.log("_dataHandler", JSON.stringify(data, null, 2));
/* eslint-enable no-console */
}
_filter(data) {
assert.strictEqual(arguments.length, 1);
assert.strictEqual(typeof data, "object");
// TODO: add a real filter.
return Promise.resolve(true);
}
_executeKillSwitch() {
assert.strictEqual(arguments.length, 0);
return Promise.try(() => {
if (typeof this._killSwitch !== "function") {
return;
}
const killSwitch = this._killSwitch;
this._killSwitch = null;
killSwitch();
});
}
}