-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathmgr.js
115 lines (115 loc) · 4.35 KB
/
mgr.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
module.exports=(cli, db, log, options={regex:/^\/([a-zA-Z0-9_.]*)( |$)/})=>{
var registeredCMDS = {
list:[],
handlers:{}
}
var waitingFor = {};
cli.on('message', msg=>{
var cmd=options.regex.exec(msg.content);
//TODO extract cmd args
if(cmd != null && cmd[1]){
var tlc = cmd[1].toLocaleLowerCase()
var args = msg.content.split(' '); //TODO better argument parsing (eg: quoted strings)
if(registeredCMDS.list.includes(tlc)){
registeredCMDS.handlers[tlc](false,msg,args);
}
}
})
const api = {
registerKey:(collection, keyData, next)=>{
db.get(collection,(err,col)=>{
if(err){
next(err);
} else {
col.template.registerKey(keyData);
next(false);
}
});
},
registerCMD:(cmd, handler, options={getUserdata:false,createNew:false})=>{
if(options.getUserdata){
registeredCMDS.handlers[cmd.toLowerCase()]=(err, msg, args)=>{
if(err) handler(err);
db.get('users',(err,users)=>{
if(err){
handler(err,msg,args)
} else {
users.get(msg.author.id, (err,userdata)=>{
if(err){
if(options.createNew && err == "Does not exist in users!"){
handler(false,msg,args,users.create(msg.author.id, msg.author.tag),users);
} else {
handler(err,msg,args,null,null)
}
} else {
handler(false, msg, args, userdata,users)
}
})
}
})
}
} else {
registeredCMDS.handlers[cmd.toLowerCase()] = handler;
}
registeredCMDS.list.push(cmd.toLowerCase());
},
getUserdata:(usr, next, options={createNew:false})=>{
db.get('users',(err,users)=>{
if(err){
next(err)
} else {
users.get(usr.id, (err,userdata)=>{
if(err){
if(options.createNew && err == "Does not exist in users!"){
next(false,users.create(usr.id,usr.tag),users);
} else {
next(err)
}
} else {
next(false,userdata,users)
}
})
}
})
},
waitFor:(modDesc)=>{
if(waitingFor[modDesc.name]){
log(1, `Module name conflict: \n${JSON.stringify(modDesc)} With ${JSON.stringify(waitingFor[modDesc.name].desc)}`);
} else {
waitingFor[modDesc.name] = {
desc: modDesc,
ready:false
}
}
},
readyUp:(modDesc)=>{
waitingFor[modDesc.name].ready=true;
log(4, ` ${modDesc.name} module ready`);
},
onReady:(func)=>{
var waited = 0;
var waitingInterval = setInterval(()=>{
var allReady = true;
var mods = Object.keys(waitingFor);
for(var i=0; i<mods.length; i++){
if(!waitingFor[mods[i]].ready) allReady=false;
}
if(allReady){
clearInterval(waitingInterval);
log(4, " All modules ready");
func();
} else if(waited>4){
var ages = [];
for(var i=0; i<mods.length; i++){
if(!waitingFor[mods[i]].ready){
ages.push(mods[i]);
}
}
log(2, `Modules are taking a long time to ready up: ${ages.join(", ")}`);
}
waited++;
}, 1000)
}
}
return api;
}