From 60a9ae85a340d898192e2e98b55a334e050057ac Mon Sep 17 00:00:00 2001 From: jkhsjdhjs Date: Tue, 6 Sep 2016 14:02:29 +0200 Subject: [PATCH] sums up modes to apply --- src/trigger/umode.js | 21 ++++++++++++++++----- 1 file changed, 16 insertions(+), 5 deletions(-) diff --git a/src/trigger/umode.js b/src/trigger/umode.js index 180ec9a..c0d069b 100644 --- a/src/trigger/umode.js +++ b/src/trigger/umode.js @@ -18,10 +18,21 @@ module.exports = (bot, trigger, lib) => { tmp.pop(); var modes; if(user.toLowerCase() != bot.me.nick.toLowerCase()) { - if(modes = processModes(tmp.join(' '))) { + if(modes = processModes(tmp.join(''))) { if(checkModes(modes, allowedModes)) { - modes.forEach(mode => { - bot.mode(e.channel, mode + ' ' + user, e.network); + var modesToApply = [], currentPrefix, queuedModes; + while(modes.length) { + queuedModes = ""; + currentPrefix = modes[0][0]; + modes.some(mode => { + if(mode[0] === currentPrefix) queuedModes += mode[1]; + else return true; + }); + modesToApply.push(currentPrefix + queuedModes + (' ' + user).repeat(queuedModes.length)); + for(var i = 0; i < queuedModes.length; i++) modes.shift(); + } + modesToApply.forEach(modeStr => { + bot.mode(e.channel, modeStr, e.network); }); } else @@ -44,11 +55,11 @@ var processModes = modes => { if(token === ' ') return; modeArr.push(prefix + token); }); - return [...new Set(modeArr)]; + return modeArr; }; var checkModes = (modes, allowedModes) => { - if(modes.some(mode => { + if([... new Set(modes)].some(mode => { return (allowedModes.indexOf(mode[1]) != -1)?false:true; })) return false; return true;