dbot/modules/users/api.js

132 lines
4.5 KiB
JavaScript
Raw Normal View History

var _ = require('underscore')._;
var api = function(dbot) {
var escapeRegexen = function(str) {
return (str+'').replace(/([.?*+^$[\]\\(){}|-])/g, "\\$1");
};
var api = {
'resolveUser': function(server, nick, useLowerCase) {
var user = nick;
if(this.api.isPrimaryUser(nick)) {
return user;
} else {
this.db.search('user', { 'server': server }, function(user) {
if(_.include(user.aliases, nick)) user = user.primaryNick;
}.bind(this), function(err) {
if(err instanceof NotImplementedError) {
// QQ
}
});
return user;
}
/** TODO: Re-add lowercase support
if(!useLowerCase) {
if(!_.include(knownUsers.users, nick) && _.has(knownUsers.aliases, nick)) {
user = knownUsers.aliases[nick];
}
} else {
// this is retarded
user = user.toLowerCase();
var toMatch = new RegExp("^" + escapeRegexen(user) + "$", "i");
var resolvedUser = _.find(knownUsers.users, function(nick) {
return nick.match(toMatch) !== null;
}, this);
if(!resolvedUser) {
resolvedUser = _.find(knownUsers.aliases, function(nick, alias) {
2013-01-16 00:32:45 +01:00
if(alias.match(toMatch) !== null) return nick;
}, this);
2013-01-16 21:21:28 +01:00
if(!_.isUndefined(resolvedUser)) user = resolvedUser;
}
2013-01-16 22:55:14 +01:00
else{
user = resolvedUser;
}
}
return user;
**/
},
2013-01-26 20:21:09 +01:00
'getRandomChannelUser': function(server, channel) {
this.db.get('channel_users', { '' })
2013-01-26 20:21:09 +01:00
var channelUsers = this.getServerUsers(server).channelUsers[channel];
if(!_.isUndefined(channelUsers)) {
return channelUsers[_.random(0, channelUsers.length - 1)];
} else {
return false;
}
},
2013-01-22 01:00:11 +01:00
'getServerUsers': function(server) {
var users = [];
this.db.search('user', { 'server': server }, function(user) {
users.push(user.primaryNick);
}.bind(this), function(err) {
if(err instanceof NotImplementedError) {
// QQ
}
});
return users;
2013-01-22 01:00:11 +01:00
},
2013-01-22 01:24:12 +01:00
'getAllUsers': function() {
2013-01-22 01:59:11 +01:00
return _.reduce(dbot.db.knownUsers, function(memo, server, name) {
2013-01-22 01:53:30 +01:00
memo[name] = server.users;
2013-01-22 02:06:29 +01:00
return memo;
2013-01-22 02:00:56 +01:00
}, {}, this);
2013-01-22 01:24:12 +01:00
},
'isKnownUser': function(server, nick) {
var knownUsers = this.getServerUsers(server);
return (_.include(knownUsers.users, nick) || _.has(knownUsers.aliases, nick));
},
'isPrimaryUser': function(server, nick) {
var knownUsers = this.getServerUsers(server);
return _.include(knownUsers.users, nick);
},
'getAliases': function(server, nick) {
var knownUsers = this.getServerUsers(server);
return _.chain(knownUsers.aliases)
.keys()
.filter(function(user) {
return knownUsers.aliases[user] == nick;
}, this)
.value();
},
'isOnline': function(server, user, channel, useLowerCase) {
var user = this.api.resolveUser(server, user, useLowerCase);
var possiNicks = [user].concat(this.api.getAliases(server, user));
2013-01-24 01:23:26 +01:00
2013-01-24 01:30:22 +01:00
if(!_.has(dbot.instance.connections[server].channels, channel)) return false;
var onlineNicks = dbot.instance.connections[server].channels[channel].nicks;
return _.any(onlineNicks, function(nick) {
nick = nick.name;
return _.include(possiNicks, nick);
}, this);
},
'isChannelUser': function(server, user, channel, useLowerCase) {
var knownUsers = this.getServerUsers(server);
var user = this.api.resolveUser(server, user, useLowerCase);
if(!_.has(knownUsers.channelUsers, channel)) {
return false;
}
return _.include(knownUsers.channelUsers[channel], user);
}
};
return api;
};
exports.fetch = function(dbot) {
return api(dbot);
};