/** * api: * Commands(irc object, database object); * * example: * commands = require('./mysql/commands.js')(irc, db, { * bot_name : 'bot name', * currency: 'currency name' * }); */ //-------- Construct --------- function Commands(irc, db, options) { var __self = this; __self.irc = irc; __self.db = db; // config __self.config = options || {}; __self.config.bot_name = options.bot_name || ''; __self.config.currency = options.currency || 'coins'; __self.command_list = []; } //-------- Methods -------- Commands.prototype.start = function() { var __self = this, sql = 'SELECT * FROM commands'; __self.db.execute(sql, function(rows) { for (var i = 0; i < rows.length; i++) { __self.command_list.push(rows[i].command); } }); }; Commands.prototype.commands = function(data) { var __self = this, command_check = data[3].slice(1).charAt(0), command = data[3].slice(2); // check if potential command was called and match it with stored commands // if the bots name is used as a command, then display all of the available commands if(command_check === '!' && __self.command_list.indexOf(command) >= 0) { var sql = 'SELECT * FROM commands WHERE command = \'' + command + '\''; // get command info from database __self.db.execute(sql, function(rows) { // filter through command results for (var i = 0; i < rows.length; i++) { // match db command with called command if (rows[i].command = command) { __self.irc.emit('message',{message:'> '+rows[i].text, options:null}); } } }); } else if (command_check === '!' && command === __self.config.bot_name.toLowerCase()) { var commands = '> Commands: !' + __self.config.currency.toLowerCase() + ', !top, !rank, '; for (var i = 0; i < __self.command_list.length; i++) { if (i !== __self.command_list.length - 1) { commands += '!' + __self.command_list[i] + ', '; } else { commands += '!' + __self.command_list[i]; } } __self.irc.emit('message',{message:commands, options:null}); } }; Commands.prototype.add = function(command, text) { var __self = this; // escape string for sql sanity var txt = text.replace(/[\0\x08\x09\x1a\n\r"'\\\%]/g, function(char) { switch (char) { case "\0": return "\\0"; case "\x08": return "\\b"; case "\x09": return "\\t"; case "\x1a": return "\\z"; case "\n": return "\\n"; case "\r": return "\\r"; case "\"": case "'": case "\\": case "%": case ";": return "\\"+char; } }); var sql = 'INSERT INTO commands (command, text) VALUES (\''+command+'\', \''+txt+'\');'; // add the command to the database __self.db.execute(sql, function(data) { var message = '> Add Command: !' + command + ' has been added.'; __self.command_list.push(command); __self.irc.emit('message',{message:message, options:null}); }); }; Commands.prototype.remove = function(command) { var __self = this, index = __self.command_list.indexOf(command); if( index >= 0) { var sql = 'DELETE FROM commands WHERE command=\''+command+'\';'; // remove the command from the database __self.db.execute(sql, function(data) { var message = '> Delete Command: !' + command + ' has been removed.'; __self.command_list.splice(index, 1); __self.irc.emit('message',{message:message, options:null}); }); } }; module.exports = function(irc, db, options) { return new Commands(irc, db, options); };