3
0
mirror of https://github.com/reality/dbot.git synced 2024-11-24 04:49:25 +01:00

Merge branch 'master' of github.com:reality/depressionbot

This commit is contained in:
reality 2013-01-26 18:51:27 +00:00
commit 023c689f65
7 changed files with 112 additions and 35 deletions

View File

@ -11,8 +11,8 @@ var api = function(dbot) {
if(!_.has(this.profiles, server)){ if(!_.has(this.profiles, server)){
this.profiles[server] = {}; this.profiles[server] = {};
} }
this.profiles[server][primary] = {}; this.profiles[server][primary.toLowerCase()] = {};
_.defaults(this.profiles[server][primary], this.config.schema); _.defaults(this.profiles[server][primary.toLowerCase()], this.config.schema);
}, },
/** /**

View File

@ -5,7 +5,8 @@ var commands = function(dbot){
"~getprop": function(event){ "~getprop": function(event){
if(event.params[1]){ if(event.params[1]){
var res = dbot.db.profiles[event.server][event.user.toLowerCase()].profile[event.params[1]]; var primary = dbot.api.users.resolveUser(event.server, event.user);
var res = dbot.db.profiles[event.server][primary.toLowerCase()].profile[event.params[1]];
if(res){ if(res){
event.reply(res); event.reply(res);
} }
@ -18,13 +19,32 @@ var commands = function(dbot){
"~setprop": function(event){ "~setprop": function(event){
if(event.input[1] && event.input[2]){ if(event.input[1] && event.input[2]){
if(_.has(this.config.schema.profile, event.input[1])){ if(_.has(this.config.schema.profile, event.input[1])){
dbot.db.profiles[event.server][event.user.toLowerCase()].profile[event.input[1]] = event.input[2]; var primary = dbot.api.users.resolveUser(event.server, event.user);
dbot.db.profiles[event.server][primary.toLowerCase()].profile[event.input[1]] = event.input[2];
event.reply("Property set, maybe?"); event.reply("Property set, maybe?");
} }
else{ else{
event.reply("Invalid property. Go home."); event.reply("Invalid property. Go home.");
} }
} }
},
"~profile": function(event){
if(event.params[1]){
var primary = dbot.api.users.resolveUser(event.server, event.params[1]);
if(_.has(dbot.db.profiles[event.server], primary.toLowerCase())){
event.reply("http://"+dbot.config.web.webHost+":"+dbot.config.web.webPort+"/profile/"+event.server+"/"+primary.toLowerCase());
}
else{
event.reply("No profile found for "+event.params[1]);
}
}
else{
event.message = '~profile ' + event.user;
event.action = 'PRIVMSG';
event.params = event.message.split(' ');
dbot.instance.emit(event);
}
} }
}; };
commands['~setprop'].regex = [/~setprop ([^ ]+) (.+)/, 3]; commands['~setprop'].regex = [/~setprop ([^ ]+) (.+)/, 3];

View File

@ -17,5 +17,5 @@
"timezone": null "timezone": null
} }
}, },
"dependencies": [ "quotes", "command" ] "dependencies": [ "quotes", "users", "command" ]
} }

View File

@ -33,6 +33,10 @@ var profile = function(dbot) {
}); });
}); });
dbot.save(); dbot.save();
// Add API Hooks
dbot.api.command.addHook('~setaliasparent', this.api.renameProfile);
dbot.api.command.addHook('~mergeusers', this.api.mergeProfile);
}; };
}; };

View File

@ -28,11 +28,17 @@ var pages = function(dbot) {
var chanData = dbot.api.stats.getChanStats(connection, channel, ["freq"]); var chanData = dbot.api.stats.getChanStats(connection, channel, ["freq"]);
var chanFreq = []; var chanFreq = [];
for(var i=0; i <= 6; i++){
for(var j=0; j <= 23; j++){ if(chanData){
chanFreq.push(chanData.fields.freq.raw[i][j]); for(var i=0; i <= 6; i++){
for(var j=0; j <= 23; j++){
chanFreq.push(chanData.fields.freq.raw[i][j]);
}
} }
} }
else{
for (var i = 0; i < 168; i++) chanFreq[i] = 0;
}
var userData = { "active": [], "inactive": [], "offline": []}; var userData = { "active": [], "inactive": [], "offline": []};
var reply = dbot.api.stats.getChanUsersStats(connection, channel, [ var reply = dbot.api.stats.getChanUsersStats(connection, channel, [

View File

@ -71,27 +71,28 @@ block content
th Verbosity th Verbosity
th Mentions th Mentions
tbody tbody
for chan, key in stats if stats
if stats.hasOwnProperty(key) for chan, key in stats
tr if stats.hasOwnProperty(key)
td tr
a(href='/users/'+connection+'/'+encodeURIComponent(key)) td
#{key} a(href='/users/'+connection+'/'+encodeURIComponent(key))
span #{key}
if chan.online span
if chan.active.active if chan.online
span.label.label-success.tip(data-original-title="#{chan.active.ago}", data-placement="right") Active if chan.active.active
else span.label.label-success.tip(data-original-title="#{chan.active.ago}", data-placement="right") Active
span.label.label-important.tip(data-original-title="#{chan.active.ago}", data-placement="right") Inactive else
else span.label.label-important.tip(data-original-title="#{chan.active.ago}", data-placement="right") Inactive
span.label.tip(data-original-title="#{chan.active.ago}", data-placement="right") Offline else
td span.label.tip(data-original-title="#{chan.active.ago}", data-placement="right") Offline
#{chan.fields.lines.data} td
td #{chan.fields.lines.data}
#{chan.fields.words.data} td
td #{chan.fields.words.data}
#{chan.fields.lincent.data} td
td #{chan.fields.lincent.data}
#{chan.fields.wpl.data} td
td #{chan.fields.wpl.data}
#{chan.fields.in_mentions.data} td
#{chan.fields.in_mentions.data}

View File

@ -9,10 +9,16 @@ block content
.chart rect:hover { .chart rect:hover {
fill: #000; fill: #000;
} }
.yTicks {
stroke: #aaa;
stroke-width: 0.5;
}
script script
$(document).ready(function(){ $(document).ready(function(){
// d3.js Graph // d3.js Graph
var xlab = 30;
var chartw = 940;
var w = 5.595; var w = 5.595;
var h = 120; var h = 120;
@ -21,13 +27,22 @@ block content
.range([0,w]); .range([0,w]);
var y = d3.scale.linear() var y = d3.scale.linear()
.domain([0,100]) .domain([0,d3.max([#{chanFreq}])])
.rangeRound([0,h]); .rangeRound([0,h]);
var chart = d3.select($("#chanFreqChart")[0]).append("svg") var chart = d3.select($("#chanFreqChart")[0]).append("svg")
.attr("class", "chart") .attr("class", "chart")
.attr("width", w * #{chanFreqLen} - 1) .attr("width", w * #{chanFreqLen} - 1)
.attr("height", h); .attr("height", h + xlab);
chart.selectAll(".yTicks")
.data(y.ticks(5).slice(1,5))
.enter().append("svg:line")
.attr("class", "yTicks")
.attr("y1", function(d) { return -1 * y(d) + h; })
.attr("x1", 0)
.attr("y2", function(d) { return -1 * y(d) + h; })
.attr("x2", w * #{chanFreqLen})
chart.selectAll("rect") chart.selectAll("rect")
.data([#{chanFreq}]) .data([#{chanFreq}])
@ -36,7 +51,18 @@ block content
.attr("y", function(d) { return h - y(d) - .5; }) .attr("y", function(d) { return h - y(d) - .5; })
.attr("width", w) .attr("width", w)
.attr("height", function(d) { return y(d); }) .attr("height", function(d) { return y(d); })
.attr("title", function(d){ return y(d); }); .attr("title", function(d){ return d; });
chart.selectAll(".rule")
.data(y.ticks(5).slice(1,5))
.enter().append("text")
.attr("class", "rule")
.attr("y", function(d) { return -1 * y(d) + h; })
.attr("x", (chartw / 2)+(w/2))
.attr("text-anchor", "middle")
.attr("font-size", 10)
.attr("dy", 3)
.text(String);
chart.append("line") chart.append("line")
.attr("x1", 0) .attr("x1", 0)
@ -45,6 +71,26 @@ block content
.attr("y2", h - .5) .attr("y2", h - .5)
.style("stroke", "#000"); .style("stroke", "#000");
chart.selectAll("text.times")
.data(["0", "6", "12", "18","0", "6", "12", "18","0", "6", "12", "18","0", "6", "12", "18" ,"0", "6", "12", "18" ,"0", "6", "12", "18" ,"0", "6", "12", "18"])
.enter().append("text")
.attr("x", function(d, i){ return ((i * w * 6)+(w/2)); })
.attr("y", h + 10)
.attr("text-anchor", "middle")
.attr('class', 'name')
.attr("font-size", 10)
.text(String);
chart.selectAll("text.days")
.data(["Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"])
.enter().append("text")
.attr("x", function(d, i){ return ((i+0.5) * w * 24); })
.attr("y", h + 25)
.attr("text-anchor", "middle")
.attr('class', 'name')
.attr("font-size", 12)
.text(String);
// Allowing forcing of string stats data to sort as numeric // Allowing forcing of string stats data to sort as numeric
jQuery.extend( jQuery.fn.dataTableExt.oSort, { jQuery.extend( jQuery.fn.dataTableExt.oSort, {