-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathmodules.js
70 lines (61 loc) · 1.68 KB
/
modules.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
var util = require('util');
var _modules = {},
_loadModule = function(moduleInfo, bot, reload) {
var name = moduleInfo.name,
path = moduleInfo.path || './modules/' + name + '.js';
mod = require(path);
// if this module is already loaded...
if(mod === _modules[name]) {
// ...our job is done.
return;
}
// this is helpful when reloading a module
_unloadModule(name);
_modules[name] = mod;
mod.load(name, moduleInfo.config || {}, bot);
console.log('Loaded module ' + name + ' from ' + path + '.');
},
_unloadModule = function(name) {
if(_modules[name]) {
_modules[name].unload();
delete _modules[name];
console.log('Unloaded module ' + name + '.');
}
};
module.exports = {
loadModules: function(modules) {
if(! modules) {
modules = this.config.modules;
}
if(! util.isArray(modules)) {
modules = [modules];
}
for(var i = 0; i < modules.length; ++i) {
_loadModule(modules[i], this);
}
},
unloadModules: function(moduleNames) {
if(! moduleNames) {
moduleNames = this.config.modules.map(function(config) { return config.name; });
}
if(! util.isArray(moduleNames)) {
moduleNames = [moduleNames];
}
for(var i = 0; i < moduleNames.length; ++i) {
_unloadModule(moduleNames[i]);
}
},
isModuleLoaded: function(moduleName) {
return _modules[moduleName] !== undefined;
},
listModules: function() {
return Object.keys(_modules);
},
moduleHelp: function(moduleName) {
if(this.isModuleLoaded(moduleName)) {
return _modules[moduleName].help() || [moduleName + ' appears not to have any help.', 'You should bug its developer.'];
} else {
return ['I don\'t know of any module called ' + moduleName + '.'];
}
}
};