From ccf9ff553450e401e8b1268570fd00bae4c410f4 Mon Sep 17 00:00:00 2001 From: Brandon Cornejo Date: Fri, 28 Mar 2014 08:44:47 -0500 Subject: [PATCH] Custom commands working. addcmd/removecmd --- .gitignore | 12 +++++++- lib/commands.js | 66 +++++++++++++++++++++++++++++++++++++++--- lib/currency.js | 65 +++++++++++++++++++++++++++-------------- lib/initialize.js | 2 +- lib/mysql.js | 4 +-- web/public/css/app.css | 20 +++++++++++++ 6 files changed, 139 insertions(+), 30 deletions(-) create mode 100644 web/public/css/app.css diff --git a/.gitignore b/.gitignore index fe7f44f..2da2bb8 100644 --- a/.gitignore +++ b/.gitignore @@ -180,4 +180,14 @@ JsonParser.js KarmaBot.js Knowledge_Bot.js WizardBot.js -XBucksBot.js \ No newline at end of file +XBucksBot.js + +#me me me +shaneomad.js +pyrionflax.js +testbot.js +*.png +web/public/browserconfig.xml +node_modules/.bin +web/public/favicon.ico +web/public/statistics diff --git a/lib/commands.js b/lib/commands.js index 39e8593..69a8330 100644 --- a/lib/commands.js +++ b/lib/commands.js @@ -51,14 +51,17 @@ Commands.prototype.commands = function(data) { for (var i = 0; i < rows.length; i++) { // match db command with called command if (rows[i].command = command) { + /* // display based on viewer auth if (rows[i].auth === 1) { - __self.irc.emit('message',{message:rows[i].text, options:{caller: __self.irc.caller(data[0]), auth: 1}}); + __self.irc.emit('message',{message:'> '+rows[i].text, options:{caller: __self.irc.caller(data[0]), auth: 1}}); break; } else if (rows[i].auth === 0) { - __self.irc.emit('message',{message:rows[i].text, options:null}); + __self.irc.emit('message',{message:'> '+rows[i].text, options:null}); break; } + */ + __self.irc.emit('message',{message:'> '+rows[i].text, options:null}); } } }); @@ -71,10 +74,65 @@ Commands.prototype.commands = function(data) { commands += '!' + __self.command_list[i]; } } - __self.irc.emit('message',{message:commands, options:{caller: __self.irc.caller(data[0]), auth: 1}}); + console.log("!!!!! Right before EMIT"); + __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 "%": + 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); -}; \ No newline at end of file +}; diff --git a/lib/currency.js b/lib/currency.js index ac2d234..4a4f3be 100644 --- a/lib/currency.js +++ b/lib/currency.js @@ -63,11 +63,12 @@ var https = require('https'), utils = require('./utils.js'); //-------- Construct --------- -function Currency(irc, db, options) { +function Currency(irc, db, commands, options) { var __self = this; __self.irc = irc; __self.db = db; + __self.custom_commands = commands; // config __self.config = options || {}; @@ -136,6 +137,10 @@ function Currency(irc, db, options) { // high score table __self.score_bet_pool = 0; __self.score_bet_single = 0; + + // commands add/rem settings + __self.command_add_string = options.add_command || 'addcmd'; + __self.command_remove_string = options.remove_command || 'removecmd'; } //-------- Methods --------- @@ -173,6 +178,20 @@ Currency.prototype.commands = function (data) { // broadcaster only commands if (broadcaster_bot_initiated || (__self.config.modpowers && moderator_initiated)) { + //add / remove custom commands + if (data[4] === __self.command_add_string && data[5] !== undefined && data[6] !== undefined) { + var command = data[5]; + var text = data.slice(6); + text = text.join(' '); + + __self.custom_commands.add(command, text); + } + if (data[4] === __self.command_remove_string && data[5] !== undefined) { + var command = data[5]; + + __self.custom_commands.remove(command); + } + //open / close auction system if (data[4] === 'auction') { switch (data[5]) { @@ -1551,8 +1570,17 @@ Currency.prototype.bets = function(status, data) { if (__self.bets_viewers.length > 0) { __self.irc.emit('message', {message:__self.pre_text + 'Betting is now closed'}); for (var i = 0; i < __self.bets_board.length; i++) { - __self.irc.emit('message', {message:'+ ' + __self.bets_board[i].name + ' with ' + __self.bets_board[i].num + ' bets totaling ' + __self.bets_board[i].total}); + if(parseInt(__self.bets_board[i].total,10) > parseInt(__self.score_bet_pool, 10)) { + __self.score_bet_pool = __self.bets_board[i].total; + sql = 'INSERT INTO highscores (`value`, `name`) VALUES (\'' + __self.bets_board[i].total + '\', \'bet_pool\') ON DUPLICATE KEY UPDATE value=values(value);'; + __self.db.execute(sql, function() {}); + __self.irc.emit('message', {message:'+ ' + __self.bets_board[i].name + ' with ' + __self.bets_board[i].num + ' bets totaling ' + __self.bets_board[i].total + '. New record set!!'}); + } else { + __self.irc.emit('message', {message:'+ ' + __self.bets_board[i].name + ' with ' + __self.bets_board[i].num + ' bets totaling ' + __self.bets_board[i].total}); + } } + + // } else { __self.irc.emit('message', {message:__self.pre_text + 'Betting closed, no bets were placed'}); } @@ -1581,15 +1609,7 @@ Currency.prototype.bets = function(status, data) { for (var i = 0; i < __self.bets_board.length; i++) { if (data == __self.bets_board[i].name) { __self.bets_award_winner(__self.bets_board[i]); - if(__self.bets_board[i].total > __self.score_bet_pool) { - sql = 'UPDATE highscores SET value = ' + __self.bets_board[i].total + ' WHERE name = \'bet_pool\''; - __self.db.execute(sql, function() { - __self.score_bet_pool = __self.bets_board[i].total; - __self.irc.emit('message', {message:__self.pre_text + 'Betting payed out to ' + data + '. New record set!!'}); - }); - } else { - __self.irc.emit('message', {message:__self.pre_text + 'Betting payed out to ' + data}); - } + __self.irc.emit('message', {message:__self.pre_text + 'Betting payed out to ' + data}); } } } else { @@ -1646,12 +1666,22 @@ Currency.prototype.collect_bets = function (caller, bet, amount) { for (var i = 0; i < __self.bets_flood.length; i++) { bet = __self.bets_viewers[__self.bets_flood[i]]; multi_response[bet.bet].push(bet.viewer + ' (' + bet.amount + ')'); + + // check for hiscore and set db appropriately + if ( parseInt(bet.amount, 10) > parseInt(__self.score_bet_single, 10) ) { + sql = 'INSERT INTO highscores (`value`, `user`, `name`) VALUES (\'' + amount + '\', \'' + caller + '\', \'bet_single\') ON DUPLICATE KEY UPDATE user=values(user), value=values(value);'; + __self.db.execute(sql, function() { + __self.score_bet_single = amount; + __self.irc.emit('message', {message:__self.pre_text + ' ' + caller + ' set new record bet at ' + amount + '!'}); + }); + } } for (var i = 0; i < __self.bets_board.length; i++) { if (multi_response[i].length > 0) { __self.irc.emit('message', {message:'New bets for ' + __self.bets_board[i].name + ': ' + multi_response[i].join(', '), timer: 1}); } } + } // clear flood requests @@ -1664,15 +1694,6 @@ Currency.prototype.collect_bets = function (caller, bet, amount) { amount = Math.min(amount, rows[i].points); } - // check for hiscore and set db appropriately - if(amount > __self.score_bet_single) { - sql = 'UPDATE highscores SET value = ' + amount + ' WHERE name = \'bet_single\''; - __self.db.execute(sql, function() { - __self.score_bet_single = amount; - __self.irc.emit('message', {message:__self.pre_text + ' ' + caller + ' set new record bet at ' + amount + '!'}); - }); - } - if (__self.bets_viewers.length > 0) { for (var i = 0; i < __self.bets_viewers.length; i++) { if (__self.bets_viewers[i].viewer === caller) { @@ -1779,6 +1800,6 @@ Currency.prototype.bets_award_winner = function (winner) { __self.bets_total = 0; }; -module.exports = function (irc, db, options) { - return new Currency(irc, db, options); +module.exports = function (irc, db, commands, options) { + return new Currency(irc, db, commands, options); }; diff --git a/lib/initialize.js b/lib/initialize.js index 98d9d57..970c635 100644 --- a/lib/initialize.js +++ b/lib/initialize.js @@ -31,7 +31,7 @@ exports.initialize = function(options) { bot_name : config.twitch.bot.name, currency : config.currency.name }); - currency = require('./currency.js')(irc, db, { + currency = require('./currency.js')(irc, db, commands, { currency : config.currency.name, payrate : config.currency.payrate, subscribers : config.twitch.subscribers, diff --git a/lib/mysql.js b/lib/mysql.js index b3f5b33..d13bd7a 100644 --- a/lib/mysql.js +++ b/lib/mysql.js @@ -49,11 +49,11 @@ DB.prototype.start = function() { // table structure for table highscores scores += 'CREATE TABLE IF NOT EXISTS `highscores` ('; scores += '`name` varchar(64) COLLATE utf8_unicode_ci NOT NULL,'; + scores += '`user` varchar(64) COLLATE utf8_unicode_ci,'; scores += '`value` int(11) NOT NULL,'; + scores += '`date` timestamp ON UPDATE current_timestamp,'; scores += 'PRIMARY KEY (`name`)'; scores += ') ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;'; - //scores += 'INSERT INTO `highscores` (`name`, `value`) VALUES(\'bet_single\', 0);'; - //scores += 'INSERT INTO `highscores` (`name`, `value`) VALUES(\'bet_pool\', 0);'; // execute sql, create tables if they don't exist __self.execute(commands + '; ' + viewers + '; ' + scores, function(){}); diff --git a/web/public/css/app.css b/web/public/css/app.css new file mode 100644 index 0000000..da15755 --- /dev/null +++ b/web/public/css/app.css @@ -0,0 +1,20 @@ +.uk-navbar-nav > li { + display: inline-block; + float: none; +} + +.uk-navbar-nav > li > a > img { + width: 20px; +} + +.flip { + -moz-transform: scaleX(-1); + -o-transform: scaleX(-1); + -webkit-transform: scaleX(-1); + transform: scaleX(-1); + filter: FlipH; + -ms-filter: "FlipH"; +} +.uk-search-field, .uk-search-field::-moz-placeholder { + color: #FFFFFF; +}