var allowedModes = [ 'q','a','o','h','v' ]; module.exports = (bot, trigger, lib) => { trigger.add({ name: 'umode', call: /^\!umode .*/i, level: 100, active: 1, func: (e) => { var tmp = e.message.trim().split(' '); tmp.shift(); var user = tmp[tmp.length - 1]; if(user.match(/(\+|-)/)) user = e.user.getNick(); else tmp.pop(); e.reply("input: "+JSON.stringify(tmp)); var modes; if(user.toLowerCase() != bot.me.nick.toLowerCase()) { if(user in e.channel.names) { if(modes = processModes(tmp.join(' '))) { if(checkModes(modes, allowedModes)) modes.forEach((entry,i,a) => { bot.mode(e.channel, (entry.delta?'+':'-')+entry.mode+' '+user, e.network); }); else e.reply('Error! Allowed modes are: ' + allowedModes.join(',')); } else e.reply('Syntax Error!'); } else e.reply('user not found!'); } else e.reply('f0ck you hard'); e.reply("output: "+JSON.stringify(modes)); }, desc: 'change Usermodes' }); }; var processModes = (modes) => { var delta, modeList = []; if(modes.split('').some((token) => { if(token === '-') {delta = false; return;} if(token === '+') {delta = true; return;} if(token === ' ') return; if(typeof delta === "undefined") return true; modeList.push({ delta: delta, mode: token }); })) return false; return [...new Set(modeList)]; }; var checkModes = (modes, allowedModes) => { if([...new Set(modes.map(a => a.mode))].some((mode) => { for(var i = 0; i <= allowedModes.length; i++) if(allowedModes[i] == mode) return false; return true; })) return false; return true; };