var _ = require('underscore')._; var api = function(dbot) { return { /** * Does the user have the correct access level to use the command? */ 'hasAccess': function(user, channel, command, callback) { var accessNeeded = dbot.commands[command].access; if(accessNeeded == 'admin' || accessNeeded == 'moderator' || accessNeeded == 'power_user' || accessNeeded == 'voice') { var allowedNicks = dbot.config.admins; if(accessNeeded == 'moderator') allowedNicks = _.union(allowedNicks, dbot.config.moderators); if(accessNeeded == 'power_user') { allowedNicks = _.union(allowedNicks, dbot.config.moderators); allowedNicks = _.union(allowedNicks, dbot.config.power_users); } if(accessNeeded == 'voice') { allowedNicks = _.union(allowedNicks, dbot.config.moderators); allowedNicks = _.union(allowedNicks, dbot.config.power_users); allowedNicks = _.union(allowedNicks, _.chain(channel.nicks) .filter(function(nick) { return nick.op == true || nick.voice == true; }) .pluck('name') .value()); } if(!_.include(allowedNicks, user.primaryNick)) { callback(false); } else { if(_.has(dbot.modules, 'nickserv') && this.config.useNickserv == true) { dbot.api.nickserv.auth(user.server, user.currentNick, function(result, primary) { if(result == true && primary == user.primaryNick) { callback(true); } else { callback(false); } }); } else { callback(true); } } } else { callback(true); } }, /** * Apply Regex to event message, store result. Return false if it doesn't * apply. */ 'applyRegex': function(commandName, event) { var applies = false; event.message = event.message.substring(1); if(_.has(dbot.commands[commandName], 'regex')) { var cRegex = dbot.commands[commandName].regex; if(_.isArray(cRegex) && cRegex.length === 2) { var q = event.message.valMatch(cRegex[0], cRegex[1]); if(q) { applies = true; event.input = q; } } else { var q = event.message.match(cRegex); if(q) { applies = true; event.input = q; } } } else { applies = true; } return applies; } }; }; exports.fetch = function(dbot) { return api(dbot); };