diff --git a/utils/Query.ts b/utils/Query.ts index 61b6e4f..2cda6f0 100644 --- a/utils/Query.ts +++ b/utils/Query.ts @@ -105,8 +105,9 @@ async function getServer(id: string, topLevel=true): Promise { .orWhereRaw(`(flags & ${ServerFlags.partnered}) and vanity=?`, [id]) if (res[0]) { const data = await getServerData(res[0].id) - if(!data || (+new Date() - +new Date(data.updatedAt)) > 3 * 60 * 1000) res[0].state = 'unreachable' - else { + if(!data || (+new Date() - +new Date(data.updatedAt)) > 3 * 60 * 1000) { + if(res[0].state === 'ok') res[0].state = 'unreachable' + } else { res[0].flags = res[0].flags | (data.features.includes(GuildFeature.Partnered) && ServerFlags.discord_partnered) | (data.features.includes(GuildFeature.Verified) && ServerFlags.verified) if(res[0].owners !== JSON.stringify([data.owner, ...data.admins]) || res[0].name !== data.name) await knex('servers').update({ name: data.name, owners: JSON.stringify([data.owner, ...data.admins]) }) @@ -245,8 +246,8 @@ async function getBotList(type: ListType, page = 1, query?: string):Promise=', new Date(Date.now() - 24 * 60 * 60 * 1000).toISOString()) .whereNot({ state: 'blocked' }) } else if (type === 'TRUSTED') { count = ( await knex('servers') .whereRaw(`flags & ${ServerFlags.trusted}`) .count() + .where('last_updated', '>=', new Date(Date.now() - 24 * 60 * 60 * 1000).toISOString()) .whereNot({ state: 'blocked' }) )[0]['count(*)'] res = await knex('servers').whereNot({ state: 'blocked' }) @@ -279,6 +282,7 @@ async function getServerList(type: ListType, page = 1, query?: string):Promise=', new Date(Date.now() - 24 * 60 * 60 * 1000).toISOString()) .whereNot({ state: 'blocked' }) } else if (type === 'NEW') { count = ( @@ -290,16 +294,17 @@ async function getServerList(type: ListType, page = 1, query?: string):Promise=', new Date(Date.now() - 24 * 60 * 60 * 1000).toISOString()) .whereNot({ state: 'blocked' }) } else if (type === 'PARTNERED') { count = ( await knex('servers') - .whereRaw(`flags & ${ServerFlags.partnered}`) + .whereRaw(`flags & ${ServerFlags.partnered} AND last_updated >= ?`, [new Date(Date.now() - 24 * 60 * 60 * 1000).toISOString()]) .andWhereNot({ state: 'blocked' }) .count() )[0]['count(*)'] res = await knex('servers') - .whereRaw(`flags & ${ServerFlags.partnered}`) + .whereRaw(`flags & ${ServerFlags.partnered} AND last_updated >= ?`, [new Date(Date.now() - 24 * 60 * 60 * 1000).toISOString()]) .andWhereNot({ state: 'blocked' }) .orderByRaw('RAND()') .limit(16) @@ -310,12 +315,14 @@ async function getServerList(type: ListType, page = 1, query?: string):Promise=', new Date(Date.now() - 24 * 60 * 60 * 1000).toISOString()) .where('category', 'like', `%${decodeURI(query)}%`) .andWhereNot({ state: 'blocked' }) .count() )[0]['count(*)'] res = await knex('servers') .where('category', 'like', `%${decodeURI(query)}%`) + .where('last_updated', '>=', new Date(Date.now() - 24 * 60 * 60 * 1000).toISOString()) .andWhereNot({ state: 'blocked' }) .orderBy('votes', 'desc') .limit(16) @@ -323,8 +330,8 @@ async function getServerList(type: ListType, page = 1, query?: string):Promise= ? AND MATCH(`name`, `intro`, `desc`) AGAINST(? in boolean mode)', [new Date(Date.now() - 24 * 60 * 60 * 1000).toISOString(), decodeURI(query) + '*']))[0][0]['count(*)'] + res = (await knex.raw('SELECT id, votes, MATCH(`name`, `intro`, `desc`) AGAINST(? in boolean mode) as relevance FROM servers WHERE `state` != "blocked" AND last_updated >= ? AND MATCH(`name`, `intro`, `desc`) AGAINST(? in boolean mode) ORDER BY relevance DESC, votes DESC LIMIT 16 OFFSET ?', [decodeURI(query) + '*', new Date(Date.now() - 24 * 60 * 60 * 1000).toISOString(), decodeURI(query) + '*', ((page ? Number(page) : 1) - 1) * 16]))[0] } else { count = 1 res = [] @@ -470,6 +477,7 @@ async function submitServer(userID: string, id: string, data: AddServerSubmit): category: JSON.stringify(data.category), invite: data.invite, token: sign({ id }), + last_updated: new Date().toISOString() }) get.server.clear(id) return true