Browse Source

Finalized !rank.

master
Brandon Cornejo 10 years ago
parent
commit
31c089a7a8
  1. 147
      lib/currency.js

147
lib/currency.js

@ -89,6 +89,10 @@ function Currency(irc, db, options) {
__self.coin_toggle = false;
__self.coin_toggle_msg = null;
__self.coin_toggle_timer = 180000;//milliseconds
__self.top_flood = [];
__self.top_response_reset = true;
__self.rank_flood = [];
__self.rank_response_reset = true;
// auction settings
__self.auction_status = false;
@ -151,12 +155,17 @@ Currency.prototype.commands = function (data) {
case 'on':
__self.config.chatterbonus = true;
__self.irc.emit('message', {message:__self.pre_text + 'Chatter bonus is on! Earn extra potatoes by being active in the chat.'});
break;
case 'off':
__self.config.chatterbonus = false;
__self.irc.emit('message', {message:__self.pre_text + 'Chatterbonus is now off. Potato deflation!'});
break;
case 'status':
if(!__self.config.chatterbonus) {
__self.irc.emit('message', {message:__self.pre_text + 'Chatterbonus is: Off'});
} else {
__self.irc.emit('message', {message:__self.pre_text + 'Chatterbonus is: On'});
}
break;
}
}
@ -359,6 +368,15 @@ Currency.prototype.commands = function (data) {
}
}
break;
case '!chatters':
__self.irc.emit('message', {message:__self.pre_text + 'Active chatters: ' + __self.active_list.toString()});
break;
case '!top':
__self.get_top(data[4]);
break;
case '!rank':
__self.get_rank(__self.irc.caller(data[0]).toLowerCase());
break;
}
// place a bet
@ -449,6 +467,126 @@ Currency.prototype.get_coins = function (caller) {
}
}
};
Currency.prototype.get_rank = function (data) {
var __self = this;
function do_work() {
__self.query_rank(__self.rank_flood, function (ranks, total) {
var response = '> Rank (of '+total+'): ';
for(var i = 0; i < ranks.length; i++) {
response += ranks[i]['user'] + ' ('+ranks[i]['@row_number:=@row_number+1']+'), ';
}
response = response.slice(1,-2);
__self.irc.emit('message', {message: response, timer: 1});
});
__self.rank_flood = [];
}
// add flood users to array
if (__self.rank_flood.indexOf(data) < 0) {
__self.rank_flood.push(data);
}
// clear timer on flood
if (__self.rank_response_reset) {
clearTimeout(__self.rank_response);
}
// check if flood has hit max requests or set timer
if (__self.rank_flood.length === __self.max_requests) {
do_work();
} else {
if (__self.rank_response_reset) {
__self.rank_response = setTimeout(function () {do_work();}, __self.coin_response_timer);
} else {
setTimeout(function () {do_work();}, __self.coin_response_timer);
}
}
};
Currency.prototype.get_top = function (data) {
var __self = this;
var limit = 0;
function do_work() {
var response = '';
__self.query_top(__self.top_flood, function (rows) {
for (var i = 0; i < rows.length; i++) {
// setup response
if (i !== rows.length - 1) {
response += '#'+(i+1)+': ' + rows[i].user + '('+rows[i].points+'), ';
} else {
response += '#'+(i+1)+': ' + rows[i].user + '('+rows[i].points+')';
}
}
__self.irc.emit('message', {message:'> Top Potato Farmers: ' + response});
});
// clear flood requests
__self.top_flood = [];
}
// check that we got a number
( isNaN(data) ) ? limit = 3 : limit = data;
// limit the number
if (limit > 6) limit = 3;
// add flood users to array
if (__self.top_flood.indexOf(limit) < 0) {
__self.top_flood.push(limit);
}
// clear timer on flood
if (__self.top_response_reset) {
clearTimeout(__self.top_response);
}
// check if flood has hit max requests or set timer
if (__self.top_flood.length === __self.max_requests) {
do_work();
} else {
if (__self.top_response_reset) {
__self.top_response = setTimeout(function () {do_work();}, __self.coin_response_timer);
} else {
setTimeout(function () {do_work();}, __self.coin_response_timer);
}
}
};
Currency.prototype.query_rank = function(data, callback) {
var __self = this;
var ranks = {}, total = 0;
var inner_sql = '', sql = 'set @row_number:=0;';
data.forEach(function(user) {
inner_sql += "user='"+user+"' or";
});
// remove last or
inner_sql=inner_sql.slice(0,-3);
sql += "select * from (select user, points, @row_number:=@row_number+1 from viewers order by points desc) as rank where ("+inner_sql+");select count(1) from viewers where points > 0;";
__self.db.execute(sql, function(rows) {
total = rows[2][0]['count(1)'];
ranks = rows[1];
callback(ranks, total);
});
};
Currency.prototype.query_top = function (data, callback) {
var __self = this, sql = '';
// build sql conditions
sql = 'SELECT * FROM viewers ORDER BY points DESC LIMIT ' + data + ';';
__self.db.execute(sql, function(rows) {
callback(rows);
});
};
Currency.prototype.query_coins = function (data, callback) {
var __self = this, sql = '';
@ -503,11 +641,11 @@ Currency.prototype.query_coins = function (data, callback) {
} else {
rows[0].user = rows[0].user.charAt(0).toUpperCase() + rows[0].user.slice(1);
}
}
}
callback(rows);
});
};
/**
* ============================================
* HANDOUT CURRENCY
@ -653,7 +791,6 @@ Currency.prototype.handout_coins = function () {
}
} else {
__self.viewer_list = [];
__self.active_list = [];
}
});

Loading…
Cancel
Save