2016-09-15 00:05:18 +02:00
|
|
|
module.exports = (lib) => {
|
2016-09-14 20:07:10 +02:00
|
|
|
lib.trigger.add({
|
|
|
|
name: 'sync',
|
|
|
|
call: /^!sync$/i,
|
|
|
|
level: 100,
|
|
|
|
active: 1,
|
|
|
|
func: (e) => {
|
2016-09-15 19:17:07 +02:00
|
|
|
lib.bot.names(e.channel, e.network, names => {
|
2016-09-14 20:07:10 +02:00
|
|
|
Object.keys(names).forEach(key => {
|
2016-09-15 19:17:07 +02:00
|
|
|
if(key === lib.bot.me.nick) {
|
|
|
|
return;
|
|
|
|
}
|
2016-09-15 00:05:18 +02:00
|
|
|
lib.bot.whois(key, e.network, (err, data) => {
|
2016-09-15 19:43:57 +02:00
|
|
|
if(data.channels[e.channel]) {
|
|
|
|
var h = modesToString(data.channels[e.channel]), q = "";
|
2016-09-15 19:17:07 +02:00
|
|
|
if(lib.admins[data.account])
|
|
|
|
q = levelToModes(lib.admins[data.account].level);
|
|
|
|
var diff = lib.groupUserModes(userModeDiff(h, q));
|
|
|
|
diff.forEach(entry => lib.bot.mode(e.channel, entry + (' ' + key).repeat(entry.length - 1), e.network));
|
2016-09-14 20:07:10 +02:00
|
|
|
}
|
|
|
|
});
|
|
|
|
});
|
|
|
|
});
|
|
|
|
},
|
|
|
|
desc: 'sync'
|
|
|
|
});
|
2016-09-15 19:17:07 +02:00
|
|
|
};
|
|
|
|
|
|
|
|
var userModeDiff = (h, q) => {
|
|
|
|
var ret = [], index;
|
|
|
|
while(h.length && q.length) {
|
|
|
|
if((index = q.indexOf(h[h.length - 1])) !== -1)
|
|
|
|
q = q.slice(0, index) + q.slice(index + 1);
|
|
|
|
else
|
|
|
|
ret.push('-' + h[h.length - 1]);
|
|
|
|
h = h.slice(0, -1);
|
|
|
|
}
|
|
|
|
var sign = q.length ? '+' : '-';
|
|
|
|
if(!q.length) q = h;
|
|
|
|
if(index = q.length)
|
|
|
|
while(index--)
|
|
|
|
ret.push(sign + q[index]);
|
|
|
|
return ret;
|
|
|
|
};
|
|
|
|
|
|
|
|
var levelToModes = level => {
|
|
|
|
if(level >= 70)
|
|
|
|
return "ao";
|
|
|
|
if(level >= 60)
|
|
|
|
return "o";
|
|
|
|
if(level >= 50)
|
|
|
|
return "h";
|
|
|
|
if(level >= 10)
|
|
|
|
return "v";
|
|
|
|
return "";
|
|
|
|
};
|
|
|
|
|
|
|
|
var modesToString = modes => {
|
|
|
|
var modeStr = "";
|
|
|
|
modes.forEach(entry => {
|
|
|
|
if(entry === "~")
|
|
|
|
modeStr += "q";
|
|
|
|
else if(entry === "&")
|
|
|
|
modeStr += "a";
|
|
|
|
else if(entry === "@")
|
|
|
|
modeStr += "o";
|
|
|
|
else if(entry === "%")
|
|
|
|
modeStr += "h";
|
|
|
|
else if(entry === "+")
|
|
|
|
modeStr += "v";
|
|
|
|
});
|
|
|
|
return modeStr;
|
2016-09-14 20:07:10 +02:00
|
|
|
};
|