forked from GitHub/dbot
basic sstats module with ~lines and ~clines because i love sundown
This commit is contained in:
parent
96db56a25c
commit
d7d8c34167
45
modules/sstats/api.js
Normal file
45
modules/sstats/api.js
Normal file
@ -0,0 +1,45 @@
|
||||
var _ = require('underscore')._,
|
||||
databank = require('databank');
|
||||
|
||||
var api = function(dbot) {
|
||||
var api = {
|
||||
'getUserStats': function(id, callback) {
|
||||
this.db.read('user_stats', id, function(err, uStats) {
|
||||
callback(uStats);
|
||||
});
|
||||
},
|
||||
|
||||
'createUserStats': function(id, callback) {
|
||||
var uStats = {
|
||||
'id': id,
|
||||
'lines': 0,
|
||||
'channels': {}
|
||||
};
|
||||
this.db.save('user_stats', id, uStats, function(err, uStats) {
|
||||
callback(uStats);
|
||||
});
|
||||
},
|
||||
|
||||
'getChannelStats': function(id, callback) {
|
||||
this.db.read('channel_stats', id, function(err, cStats) {
|
||||
callback(cStats);
|
||||
});
|
||||
},
|
||||
|
||||
'createChannelStats': function(id, callback) {
|
||||
var cStats = {
|
||||
'id': id,
|
||||
'lines': 0
|
||||
};
|
||||
this.db.save('channel_stats', id, cStats, function(err, cStats) {
|
||||
callback(cStats);
|
||||
});
|
||||
}
|
||||
};
|
||||
|
||||
return api;
|
||||
};
|
||||
|
||||
exports.fetch = function(dbot) {
|
||||
return api(dbot);
|
||||
};
|
50
modules/sstats/commands.js
Normal file
50
modules/sstats/commands.js
Normal file
@ -0,0 +1,50 @@
|
||||
var _ = require('underscore')._;
|
||||
|
||||
var commands = function(dbot) {
|
||||
var commands = {
|
||||
'~lines': function(event) {
|
||||
if(event.params[1]) {
|
||||
dbot.api.users.resolveUser(event.server, event.user, function(user) {
|
||||
if(user) { // I disgust me
|
||||
event.rUser = user;
|
||||
delete event['params'];
|
||||
commands['~lines'](event);
|
||||
} else {
|
||||
event.reply(dbot.t('sstats_unknown_user'));
|
||||
}
|
||||
});
|
||||
} else {
|
||||
this.api.getUserStats(event.rUser.id, function(uStats) {
|
||||
if(uStats) {
|
||||
var output = dbot.t('sstats_tlines', {
|
||||
'user': event.rUser.primaryNick,
|
||||
'lines': uStats.lines
|
||||
});
|
||||
if(event.rChannel && _.has(uStats.channels, event.rChannel.id)) {
|
||||
output += dbot.t('sstats_uclines', {
|
||||
'channel': event.channel,
|
||||
'lines': uStats.channels[event.rChannel.id].lines
|
||||
});
|
||||
}
|
||||
event.reply(output);
|
||||
} else {
|
||||
event.reply(dbot.t('sstats_noustats'));
|
||||
}
|
||||
});
|
||||
}
|
||||
},
|
||||
|
||||
'~clines': function(event) {
|
||||
if(!event.cStats) return;
|
||||
event.reply(dbot.t('sstats_clines', {
|
||||
'channel': event.channel,
|
||||
'lines': event.cStats.lines
|
||||
}));
|
||||
}
|
||||
};
|
||||
return commands;
|
||||
};
|
||||
|
||||
exports.fetch = function(dbot) {
|
||||
return commands(dbot);
|
||||
};
|
4
modules/sstats/config.json
Normal file
4
modules/sstats/config.json
Normal file
@ -0,0 +1,4 @@
|
||||
{
|
||||
"dbType": "redis",
|
||||
"dependencies": [ "users" ]
|
||||
}
|
60
modules/sstats/sstats.js
Normal file
60
modules/sstats/sstats.js
Normal file
@ -0,0 +1,60 @@
|
||||
/**
|
||||
* Module Name: sstats
|
||||
* Description: Simple Stats, in the absence of good ones.
|
||||
*/
|
||||
var _ = require('underscore')._;
|
||||
|
||||
var sstats = function(dbot) {
|
||||
this.listener = function(event) {
|
||||
event.cStats.lines++;
|
||||
event.uStats.lines++;
|
||||
if(!_.has(event.uStats.channels, event.rChannel.id)) {
|
||||
event.uStats.channels[event.rChannel.id] = {
|
||||
'lines': 1
|
||||
};
|
||||
} else {
|
||||
event.uStats.channels[event.rChannel.id].lines++;
|
||||
}
|
||||
this.db.save('channel_stats', event.cStats.id, event.cStats, function() {});
|
||||
this.db.save('user_stats', event.uStats.id, event.uStats, function() {});
|
||||
}.bind(this);
|
||||
this.on = 'PRIVMSG';
|
||||
|
||||
this.onLoad = function() {
|
||||
// Preload user stats
|
||||
dbot.instance.addPreEmitHook(function(event, callback) {
|
||||
if(!event.rUser) return callback();
|
||||
this.api.getUserStats(event.rUser.id, function(uStats) {
|
||||
if(uStats) {
|
||||
event.uStats = uStats;
|
||||
callback();
|
||||
} else {
|
||||
this.api.createUserStats(event.rUser.id, function(uStats) {
|
||||
event.uStats = uStats;
|
||||
callback();
|
||||
});
|
||||
}
|
||||
}.bind(this));
|
||||
}.bind(this));
|
||||
|
||||
// Preload channel stats
|
||||
dbot.instance.addPreEmitHook(function(event, callback) {
|
||||
if(!event.rChannel) return callback();
|
||||
this.api.getChannelStats(event.rChannel.id, function(cStats) {
|
||||
if(cStats) {
|
||||
event.cStats = cStats;
|
||||
callback();
|
||||
} else {
|
||||
this.api.createChannelStats(event.rChannel.id, function(cStats) {
|
||||
event.cStats = cStats;
|
||||
callback();
|
||||
});
|
||||
}
|
||||
}.bind(this));
|
||||
}.bind(this));
|
||||
}.bind(this);
|
||||
};
|
||||
|
||||
exports.fetch = function(dbot) {
|
||||
return new sstats(dbot);
|
||||
};
|
17
modules/sstats/strings.json
Normal file
17
modules/sstats/strings.json
Normal file
@ -0,0 +1,17 @@
|
||||
{
|
||||
"sstats_unknown_user": {
|
||||
"en": "Unknown user."
|
||||
},
|
||||
"sstats_tlines": {
|
||||
"en": "{user} has posted {lines} lines"
|
||||
},
|
||||
"sstats_uclines": {
|
||||
"en": " ({lines} in {channel})"
|
||||
},
|
||||
"sstats_noustats": {
|
||||
"en": "No stats recorded for this user."
|
||||
},
|
||||
"sstats_clines": {
|
||||
"en": "{lines} lines posted in {channel}."
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue
Block a user