var _ = require('underscore')._;

var api = function(dbot) {
    return {
        'isBanned': function(user, command) {
            var banned = false;
            if(_.has(dbot.db.bans, user)) {
                if(_.include(dbot.db.bans[user], command) ||
                   _.include(dbot.db.bans[user], dbot.commands[command].module) ||
                   _.include(dbot.db.bans[user], '*')) {
                    banned = true;
                }
            }
            return banned;
        },

        /**
         * Does the user have the correct access level to use the command?
         */
        'hasAccess': function(user, command) {
            var access = true;
            var accessNeeded = dbot.commands[command].access;

            if(accessNeeded == 'admin') {
                if(!_.include(dbot.config.admins, user)) {
                    access = false;
                }
            } else if(accessNeeded == 'moderator') {
                if(!_.include(dbot.config.moderators, user) && 
                        !_.include(dbot.config.admins, user)) {
                    access = false;
                }
            }

            return access;
        },

        /**
         * Is item (user or channel) ignoring command?
         */
        'isIgnoring': function(item, command) {
            var module = dbot.commands[command].module;
            return (_.has(dbot.db.ignores, item) &&
                (_.include(dbot.db.ignores[item], module) ||
                 _.include(dbot.db.ignores[item], '*')));
        },

        /**
         * Apply Regex to event message, store result. Return false if it doesn't
         * apply.
         */
        'applyRegex': function(commandName, event) {
            var applies = false;
            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 if {
                    var q = event.message.match(cRegex);
                    if(q) {
                        applies = true;
                        event.input = q;
                    ]
                }
            } else {
                applies = true;
            }
            return applies;
        },

        'addHook': function(command, callback) {
            console.log('adding hook');
            if(_.has(dbot.commands, command)) {
                if(!_.has(dbot.commands[command], 'hooks')) {
                    dbot.commands[command].hooks = [];
                }
                dbot.commands[command].hooks.push(callback);
            }
        }
    };
};

exports.fetch = function(dbot) {
    return api(dbot);
};

@@ -2170,19 +2170,16 @@
  %7D else 
-if 
 %7B%0A      
@@ -2358,17 +2358,17 @@
         
-%5D
+%7D
 %0A       

Fix broken syntax in command changes [#359]