79556d9365
Insert Star Trek joke here. Also did significant refactoring of the surrounding logic for the things that depended on Q.
60 lines
1.8 KiB
JavaScript
60 lines
1.8 KiB
JavaScript
import db from './database';
|
|
import Promise from 'bluebird';
|
|
|
|
const dbGetGlobalRank = Promise.promisify(db.users.getGlobalRank);
|
|
const dbMultiGetGlobalRank = Promise.promisify(db.users.getGlobalRanks);
|
|
const dbGetChannelRank = Promise.promisify(db.channels.getRank);
|
|
const dbMultiGetChannelRank = Promise.promisify(db.channels.getRanks);
|
|
const dbGetAliases = Promise.promisify(db.getAliases);
|
|
|
|
const DEFAULT_PROFILE = Object.freeze({ image: '', text: '' });
|
|
|
|
class Account {
|
|
constructor(ip, user, aliases) {
|
|
this.ip = ip;
|
|
this.user = user;
|
|
this.aliases = aliases;
|
|
this.channelRank = -1;
|
|
this.guestName = null;
|
|
|
|
this.update();
|
|
}
|
|
|
|
update() {
|
|
if (this.user !== null) {
|
|
this.name = this.user.name;
|
|
this.globalRank = this.user.global_rank;
|
|
} else if (this.guestName !== null) {
|
|
this.name = this.guestName;
|
|
this.globalRank = 0;
|
|
} else {
|
|
this.name = '';
|
|
this.globalRank = -1;
|
|
}
|
|
this.lowername = this.name.toLowerCase();
|
|
this.effectiveRank = Math.max(this.channelRank, this.globalRank);
|
|
this.profile = (this.user === null) ? DEFAULT_PROFILE : this.user.profile;
|
|
}
|
|
}
|
|
|
|
module.exports.Account = Account;
|
|
|
|
module.exports.rankForName = async function rankForNameAsync(name, channel) {
|
|
const [globalRank, channelRank] = await Promise.all([
|
|
dbGetGlobalRank(name),
|
|
dbGetChannelRank(channel, name)
|
|
]);
|
|
|
|
return Math.max(globalRank, channelRank);
|
|
};
|
|
|
|
module.exports.rankForIP = async function rankForIP(ip, channel) {
|
|
const aliases = await dbGetAliases(ip);
|
|
const [globalRanks, channelRanks] = await Promise.all([
|
|
dbMultiGetGlobalRank(aliases),
|
|
dbMultiGetChannelRank(channel, aliases)
|
|
]);
|
|
|
|
return Math.max.apply(Math, globalRanks.concat(channelRanks));
|
|
};
|