-
Notifications
You must be signed in to change notification settings - Fork 0
/
app.js
151 lines (131 loc) · 4.35 KB
/
app.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
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
"use strict";
var cfg = require('./config.js');
var utils = require('./utils.js');
var mumble = require('mumble');
var fs = require('fs');
var nedb = require('nedb'),
db = new nedb({
filename: cfg['dbFileName'],
autoload: true
});
var options = {};
try {
options = {
key: fs.readFileSync('key.pem'),
cert: fs.readFileSync('key.pem')
};
} catch (e) {
console.log('Could not load private/public certificate files.');
console.log('Trying to connect without client certificate.');
}
var tree = "";
function buildChannelTree(channel, level) {
for (var i = 0; i < level; i++) {
tree += " ";
}
tree += " - " + channel.name + ": ";
for (var u in channel.users) {
var user = channel.users[u];
tree += user.name + ", ";
}
tree += "\n";
for (var c in channel.children) {
buildChannelTree(channel.children[c], level + 1);
}
}
console.log('Connecting');
mumble.connect(cfg['serverURL'], options, function(error, connection) {
if (error) {
throw new Error(error);
}
console.log('Connected');
connection.on('ready', function() {
console.log("Ready!");
buildChannelTree(connection.rootChannel, 0);
console.log(tree);
console.log("Those were all channels!");
console.log("Users:");
var list = connection.users();
for (var key in list) {
var user = list[key];
console.log(" - " + user.name + " in channel " + user.channel.name);
}
console.log("\nThose were all users!");
});
// Welcome message
connection.on('user-connect', function(user) {
user.sendMessage('Welcome, ' + user.name + '!');
});
// Handle commands
var commands = [],
command, files = fs.readdirSync("./commands");
for (var i = 0; i < files.length; i++) {
if (files[i].endsWith('.js')) {
try {
command = require('./commands/' + files[i]);
if (command == null || command.command == null || command.action == null) throw 'error in command module';
commands.push(command);
} catch (ex) {
console.error('Error occured while loading command: ' + files[i]);
}
}
}
connection.on('message', function(message, actor) {
for (var i = 0; i < commands.length; i++) {
var cmd = commands[i];
var match = cmd.command.exec(message);
if (!match) {
continue;
}
var params = match.slice(1); // context passed to commands
params.unshift({
message: message,
actor: actor,
connection: connection,
db: db
});
cmd.action.apply(null, params);
return;
}
});
// Schedule events
var events = [],
event, files = fs.readdirSync("./events");
for (var i = 0; i < files.length; i++) {
if (files[i].endsWith('.js')) {
try {
event = require('./events/' + files[i]);
if (event == null || event.interval == null || event.event == null) throw 'error in event module';
events.push(setInterval(event.event, event.interval, {
db: db,
connection: connection
}));
} catch (ex) {
console.error('Error occured while loading event: ' + files[i]);
}
}
}
// authorize
connection.authenticate(cfg['botName']);
// set comment
var comment = [
'╔═════════════════════════════════════╗',
'║ MumBOT ║',
'╚═════════════════════════════════════╝',
' ',
' Commands:',
' ',
' !yt [play/stop/info]',
' !msg <i>users,divided,by,commas</i>: <i>msg</i>',
' !bc <i>msg</i>',
' !roll',
' !credits',
' !top',
' !gamble <i>credits</i>'
]
connection.connection.sendMessage('UserState', {
session: connection.session,
actor: connection.session,
comment: utils.formatComment(comment)
});
});