diff --git a/packages/hydrooj/src/script/rating.ts b/packages/hydrooj/src/script/rating.ts index fbb33bc99..6b122d162 100644 --- a/packages/hydrooj/src/script/rating.ts +++ b/packages/hydrooj/src/script/rating.ts @@ -84,13 +84,14 @@ async function runContest(...arg: any[]) { } export async function calcLevel(domainId: string, report: Function) { - const ducnt = await domain.getMultiUserInDomain(domainId).count(); + const filter = { rp: { $ne: 1500, $exists: true } }; + const ducnt = await domain.getMultiUserInDomain(domainId, filter).count(); if (!ducnt) return; let last = { rp: null }; let rank = 0; let count = 0; const coll = global.Hydro.service.db.collection('domain.user'); - const ducur = domain.getMultiUserInDomain(domainId).project({ rp: 1 }).sort({ rp: -1 }); + const ducur = domain.getMultiUserInDomain(domainId, filter).project({ rp: 1 }).sort({ rp: -1 }); let bulk = coll.initializeUnorderedBulkOp(); while (await ducur.hasNext()) { const dudoc = await ducur.next(); diff --git a/packages/hydrooj/src/utils.ts b/packages/hydrooj/src/utils.ts index 81f587467..64ce8729e 100644 --- a/packages/hydrooj/src/utils.ts +++ b/packages/hydrooj/src/utils.ts @@ -32,4 +32,14 @@ export function logAndReturn(logger: Logger) { }; } +const RE_USER = /(?:^|\s)(@)([^ ]{3,255}?)(?=\s|$)/g; + +export function getRelatedUsers(content: string) { + const results = []; + let res: string[]; + // eslint-disable-next-line no-cond-assign + while (res = RE_USER.exec(content)) results.push(res[2]); + return results; +} + export * from '@hydrooj/utils/lib/utils';