diff --git a/src/server/api/endpoints/users/search.ts b/src/server/api/endpoints/users/search.ts index cfbdc337b..95b9e4f4b 100644 --- a/src/server/api/endpoints/users/search.ts +++ b/src/server/api/endpoints/users/search.ts @@ -40,6 +40,7 @@ async function byNative(res, rej, me, query, offset, max) { // Search users const users = await User .find({ + host: null, $or: [{ usernameLower: new RegExp(escapedQuery.replace('@', '').toLowerCase()) }, { diff --git a/src/server/api/endpoints/users/search_by_username.ts b/src/server/api/endpoints/users/search_by_username.ts index 5927d00fa..7c9fbba0f 100644 --- a/src/server/api/endpoints/users/search_by_username.ts +++ b/src/server/api/endpoints/users/search_by_username.ts @@ -20,15 +20,27 @@ module.exports = (params, me) => new Promise(async (res, rej) => { const [limit = 10, limitErr] = $.num.optional().range(1, 100).get(params.limit); if (limitErr) return rej('invalid limit param'); - const users = await User + let users = await User .find({ + host: null, usernameLower: new RegExp(query.toLowerCase()) }, { limit: limit, skip: offset }); + if (users.length < limit) { + const remoteUsers = await User + .find({ + host: { $ne: null }, + usernameLower: new RegExp(query.toLowerCase()) + }, { + limit: limit - users.length + }); + + users = users.concat(remoteUsers); + } + // Serialize - res(await Promise.all(users.map(async user => - await pack(user, me, { detail: true })))); + res(await Promise.all(users.map(user => pack(user, me, { detail: true })))); });