From 5842477f4274e7a7fd65e6d01c1da949dbbbf36c Mon Sep 17 00:00:00 2001 From: Shigma Date: Fri, 24 Jun 2022 05:31:22 +0800 Subject: [PATCH] feat(client): support arbitrary union type --- plugins/a11y/verifier/src/index.ts | 38 ++++++---- .../client/client/components/form/form.vue | 1 + .../client/client/components/form/schema.vue | 74 +++++++++++++------ .../client/client/components/form/utils.ts | 5 +- .../frontend/manager/client/bots/settings.vue | 8 +- 5 files changed, 80 insertions(+), 46 deletions(-) diff --git a/plugins/a11y/verifier/src/index.ts b/plugins/a11y/verifier/src/index.ts index b02c3e8e63..b0d7262601 100644 --- a/plugins/a11y/verifier/src/index.ts +++ b/plugins/a11y/verifier/src/index.ts @@ -1,9 +1,19 @@ import { Awaitable, Context, Schema, Session } from 'koishi' -type RequestHandler = string | boolean | ((session: Session) => Awaitable) -type Response = [boolean, string?] +type RequestHandler = number | GeneralHandler +type GeneralHandler = string | boolean | ((session: Session) => Awaitable) +type Response = [approve: boolean, comment?: string] -async function useRequestHandler(handler: RequestHandler, session: Session, prefer: boolean): Promise { +const RequestHandler: Schema = Schema.union([ + Schema.const(undefined).description('无操作'), + Schema.const(true).description('全部通过'), + Schema.const(false).description('全部拒绝'), + Schema.natural().description('权限等级').default(0), + Schema.string().hidden(), + Schema.function().hidden(), +]) + +async function useGeneralHandler(handler: GeneralHandler, session: Session, prefer: boolean): Promise { const result = typeof handler === 'function' ? await handler(session) : handler if (typeof result === 'string') { return [prefer, result] @@ -28,18 +38,18 @@ async function checkChannelAuthority(session: Session, authority: number): Promi } } +export const name = 'verifier' + export interface Config { - onFriendRequest?: number | RequestHandler - onGuildMemberRequest?: number | RequestHandler - onGuildRequest?: number | RequestHandler + onFriendRequest?: RequestHandler + onGuildMemberRequest?: RequestHandler + onGuildRequest?: RequestHandler } -export const name = 'verifier' - export const Config: Schema = Schema.object({ - onFriendRequest: Schema.union([Number, String, Boolean, Function]).description('通过好友请求所需的权限等级。'), - onGuildMemberRequest: Schema.union([Number, String, Boolean, Function]).description('通过入群申请所需的权限等级。'), - onGuildRequest: Schema.union([Number, String, Boolean, Function]).description('通过入群邀请所需的权限等级。'), + onFriendRequest: RequestHandler.description('如何响应好友请求?'), + onGuildMemberRequest: RequestHandler.description('如何响应入群申请?'), + onGuildRequest: RequestHandler.description('如何响应入群邀请?'), }) export function apply(ctx: Context, config: Config = {}) { @@ -48,21 +58,21 @@ export function apply(ctx: Context, config: Config = {}) { ctx.on('friend-request', async (session) => { const result = typeof onFriendRequest === 'number' ? await checkUserAuthority(session, onFriendRequest) - : await useRequestHandler(onFriendRequest, session, true) + : await useGeneralHandler(onFriendRequest, session, true) if (result) return session.bot.handleFriendRequest(session.messageId, ...result) }) ctx.on('guild-request', async (session) => { const result = typeof onGuildRequest === 'number' ? await checkChannelAuthority(session, onGuildRequest) - : await useRequestHandler(onGuildRequest, session, false) + : await useGeneralHandler(onGuildRequest, session, false) if (result) return session.bot.handleGuildRequest(session.messageId, ...result) }) ctx.on('guild-member-request', async (session) => { const result = typeof onGuildMemberRequest === 'number' ? await checkUserAuthority(session, onGuildMemberRequest) - : await useRequestHandler(onGuildMemberRequest, session, false) + : await useGeneralHandler(onGuildMemberRequest, session, false) if (result) return session.bot.handleGuildMemberRequest(session.messageId, ...result) }) } diff --git a/plugins/frontend/client/client/components/form/form.vue b/plugins/frontend/client/client/components/form/form.vue index 06487b9167..28fb210ca7 100644 --- a/plugins/frontend/client/client/components/form/form.vue +++ b/plugins/frontend/client/client/components/form/form.vue @@ -2,6 +2,7 @@ 部分配置项无法正常显示,这可能并非预期行为 +

基础设置

diff --git a/plugins/frontend/client/client/components/form/schema.vue b/plugins/frontend/client/client/components/form/schema.vue index 3f11f1390c..483debb4f4 100644 --- a/plugins/frontend/client/client/components/form/schema.vue +++ b/plugins/frontend/client/client/components/form/schema.vue @@ -1,10 +1,6 @@