diff --git a/packages/hydrooj/src/entry/cli.ts b/packages/hydrooj/src/entry/cli.ts index edd119fd..7033d568 100644 --- a/packages/hydrooj/src/entry/cli.ts +++ b/packages/hydrooj/src/entry/cli.ts @@ -1,6 +1,8 @@ /* eslint-disable import/no-dynamic-require */ /* eslint-disable no-await-in-loop */ +import path from 'path'; import cac from 'cac'; +import fs from 'fs-extra'; import { ObjectID } from 'mongodb'; import db from '../service/db'; import { @@ -94,7 +96,10 @@ export async function load(ctx) { await service(pending, fail, ctx); require('../model/index'); await model(pending, fail, ctx); - require('../script/index'); + const scriptDir = path.resolve(__dirname, '..', 'script'); + for (const h of await fs.readdir(scriptDir)) { + ctx.loader.reloadPlugin(ctx, path.resolve(scriptDir, h), {}, `hydrooj/script/${h.split('.')[0]}`); + } await script(pending, fail, ctx); await cli(); } diff --git a/packages/hydrooj/src/entry/worker.ts b/packages/hydrooj/src/entry/worker.ts index d95b8afd..741e68a1 100644 --- a/packages/hydrooj/src/entry/worker.ts +++ b/packages/hydrooj/src/entry/worker.ts @@ -58,7 +58,10 @@ export async function apply(ctx: Context) { await handler(pending, fail, ctx); await addon(pending, fail, ctx); for (const i in global.Hydro.handler) await global.Hydro.handler[i](); - require('../script/index'); + const scriptDir = path.resolve(__dirname, '..', 'script'); + for (const h of await fs.readdir(scriptDir)) { + ctx.loader.reloadPlugin(ctx, path.resolve(scriptDir, h), {}, `hydrooj/script/${h.split('.')[0]}`); + } await script(pending, fail, ctx); await ctx.parallel('app/started'); if (process.env.NODE_APP_INSTANCE === '0') { diff --git a/packages/hydrooj/src/script/deleteUser.ts b/packages/hydrooj/src/script/deleteUser.ts index a096d875..daec80a3 100644 --- a/packages/hydrooj/src/script/deleteUser.ts +++ b/packages/hydrooj/src/script/deleteUser.ts @@ -1,4 +1,5 @@ import Schema from 'schemastery'; +import { Context } from '../context'; import { PRIV } from '../model/builtin'; import user from '../model/user'; import db from '../service/db'; @@ -8,15 +9,17 @@ const collDomainUser = db.collection('domain.user'); const collRecord = db.collection('record'); const collMessage = db.collection('message'); -export const apply = (ctx) => ctx.addScript('deleteUser', 'Delete a user') - .args(Schema.object({ +export const apply = (ctx: Context) => ctx.addScript( + 'deleteUser', 'Delete a user', + Schema.object({ uid: Schema.number(), - })) - .action(async ({ uid }) => { + }), + async ({ uid }) => { await collDocument.deleteMany({ owner: uid }); await collRecord.deleteMany({ uid }); await collDomainUser.deleteMany({ uid }); await collMessage.deleteMany({ $or: [{ from: uid }, { to: uid }] }); await user.setPriv(uid, PRIV.PRIV_NONE); return true; - }); + }, +); diff --git a/packages/hydrooj/src/script/index.ts b/packages/hydrooj/src/script/index.ts deleted file mode 100644 index 863b2dd5..00000000 --- a/packages/hydrooj/src/script/index.ts +++ /dev/null @@ -1,6 +0,0 @@ -import './rating'; -import './problemStat'; -import './blacklist'; -import './deleteUser'; -import './storageUsage'; -import './checkUpdate';