mirror of
				https://github.com/reality/dbot.git
				synced 2025-10-31 03:47:38 +01:00 
			
		
		
		
	 f8d4896eb6
			
		
	
	
		f8d4896eb6
		
	
	
	
	
		
			
			* May now add property 'access' to commands specifying 'moderator' or 'admin' level access * Add 'moderators' key to config * Convert commands in admin module to use command marshalling listener rather than its own
		
			
				
	
	
		
			159 lines
		
	
	
		
			5.1 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			159 lines
		
	
	
		
			5.1 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
| /**
 | |
|  * Module Name: Command
 | |
|  * Description: An essential module which maps PRIVMSG input to an appropriate
 | |
|  * command and then runs that command, given the user isn't banned from or
 | |
|  * ignoring that command.
 | |
|  */
 | |
| var command = function(dbot) {
 | |
|     /**
 | |
|      * Is user banned from using command?
 | |
|      */
 | |
|     var isBanned = function(user, command) {
 | |
|         var banned = false;
 | |
|         if(dbot.db.bans.hasOwnProperty(command)) {
 | |
|             if(dbot.db.bans[command].include(user) || dbot.db.bans['*'].include(user)) {
 | |
|                 banned = true;
 | |
|             }
 | |
|         }
 | |
|         return banned;
 | |
|     };
 | |
| 
 | |
|     /**
 | |
|      * Does the user have the correct access level to use the command?
 | |
|      */
 | |
|     var hasAccess = function(user, command) {
 | |
|         var access = true;
 | |
|         var accessNeeded = dbot.commands[command].access;
 | |
| 
 | |
|         if(accessNeeded == 'admin') {
 | |
|             if(!dbot.config.admins.include(user)) {
 | |
|                 access = false;
 | |
|             }
 | |
|         } else if(accessNeeded == 'moderator') {
 | |
|             if(!dbot.config.moderators.include(user) &&
 | |
|                     !dbot.config.admins.include(user)) {
 | |
|                 access = false;
 | |
|             }
 | |
|         }
 | |
|         console.log(accessNeeded);
 | |
|         console.log(user);
 | |
| 
 | |
|         return access;
 | |
|     };
 | |
| 
 | |
|     /**
 | |
|      * Is user ignoring command?
 | |
|      */
 | |
|     var isIgnoring = function(user, command) {
 | |
|         var module = dbot.commandMap[command];
 | |
|         var ignoring = false;
 | |
|         if(dbot.db.ignores.hasOwnProperty(user) && dbot.db.ignores[user].include(module)) {
 | |
|             ignoring = true;
 | |
|         }
 | |
|         return ignoring;
 | |
|     };
 | |
| 
 | |
|     /**
 | |
|      * Apply Regex to event message, store result. Return false if it doesn't
 | |
|      * apply.
 | |
|      */
 | |
|     var applyRegex = function(commandName, event) {
 | |
|         var applies = false;
 | |
|         if(dbot.commands[commandName].hasOwnProperty('regex')) {
 | |
|             var cRegex = dbot.commands[commandName].regex;
 | |
|             var q = event.message.valMatch(cRegex[0], cRegex[1]);
 | |
|             if(q) {
 | |
|                 applies = true;
 | |
|                 event.input = q;
 | |
|             }
 | |
|         } else {
 | |
|             applies = true;
 | |
|         }
 | |
|         return applies;
 | |
|     };
 | |
| 
 | |
|     return {
 | |
|         'name': 'command',
 | |
|         'ignorable': false,
 | |
| 
 | |
|         'commands': {
 | |
|             '~usage': function(event) {
 | |
|                 var commandName = event.params[1];
 | |
|                 if(dbot.usage.hasOwnProperty(commandName)) {
 | |
|                     event.reply(dbot.t('usage', {
 | |
|                         'command': commandName,
 | |
|                         'usage': dbot.usage[commandName]
 | |
|                     }));
 | |
|                 } else {
 | |
|                     event.reply(dbot.t('no_usage_info', { 
 | |
|                         'command': commandName 
 | |
|                     }));
 | |
|                 }
 | |
|             },
 | |
| 
 | |
|             '~help': function(event) {
 | |
|                 var moduleName = event.params[1];
 | |
|                 if(!dbot.modules.hasOwnProperty(moduleName)) {
 | |
|                     var moduleName = dbot.commandMap[moduleName]; 
 | |
|                 }
 | |
| 
 | |
|                 if(moduleName && dbot.config[moduleName].hasOwnProperty('help')) {
 | |
|                     var help = dbot.config[moduleName].help;
 | |
|                     event.reply(dbot.t('help_link', {
 | |
|                         'module': moduleName,
 | |
|                         'link': help
 | |
|                     }));
 | |
|                 } else {
 | |
|                     if(!moduleName) {
 | |
|                         moduleName = event.params[1];
 | |
|                     }
 | |
|                     event.reply(dbot.t('no_help', { 'module': moduleName }))
 | |
|                 }
 | |
|             }
 | |
|         },
 | |
| 
 | |
|         /**
 | |
|          * Run the appropriate command given the input.
 | |
|          */
 | |
|         'listener': function(event) {
 | |
|             var commandName = event.params[0];
 | |
|             if(!dbot.commands.hasOwnProperty(commandName)) {
 | |
|                 commandName = '~';
 | |
|             }
 | |
| 
 | |
|             if(isBanned(event.user, commandName)) {
 | |
|                 event.reply(dbot.t('command_ban', {'user': event.user})); 
 | |
|             } else {
 | |
|                 if(!isIgnoring(event.user, commandName) && hasAccess(event.user, commandName)) {
 | |
|                     if(applyRegex(commandName, event)) {
 | |
|                         try {
 | |
|                             dbot.commands[commandName](event);
 | |
|                         } catch(err) {
 | |
|                             if(dbot.config.debugMode == true) {
 | |
|                                 event.reply('- Error in ' + commandName + ':');
 | |
|                                 event.reply('- Message: ' + err);
 | |
|                                 event.reply('- Top of stack: ' + err.stack.split('\n')[1].trim());
 | |
|                             }
 | |
|                         }
 | |
|                         dbot.save();
 | |
|                     } else {
 | |
|                         if(commandName !== '~') {
 | |
|                             if(dbot.usage.hasOwnProperty(commandName)){
 | |
|                                 event.reply('Usage: ' + dbot.usage[commandName]);
 | |
|                             } else {
 | |
|                                 event.reply(dbot.t('syntax_error'));
 | |
|                             }
 | |
|                         }
 | |
|                     }
 | |
|                 }
 | |
|             }
 | |
|         },
 | |
|         'on': 'PRIVMSG'
 | |
|     };
 | |
| };
 | |
| 
 | |
| exports.fetch = function(dbot) {
 | |
|     return command(dbot);
 | |
| };
 | |
| 
 |