fix: lastonline timestamps and display for guests

isekai-main
Barış Soner Uşaklı 3 years ago
parent 4b730df974
commit cc665fd614

@ -8,6 +8,7 @@ const pagination = require('../pagination');
const privileges = require('../privileges');
const helpers = require('./helpers');
const api = require('../api');
const utils = require('../utils');
const usersController = module.exports;
@ -51,10 +52,10 @@ usersController.getOnlineUsers = async function (req, res) {
let hiddenCount = 0;
if (!userData.isAdminOrGlobalMod) {
userData.users = userData.users.filter((user) => {
if (user && user.status === 'offline') {
if (user && user.userStatus === 'offline') {
hiddenCount += 1;
}
return user && user.status !== 'offline';
return user && user.userStatus !== 'offline';
});
}
@ -157,8 +158,22 @@ usersController.getUsersAndCount = async function (set, uid, start, stop) {
async function getUsers() {
if (set === 'users:online') {
const count = parseInt(stop, 10) === -1 ? stop : stop - start + 1;
const uids = await db.getSortedSetRevRangeByScore(set, start, count, '+inf', Date.now() - 86400000);
return await user.getUsers(uids, uid);
const data = await db.getSortedSetRevRangeByScoreWithScores(set, start, count, '+inf', Date.now() - 86400000);
const uids = data.map(d => d.value);
const scores = data.map(d => d.score);
const [userStatus, userData] = await Promise.all([
user.getUsersFields(uids, ['status']),
user.getUsers(uids, uid),
]);
userData.forEach((user, i) => {
if (user) {
user.lastonline = scores[i];
user.lastonlineISO = utils.toISOString(user.lastonline);
user.userStatus = userStatus[i].status || 'online';
}
});
return userData;
}
return await user.getUsersFromSet(set, uid, start, stop);
}

Loading…
Cancel
Save