diff --git a/src/controllers/users.js b/src/controllers/users.js index ee57bf1afe..d177d8989c 100644 --- a/src/controllers/users.js +++ b/src/controllers/users.js @@ -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); }