dbot/modules/report/pages.js

143 lines
5.0 KiB
JavaScript
Raw Normal View History

2013-08-24 19:39:04 +02:00
var _ = require('underscore')._,
2013-08-29 23:12:45 +02:00
async = require('async'),
moment = require('moment-timezone');
2013-07-06 20:45:21 +02:00
var pages = function(dbot) {
var pages = {
'/notify': function(req, res) {
2013-08-31 14:17:06 +02:00
var server = req.user.server,
2013-08-24 19:39:04 +02:00
userCount = {},
2013-08-24 22:55:57 +02:00
users = [],
channelCount = {};
2013-08-24 19:39:04 +02:00
this.db.scan('notifies', function(notify) {
if(!_.has(userCount, notify.user)) {
2013-08-24 22:55:57 +02:00
userCount[notify.user] = 0;
2013-08-24 19:39:04 +02:00
}
2013-08-24 22:55:57 +02:00
if(!_.has(channelCount, notify.channel)) {
channelCount[notify.channel] = 0;
}
userCount[notify.user]++;
channelCount[notify.channel]++;
2013-08-24 19:39:04 +02:00
}, function() {
userCount = _.map(userCount, function(value, key) {
return {
'id': key,
'count': value
}
});
async.eachSeries(userCount, function(userCount, next) {
dbot.api.users.getUser(userCount.id, function(user) {
2013-08-24 19:56:11 +02:00
if(user) {
userCount['name'] = user.primaryNick;
users.push(userCount);
}
2013-08-24 19:58:17 +02:00
next();
2013-08-24 19:39:04 +02:00
});
}, function() {
res.render('channels', {
'server': server,
'users': users,
2013-08-24 22:55:57 +02:00
'channels': channelCount
2013-08-24 19:39:04 +02:00
});
});
2013-07-06 20:45:21 +02:00
});
},
'/notify/:server/missing': function(req, res) {
2013-08-17 23:04:42 +02:00
var server = req.params.server,
user = req.user,
notifies = this.pending[user.id];
2013-08-29 23:12:45 +02:00
notifies = _.sortBy(notifies, 'time').reverse();
if(req.user.timezone) {
_.each(notifies, function(v, k) {
v.time = moment(v.time).tz(req.user.timezone);
});
}
2013-08-17 23:04:42 +02:00
res.render('missing_notifies', {
'user': user.primaryNick,
2013-08-29 23:12:45 +02:00
'notifies': notifies
2013-08-17 23:04:42 +02:00
});
if(_.has(dbot.modules, 'log')) {
dbot.api.log.log(server, user.primaryNick,
'Checked their missing notifications.');
}
2013-08-17 23:04:42 +02:00
},
2013-08-31 14:17:06 +02:00
'/notify/:item': function(req, res) {
var server = req.user.server,
2013-07-06 20:45:21 +02:00
notifies = [];
2013-08-24 19:53:16 +02:00
if(req.params.item.charAt(0) == '#') {
var channel = req.params.item;
this.db.search('notifies', {
'server': server,
'channel': channel
}, function(notify) {
notifies.push(notify);
}, function(err) {
var pNickCache = {};
async.eachSeries(notifies, function(notify, next) {
if(!_.has(pNickCache, notify.user)) {
dbot.api.users.getUser(notify.user, function(user) {
pNickCache[notify.user] = user.primaryNick;
notify.user = user.primaryNick;
next();
});
} else {
notify.user = pNickCache[notify.user];
2013-08-24 19:39:04 +02:00
next();
2013-08-24 19:53:16 +02:00
}
}, function() {
2013-08-29 23:12:45 +02:00
notifies = _.sortBy(notifies, 'time').reverse();
if(req.user.timezone) {
_.each(notifies, function(v, k) {
v.time = moment(v.time).tz(req.user.timezone);
});
}
2013-08-24 19:53:16 +02:00
res.render('notifies', {
'server': server,
2013-08-29 23:12:45 +02:00
'notifies': notifies
2013-08-24 19:39:04 +02:00
});
});
2013-07-06 20:45:21 +02:00
});
2013-08-24 19:53:16 +02:00
} else {
var username = req.params.item;
dbot.api.users.resolveUser(server, username, function(user) {
this.db.search('notifies', {
'user': user.id
}, function(notify) {
notify.user = user.primaryNick;
notifies.push(notify);
}, function() {
2013-08-29 23:12:45 +02:00
notifies = _.sortBy(notifies, 'time').reverse();
if(req.user.timezone) {
_.each(notifies, function(v, k) {
v.time = moment(v.time).tz(req.user.timezone);
});
}
2013-08-24 19:53:16 +02:00
res.render('notifies', {
'server': server,
2013-08-29 23:12:45 +02:00
'notifies': notifies
2013-08-24 19:53:16 +02:00
});
});
}.bind(this));
}
2013-07-06 20:45:21 +02:00
}
};
return pages;
2013-07-06 20:45:21 +02:00
};
exports.fetch = function(dbot) {
return pages(dbot);
};