diff --git a/package.json b/package.json index 9bfbc4f6..09873c0d 100644 --- a/package.json +++ b/package.json @@ -43,13 +43,13 @@ "file-type": "^19.0.0", "globals": "^15.12.0", "image-size": "^1.1.1", - "json-schema-to-ts": "^3.1.1", "typescript": "^5.3.3", "typescript-eslint": "^8.13.0", "vite": "^6.0.1", "vite-plugin-cp": "^4.0.8", "vite-tsconfig-paths": "^5.1.0", - "winston": "^3.17.0" + "winston": "^3.17.0", + "@sinclair/typebox": "^0.34.9" }, "dependencies": { "express": "^5.0.0", diff --git a/src/onebot/action/OneBotAction.ts b/src/onebot/action/OneBotAction.ts index 967d186a..da453c24 100644 --- a/src/onebot/action/OneBotAction.ts +++ b/src/onebot/action/OneBotAction.ts @@ -42,7 +42,7 @@ export abstract class OneBotAction { protected async check(payload: PayloadType): Promise { if (this.payloadSchema) { - this.validate = new Ajv({ allowUnionTypes: true }).compile(this.payloadSchema); + this.validate = new Ajv({ allowUnionTypes: true, useDefaults: true }).compile(this.payloadSchema); } if (this.validate && !this.validate(payload)) { const errors = this.validate.errors as ErrorObject[]; diff --git a/src/onebot/action/extends/CreateCollection.ts b/src/onebot/action/extends/CreateCollection.ts index 92e1f347..2d902ad0 100644 --- a/src/onebot/action/extends/CreateCollection.ts +++ b/src/onebot/action/extends/CreateCollection.ts @@ -1,17 +1,13 @@ import { OneBotAction } from '@/onebot/action/OneBotAction'; import { ActionName } from '@/onebot/action/router'; -import { FromSchema, JSONSchema } from 'json-schema-to-ts'; +import { Type, Static } from '@sinclair/typebox'; -const SchemaData = { - type: 'object', - properties: { - rawData: { type: 'string' }, - brief: { type: 'string' }, - }, - required: ['brief', 'rawData'], -} as const satisfies JSONSchema; +const SchemaData = Type.Object({ + rawData: Type.String(), + brief: Type.String(), +}); -type Payload = FromSchema; +type Payload = Static; export class CreateCollection extends OneBotAction { actionName = ActionName.CreateCollection; @@ -25,4 +21,4 @@ export class CreateCollection extends OneBotAction { payload.brief, payload.rawData, ); } -} +} \ No newline at end of file diff --git a/src/onebot/action/extends/FetchCustomFace.ts b/src/onebot/action/extends/FetchCustomFace.ts index c2d5fa00..9a0cfdc8 100644 --- a/src/onebot/action/extends/FetchCustomFace.ts +++ b/src/onebot/action/extends/FetchCustomFace.ts @@ -1,23 +1,19 @@ -import { FromSchema, JSONSchema } from 'json-schema-to-ts'; +import { Type, Static } from '@sinclair/typebox'; import { OneBotAction } from '@/onebot/action/OneBotAction'; import { ActionName } from '@/onebot/action/router'; -const SchemaData = { - type: 'object', - properties: { - count: { type: ['number', 'string'] }, - }, -} as const satisfies JSONSchema; +const SchemaData = Type.Object({ + count: Type.Union([Type.Number(), Type.String()], { default: 48 }), +}); -type Payload = FromSchema; +type Payload = Static; export class FetchCustomFace extends OneBotAction { actionName = ActionName.FetchCustomFace; payloadSchema = SchemaData; async _handle(payload: Payload) { - //48 可能正好是QQ需要的一个页面的数量 Tagged Mlikiowa - const ret = await this.core.apis.MsgApi.fetchFavEmojiList(+(payload.count ?? 48)); + const ret = await this.core.apis.MsgApi.fetchFavEmojiList(+payload.count); return ret.emojiInfoList.map(e => e.url); } -} +} \ No newline at end of file diff --git a/src/onebot/action/extends/FetchEmojiLike.ts b/src/onebot/action/extends/FetchEmojiLike.ts index 19ff33e7..59094576 100644 --- a/src/onebot/action/extends/FetchEmojiLike.ts +++ b/src/onebot/action/extends/FetchEmojiLike.ts @@ -1,32 +1,27 @@ -//getMsgEmojiLikesList -import { FromSchema, JSONSchema } from 'json-schema-to-ts'; +import { Type, Static } from '@sinclair/typebox'; import { OneBotAction } from '@/onebot/action/OneBotAction'; import { ActionName } from '@/onebot/action/router'; import { MessageUnique } from '@/common/message-unique'; -const SchemaData = { - type: 'object', - properties: { - user_id: { type: 'string' }, - group_id: { type: 'string' }, - emojiId: { type: 'string' }, - emojiType: { type: 'string' }, - message_id: { type: ['string', 'number'] }, - count: { type: ['string', 'number'] }, - }, - required: ['emojiId', 'emojiType', 'message_id'], -} as const satisfies JSONSchema; +const SchemaData = Type.Object({ + message_id: Type.Union([Type.Number(), Type.String()]), + emojiId: Type.Union([Type.Number(), Type.String()]), + emojiType: Type.Union([Type.Number(), Type.String()]), + count: Type.Union([Type.Number(), Type.String()], { default: 20 }), +}); -type Payload = FromSchema; +type Payload = Static; export class FetchEmojiLike extends OneBotAction { actionName = ActionName.FetchEmojiLike; payloadSchema = SchemaData; async _handle(payload: Payload) { - const msgIdPeer = MessageUnique.getMsgIdAndPeerByShortId(parseInt(payload.message_id.toString())); + const msgIdPeer = MessageUnique.getMsgIdAndPeerByShortId(+payload.message_id); if (!msgIdPeer) throw new Error('消息不存在'); const msg = (await this.core.apis.MsgApi.getMsgsByMsgId(msgIdPeer.Peer, [msgIdPeer.MsgId])).msgList[0]; - return await this.core.apis.MsgApi.getMsgEmojiLikesList(msgIdPeer.Peer, msg.msgSeq, payload.emojiId, payload.emojiType, +(payload.count ?? 20)); + return await this.core.apis.MsgApi.getMsgEmojiLikesList( + msgIdPeer.Peer, msg.msgSeq, payload.emojiId.toString(), payload.emojiType.toString(), +payload.count + ); } } diff --git a/src/onebot/action/extends/FetchUserProfileLike.ts b/src/onebot/action/extends/FetchUserProfileLike.ts index 13cb8f85..d4a32ace 100644 --- a/src/onebot/action/extends/FetchUserProfileLike.ts +++ b/src/onebot/action/extends/FetchUserProfileLike.ts @@ -1,11 +1,17 @@ import { OneBotAction } from '@/onebot/action/OneBotAction'; import { ActionName } from '@/onebot/action/router'; +import { Type, Static } from '@sinclair/typebox'; -export class FetchUserProfileLike extends OneBotAction<{ qq: number }, any> { +const SchemaData = Type.Object({ + user_id: Type.Union([Type.Number(), Type.String()]), +}); + +type Payload = Static; + +export class FetchUserProfileLike extends OneBotAction { actionName = ActionName.FetchUserProfileLike; - async _handle(payload: { qq: number }) { - if (!payload.qq) throw new Error('qq is required'); - return await this.core.apis.UserApi.getUidByUinV2(payload.qq.toString()); + async _handle(payload: Payload) { + return await this.core.apis.UserApi.getUidByUinV2(payload.user_id.toString()); } } diff --git a/src/onebot/action/extends/GetAiCharacters.ts b/src/onebot/action/extends/GetAiCharacters.ts index 58232bdb..f9df0fbe 100644 --- a/src/onebot/action/extends/GetAiCharacters.ts +++ b/src/onebot/action/extends/GetAiCharacters.ts @@ -1,18 +1,14 @@ import { ActionName } from '@/onebot/action/router'; -import { FromSchema, JSONSchema } from 'json-schema-to-ts'; import { GetPacketStatusDepends } from "@/onebot/action/packet/GetPacketStatus"; import { AIVoiceChatType } from "@/core/packet/entities/aiChat"; +import { Type, Static } from '@sinclair/typebox'; -const SchemaData = { - type: 'object', - properties: { - group_id: { type: ['number', 'string'] }, - chat_type: { type: ['number', 'string'] }, - }, - required: ['group_id'], -} as const satisfies JSONSchema; +const SchemaData = Type.Object({ + group_id: Type.Union([Type.Number(), Type.String()]), + chat_type: Type.Union([Type.Union([Type.Number(), Type.String()])], { default: 1 }), +}); -type Payload = FromSchema; +type Payload = Static; interface GetAiCharactersResponse { type: string; @@ -28,7 +24,7 @@ export class GetAiCharacters extends GetPacketStatusDepends ({ type: item.category, characters: item.voices.map((voice) => ({ diff --git a/src/onebot/action/extends/GetCollectionList.ts b/src/onebot/action/extends/GetCollectionList.ts index 280ed1e6..f1a31c16 100644 --- a/src/onebot/action/extends/GetCollectionList.ts +++ b/src/onebot/action/extends/GetCollectionList.ts @@ -1,23 +1,19 @@ import { OneBotAction } from '@/onebot/action/OneBotAction'; import { ActionName } from '@/onebot/action/router'; -import { FromSchema, JSONSchema } from 'json-schema-to-ts'; +import { Type, Static } from '@sinclair/typebox'; -const SchemaData = { - type: 'object', - properties: { - category: { type: ['number', 'string'] }, - count: { type: ['number', 'string'] }, - }, - required: ['category', 'count'], -} as const satisfies JSONSchema; +const SchemaData = Type.Object({ + category: Type.Union([Type.Number(), Type.String()]), + count: Type.Union([Type.Union([Type.Number(), Type.String()])], { default: 1 }), +}); -type Payload = FromSchema; +type Payload = Static; export class GetCollectionList extends OneBotAction { actionName = ActionName.GetCollectionList; payloadSchema = SchemaData; async _handle(payload: Payload) { - return await this.core.apis.CollectionApi.getAllCollection(parseInt(payload.category.toString()), +(payload.count ?? 1)); + return await this.core.apis.CollectionApi.getAllCollection(parseInt(payload.category.toString()), +payload.count); } } diff --git a/src/onebot/action/extends/GetGroupInfoEx.ts b/src/onebot/action/extends/GetGroupInfoEx.ts index 582a8cec..54b2a65f 100644 --- a/src/onebot/action/extends/GetGroupInfoEx.ts +++ b/src/onebot/action/extends/GetGroupInfoEx.ts @@ -1,16 +1,11 @@ import { OneBotAction } from '@/onebot/action/OneBotAction'; import { ActionName } from '@/onebot/action/router'; -import { FromSchema, JSONSchema } from 'json-schema-to-ts'; +import { Type, Static } from '@sinclair/typebox'; +const SchemaData = Type.Object({ + group_id: Type.Union([Type.Number(), Type.String()]), +}); -const SchemaData = { - type: 'object', - properties: { - group_id: { type: ['number', 'string'] }, - }, - required: ['group_id'], -} as const satisfies JSONSchema; - -type Payload = FromSchema; +type Payload = Static; export class GetGroupInfoEx extends OneBotAction { actionName = ActionName.GetGroupInfoEx; diff --git a/src/onebot/action/extends/GetMiniAppArk.ts b/src/onebot/action/extends/GetMiniAppArk.ts index d6cd52e7..47786b83 100644 --- a/src/onebot/action/extends/GetMiniAppArk.ts +++ b/src/onebot/action/extends/GetMiniAppArk.ts @@ -1,47 +1,29 @@ import { ActionName } from '@/onebot/action/router'; -import { FromSchema, JSONSchema } from 'json-schema-to-ts'; import { GetPacketStatusDepends } from "@/onebot/action/packet/GetPacketStatus"; import { MiniAppInfo, MiniAppInfoHelper } from "@/core/packet/utils/helper/miniAppHelper"; import { MiniAppData, MiniAppRawData, MiniAppReqCustomParams, MiniAppReqParams } from "@/core/packet/entities/miniApp"; +import { Static, Type } from '@sinclair/typebox'; -const SchemaData = { - type: 'object', - properties: { - type: { - type: 'string', - enum: ['bili', 'weibo'] - }, - title: { type: 'string' }, - desc: { type: 'string' }, - picUrl: { type: 'string' }, - jumpUrl: { type: 'string' }, - iconUrl: { type: 'string' }, - sdkId: { type: 'string' }, - appId: { type: 'string' }, - scene: { type: ['number', 'string'] }, - templateType: { type: ['number', 'string'] }, - businessType: { type: ['number', 'string'] }, - verType: { type: ['number', 'string'] }, - shareType: { type: ['number', 'string'] }, - versionId: { type: 'string' }, - withShareTicket: { type: ['number', 'string'] }, - rawArkData: { type: ['boolean', 'string'] } - }, - oneOf: [ - { - required: ['type', 'title', 'desc', 'picUrl', 'jumpUrl'] - }, - { - required: [ - 'title', 'desc', 'picUrl', 'jumpUrl', - 'iconUrl', 'appId', 'scene', 'templateType', 'businessType', - 'verType', 'shareType', 'versionId', 'withShareTicket' - ] - } - ] -} as const satisfies JSONSchema; +const SchemaData = Type.Object({ + type: Type.Optional(Type.Union([Type.Literal('bili'), Type.Literal('weibo')])), + title: Type.String(), + desc: Type.String(), + picUrl: Type.String(), + jumpUrl: Type.String(), + iconUrl: Type.Optional(Type.String()), + sdkId: Type.Optional(Type.String()), + appId: Type.Optional(Type.String()), + scene: Type.Optional(Type.Union([Type.Number(), Type.String()])), + templateType: Type.Optional(Type.Union([Type.Number(), Type.String()])), + businessType: Type.Optional(Type.Union([Type.Number(), Type.String()])), + verType: Type.Optional(Type.Union([Type.Number(), Type.String()])), + shareType: Type.Optional(Type.Union([Type.Number(), Type.String()])), + versionId: Type.Optional(Type.String()), + withShareTicket: Type.Optional(Type.Union([Type.Number(), Type.String()])), + rawArkData: Type.Optional(Type.Union([Type.Boolean(), Type.String()])) +}); -type Payload = FromSchema; +type Payload = Static; export class GetMiniAppArk extends GetPacketStatusDepends; +type Payload = Static; export class GetProfileLike extends OneBotAction { actionName = ActionName.GetProfileLike; payloadSchema = SchemaData; async _handle(payload: Payload) { - const start = payload.start ? Number(payload.start) : 0; - const count = payload.count ? Number(payload.count) : 10; - const type = payload.count ? Number(payload.count) : 2; const user_uid = this.core.selfInfo.uin === payload.user_id || !payload.user_id ? this.core.selfInfo.uid : await this.core.apis.UserApi.getUidByUinV2(payload.user_id.toString()); - const ret = await this.core.apis.UserApi.getProfileLike(user_uid ?? this.core.selfInfo.uid, start, count, type); + const ret = await this.core.apis.UserApi.getProfileLike(user_uid ?? this.core.selfInfo.uid, +payload.start, +payload.count, +payload.type); const listdata = ret.info.userLikeInfos[0].voteInfo.userInfos; for (const item of listdata) { - item.uin = parseInt((await this.core.apis.UserApi.getUinByUidV2(item.uid)) || ''); + item.uin = +((await this.core.apis.UserApi.getUinByUidV2(item.uid)) ?? ''); } return ret.info.userLikeInfos[0].voteInfo; } diff --git a/src/onebot/action/extends/GetRkey.ts b/src/onebot/action/extends/GetRkey.ts index 87b24c53..aa38c6d0 100644 --- a/src/onebot/action/extends/GetRkey.ts +++ b/src/onebot/action/extends/GetRkey.ts @@ -1,8 +1,7 @@ import { ActionName } from '@/onebot/action/router'; import { GetPacketStatusDepends } from "@/onebot/action/packet/GetPacketStatus"; - -export class GetRkey extends GetPacketStatusDepends> { +export class GetRkey extends GetPacketStatusDepends> { actionName = ActionName.GetRkey; async _handle() { diff --git a/src/onebot/action/extends/GetRobotUinRange.ts b/src/onebot/action/extends/GetRobotUinRange.ts index ba414cfc..734cc456 100644 --- a/src/onebot/action/extends/GetRobotUinRange.ts +++ b/src/onebot/action/extends/GetRobotUinRange.ts @@ -4,7 +4,7 @@ import { ActionName } from '@/onebot/action/router'; export class GetRobotUinRange extends OneBotAction> { actionName = ActionName.GetRobotUinRange; - async _handle(payload: void) { + async _handle() { return await this.core.apis.UserApi.getRobotUinRange(); } } diff --git a/src/onebot/action/extends/GetUserStatus.ts b/src/onebot/action/extends/GetUserStatus.ts index 40bdc714..56c36b7f 100644 --- a/src/onebot/action/extends/GetUserStatus.ts +++ b/src/onebot/action/extends/GetUserStatus.ts @@ -1,16 +1,12 @@ import { ActionName } from '@/onebot/action/router'; -import { FromSchema, JSONSchema } from 'json-schema-to-ts'; import { GetPacketStatusDepends } from "@/onebot/action/packet/GetPacketStatus"; -// no_cache get时传字符串 -const SchemaData = { - type: 'object', - properties: { - user_id: { type: ['number', 'string'] }, - }, - required: ['user_id'], -} as const satisfies JSONSchema; +import { Static, Type } from '@sinclair/typebox'; -type Payload = FromSchema; +const SchemaData = Type.Object({ + user_id: Type.Union([Type.Number(), Type.String()]), +}); + +type Payload = Static; export class GetUserStatus extends GetPacketStatusDepends { actionName = ActionName.GetUserStatus; diff --git a/src/onebot/action/extends/OCRImage.ts b/src/onebot/action/extends/OCRImage.ts index e3e1e0e3..7f79eab4 100644 --- a/src/onebot/action/extends/OCRImage.ts +++ b/src/onebot/action/extends/OCRImage.ts @@ -1,18 +1,14 @@ import { OneBotAction } from '@/onebot/action/OneBotAction'; import { ActionName } from '@/onebot/action/router'; -import { FromSchema, JSONSchema } from 'json-schema-to-ts'; import { checkFileExist, uri2local } from '@/common/file'; import fs from 'fs'; +import { Static, Type } from '@sinclair/typebox'; -const SchemaData = { - type: 'object', - properties: { - image: { type: 'string' }, - }, - required: ['image'], -} as const satisfies JSONSchema; +const SchemaData = Type.Object({ + image: Type.String(), +}); -type Payload = FromSchema; +type Payload = Static; export class OCRImage extends OneBotAction { actionName = ActionName.OCRImage; @@ -29,12 +25,12 @@ export class OCRImage extends OneBotAction { fs.unlink(path, () => { }); if (!ret) { - throw new Error(`OCR ${payload.file}失败`); + throw new Error(`OCR ${payload.image}失败`); } return ret.result; } fs.unlink(path, () => { }); - throw new Error(`OCR ${payload.file}失败,文件可能不存在`); + throw new Error(`OCR ${payload.image}失败,文件可能不存在`); } } diff --git a/src/onebot/action/extends/SetGroupSign.ts b/src/onebot/action/extends/SetGroupSign.ts index bea15daf..e0a193a2 100644 --- a/src/onebot/action/extends/SetGroupSign.ts +++ b/src/onebot/action/extends/SetGroupSign.ts @@ -1,16 +1,12 @@ import { GetPacketStatusDepends } from '@/onebot/action/packet/GetPacketStatus'; import { ActionName } from '@/onebot/action/router'; -import { FromSchema, JSONSchema } from 'json-schema-to-ts'; +import { Static, Type } from '@sinclair/typebox'; -const SchemaData = { - type: 'object', - properties: { - group_id: { type: ['string', 'number'] }, - }, - required: ['group_id'], -} as const satisfies JSONSchema; +const SchemaData = Type.Object({ + group_id: Type.Union([Type.Number(), Type.String()]), +}); -type Payload = FromSchema; +type Payload = Static; export class SetGroupSign extends GetPacketStatusDepends { actionName = ActionName.SetGroupSign; diff --git a/src/onebot/action/extends/SetInputStatus.ts b/src/onebot/action/extends/SetInputStatus.ts index f59fbf3c..174b6cb6 100644 --- a/src/onebot/action/extends/SetInputStatus.ts +++ b/src/onebot/action/extends/SetInputStatus.ts @@ -1,18 +1,14 @@ -import { FromSchema, JSONSchema } from 'json-schema-to-ts'; import { OneBotAction } from '@/onebot/action/OneBotAction'; import { ActionName } from '@/onebot/action/router'; import { ChatType } from '@/core'; +import { Static, Type } from '@sinclair/typebox'; -const SchemaData = { - type: 'object', - properties: { - event_type: { type: 'number' }, - user_id: { type: ['number', 'string'] }, - }, - required: ['event_type', 'user_id'], -} as const satisfies JSONSchema; +const SchemaData = Type.Object({ + user_id: Type.Union([Type.Number(), Type.String()]), + event_type: Type.Number(), +}); -type Payload = FromSchema; +type Payload = Static; export class SetInputStatus extends OneBotAction { actionName = ActionName.SetInputStatus; diff --git a/src/onebot/action/extends/SetLongNick.ts b/src/onebot/action/extends/SetLongNick.ts index 89de1d2d..e57df3a3 100644 --- a/src/onebot/action/extends/SetLongNick.ts +++ b/src/onebot/action/extends/SetLongNick.ts @@ -1,16 +1,12 @@ import { OneBotAction } from '@/onebot/action/OneBotAction'; import { ActionName } from '@/onebot/action/router'; -import { FromSchema, JSONSchema } from 'json-schema-to-ts'; +import { Static, Type } from '@sinclair/typebox'; -const SchemaData = { - type: 'object', - properties: { - longNick: { type: 'string' }, - }, - required: ['longNick'], -} as const satisfies JSONSchema; +const SchemaData = Type.Object({ + longNick: Type.String(), +}); -type Payload = FromSchema; +type Payload = Static; export class SetLongNick extends OneBotAction { actionName = ActionName.SetLongNick; diff --git a/src/onebot/action/extends/SetOnlineStatus.ts b/src/onebot/action/extends/SetOnlineStatus.ts index 8adab108..8ce7a80d 100644 --- a/src/onebot/action/extends/SetOnlineStatus.ts +++ b/src/onebot/action/extends/SetOnlineStatus.ts @@ -1,19 +1,14 @@ import { OneBotAction } from '@/onebot/action/OneBotAction'; import { ActionName } from '@/onebot/action/router'; -import { FromSchema, JSONSchema } from 'json-schema-to-ts'; -// 设置在线状态 +import { Static, Type } from '@sinclair/typebox'; -const SchemaData = { - type: 'object', - properties: { - status: { type: ['number', 'string'] }, - ext_status: { type: ['number', 'string'] }, - battery_status: { type: ['number', 'string'] }, - }, - required: ['status', 'ext_status', 'battery_status'], -} as const satisfies JSONSchema; +const SchemaData = Type.Object({ + status: Type.Union([Type.Number(), Type.String()]), + ext_status: Type.Union([Type.Number(), Type.String()]), + battery_status: Type.Union([Type.Number(), Type.String()]), +}); -type Payload = FromSchema; +type Payload = Static; export class SetOnlineStatus extends OneBotAction { actionName = ActionName.SetOnlineStatus; @@ -21,9 +16,9 @@ export class SetOnlineStatus extends OneBotAction { async _handle(payload: Payload) { const ret = await this.core.apis.UserApi.setSelfOnlineStatus( - parseInt(payload.status.toString()), - parseInt(payload.ext_status.toString()), - parseInt(payload.battery_status.toString()), + +payload.status, + +payload.ext_status, + +payload.battery_status, ); if (ret.result !== 0) { throw new Error('设置在线状态失败'); diff --git a/src/onebot/action/extends/SetQQAvatar.ts b/src/onebot/action/extends/SetQQAvatar.ts index feac7670..3f96a91c 100644 --- a/src/onebot/action/extends/SetQQAvatar.ts +++ b/src/onebot/action/extends/SetQQAvatar.ts @@ -1,28 +1,18 @@ import { OneBotAction } from '@/onebot/action/OneBotAction'; -import { ActionName, BaseCheckResult } from '@/onebot/action/router'; +import { ActionName } from '@/onebot/action/router'; import * as fs from 'node:fs'; import { checkFileExist, uri2local } from '@/common/file'; +import { Static, Type } from '@sinclair/typebox'; -interface Payload { - file: string; -} +const SchemaData = Type.Object({ + file: Type.String(), +}); + +type Payload = Static; export default class SetAvatar extends OneBotAction { actionName = ActionName.SetQQAvatar; - - // 用不着复杂检测 - protected async check(payload: Payload): Promise { - if (!payload.file || typeof payload.file != 'string') { - return { - valid: false, - message: 'file字段不能为空或者类型错误', - }; - } - return { - valid: true, - }; - } - + payloadSchema = SchemaData; async _handle(payload: Payload): Promise { const { path, success } = (await uri2local(this.core.NapCatTempPath, payload.file)); if (!success) { @@ -45,7 +35,6 @@ export default class SetAvatar extends OneBotAction { } } else { fs.unlink(path, () => { }); - throw new Error(`头像${payload.file}设置失败,无法获取头像,文件可能不存在`); } return null; diff --git a/src/onebot/action/extends/SetSpecialTittle.ts b/src/onebot/action/extends/SetSpecialTittle.ts index a0adba03..5c862e57 100644 --- a/src/onebot/action/extends/SetSpecialTittle.ts +++ b/src/onebot/action/extends/SetSpecialTittle.ts @@ -1,17 +1,14 @@ import { ActionName } from '@/onebot/action/router'; -import { FromSchema, JSONSchema } from 'json-schema-to-ts'; import { GetPacketStatusDepends } from "@/onebot/action/packet/GetPacketStatus"; -const SchemaData = { - type: 'object', - properties: { - group_id: { type: ['number', 'string'] }, - user_id: { type: ['number', 'string'] }, - special_title: { type: 'string' }, - }, - required: ['group_id', 'user_id', 'special_title'], -} as const satisfies JSONSchema; +import { Static, Type } from '@sinclair/typebox'; -type Payload = FromSchema; +const SchemaData = Type.Object({ + group_id: Type.Union([Type.Number(), Type.String()]), + user_id: Type.Union([Type.Number(), Type.String()]), + special_title: Type.String(), +}); + +type Payload = Static; export class SetSpecialTittle extends GetPacketStatusDepends { actionName = ActionName.SetSpecialTittle; diff --git a/src/onebot/action/extends/ShareContact.ts b/src/onebot/action/extends/ShareContact.ts index fe1b6a84..595d1a3e 100644 --- a/src/onebot/action/extends/ShareContact.ts +++ b/src/onebot/action/extends/ShareContact.ts @@ -1,18 +1,14 @@ import { OneBotAction } from '@/onebot/action/OneBotAction'; import { ActionName } from '@/onebot/action/router'; -import { FromSchema, JSONSchema } from 'json-schema-to-ts'; +import { Static, Type } from '@sinclair/typebox'; -const SchemaData = { - type: 'object', - properties: { - user_id: { type: 'string' }, - group_id: { type: 'string' }, - phoneNumber: { type: 'string' }, - }, -} as const satisfies JSONSchema; - -type Payload = FromSchema; +const SchemaData = Type.Object({ + user_id: Type.Optional(Type.Union([Type.Number(), Type.String()])), + group_id: Type.Optional(Type.Union([Type.Number(), Type.String()])), + phoneNumber: Type.String({ default: '' }), +}); +type Payload = Static; export class SharePeer extends OneBotAction { actionName = ActionName.SharePeer; @@ -20,28 +16,24 @@ export class SharePeer extends OneBotAction { async _handle(payload: Payload) { if (payload.group_id) { - return await this.core.apis.GroupApi.getGroupRecommendContactArkJson(payload.group_id); + return await this.core.apis.GroupApi.getGroupRecommendContactArkJson(payload.group_id.toString()); } else if (payload.user_id) { - return await this.core.apis.UserApi.getBuddyRecommendContactArkJson(payload.user_id, payload.phoneNumber || ''); + return await this.core.apis.UserApi.getBuddyRecommendContactArkJson(payload.user_id.toString(), payload.phoneNumber); } } } -const SchemaDataGroupEx = { - type: 'object', - properties: { - group_id: { type: 'string' }, - }, - required: ['group_id'], -} as const satisfies JSONSchema; +const SchemaDataGroupEx = Type.Object({ + group_id: Type.Union([Type.Number(), Type.String()]), +}); -type PayloadGroupEx = FromSchema; +type PayloadGroupEx = Static; export class ShareGroupEx extends OneBotAction { actionName = ActionName.ShareGroupEx; payloadSchema = SchemaDataGroupEx; async _handle(payload: PayloadGroupEx) { - return await this.core.apis.GroupApi.getArkJsonGroupShare(payload.group_id); + return await this.core.apis.GroupApi.getArkJsonGroupShare(payload.group_id.toString()); } } diff --git a/src/onebot/action/extends/TranslateEnWordToZn.ts b/src/onebot/action/extends/TranslateEnWordToZn.ts index d47dfb8c..0f1ade3d 100644 --- a/src/onebot/action/extends/TranslateEnWordToZn.ts +++ b/src/onebot/action/extends/TranslateEnWordToZn.ts @@ -1,19 +1,12 @@ import { OneBotAction } from '@/onebot/action/OneBotAction'; import { ActionName } from '@/onebot/action/router'; -import { FromSchema, JSONSchema } from 'json-schema-to-ts'; +import { Static, Type } from '@sinclair/typebox'; -const SchemaData = { - type: 'object', - properties: { - words: { - type: 'array', - items: { type: 'string' }, - }, - }, - required: ['words'], -} as const satisfies JSONSchema; +const SchemaData = Type.Object({ + words: Type.Array(Type.String()), +}); -type Payload = FromSchema; +type Payload = Static; export class TranslateEnWordToZn extends OneBotAction | null> { actionName = ActionName.TranslateEnWordToZn; diff --git a/src/onebot/action/file/GetFile.ts b/src/onebot/action/file/GetFile.ts index d01ca004..04083605 100644 --- a/src/onebot/action/file/GetFile.ts +++ b/src/onebot/action/file/GetFile.ts @@ -2,12 +2,8 @@ import { OneBotAction } from '@/onebot/action/OneBotAction'; import fs from 'fs/promises'; import { FileNapCatOneBotUUID } from '@/common/helper'; import { ActionName } from '@/onebot/action/router'; -import { FromSchema, JSONSchema } from 'json-schema-to-ts'; import { OB11MessageImage, OB11MessageVideo } from '@/onebot/types'; - -// interface GetFilePayload { -// file: string; // 文件名或者fileUuid -// } +import { Static, Type } from '@sinclair/typebox'; export interface GetFileResponse { file?: string; // path @@ -16,19 +12,14 @@ export interface GetFileResponse { file_name?: string; base64?: string; } -const GetFileBase_PayloadSchema = { - type: 'object', - properties: { - file: { type: 'string' }, - file_id: { type: 'string' } - }, - oneOf: [ - { required: ['file'] }, - { required: ['file_id'] } - ] -} as const satisfies JSONSchema; -export type GetFilePayload = FromSchema; +const GetFileBase_PayloadSchema = Type.Object({ + file: Type.Optional(Type.String()), + file_id: Type.Optional(Type.String()) +}); + + +export type GetFilePayload = Static; export class GetFileBase extends OneBotAction { payloadSchema = GetFileBase_PayloadSchema; @@ -50,12 +41,12 @@ export class GetFileBase extends OneBotAction { let url = ''; if (mixElement?.picElement && rawMessage) { const tempData = - await this.obContext.apis.MsgApi.rawToOb11Converters.picElement?.(mixElement?.picElement, rawMessage, mixElement) as OB11MessageImage | undefined; + await this.obContext.apis.MsgApi.rawToOb11Converters.picElement?.(mixElement?.picElement, rawMessage, mixElement, { parseMultMsg: false }) as OB11MessageImage | undefined; url = tempData?.data.url ?? ''; } if (mixElement?.videoElement && rawMessage) { const tempData = - await this.obContext.apis.MsgApi.rawToOb11Converters.videoElement?.(mixElement?.videoElement, rawMessage, mixElement) as OB11MessageVideo | undefined; + await this.obContext.apis.MsgApi.rawToOb11Converters.videoElement?.(mixElement?.videoElement, rawMessage, mixElement, { parseMultMsg: false }) as OB11MessageVideo | undefined; url = tempData?.data.url ?? ''; } const res: GetFileResponse = { diff --git a/src/onebot/action/file/GetGroupFileUrl.ts b/src/onebot/action/file/GetGroupFileUrl.ts index a238a9f7..ae3f5687 100644 --- a/src/onebot/action/file/GetGroupFileUrl.ts +++ b/src/onebot/action/file/GetGroupFileUrl.ts @@ -1,18 +1,14 @@ import { ActionName } from '@/onebot/action/router'; -import { FromSchema, JSONSchema } from 'json-schema-to-ts'; import { FileNapCatOneBotUUID } from "@/common/helper"; import { GetPacketStatusDepends } from "@/onebot/action/packet/GetPacketStatus"; +import { Static, Type } from '@sinclair/typebox'; -const SchemaData = { - type: 'object', - properties: { - group_id: { type: ['number', 'string'] }, - file_id: { type: ['string'] }, - }, - required: ['group_id', 'file_id'], -} as const satisfies JSONSchema; +const SchemaData = Type.Object({ + group_id: Type.Union([Type.Number(), Type.String()]), + file_id: Type.String(), +}); -type Payload = FromSchema; +type Payload = Static; interface GetGroupFileUrlResponse { url?: string; diff --git a/src/onebot/action/go-cqhttp/CreateGroupFileFolder.ts b/src/onebot/action/go-cqhttp/CreateGroupFileFolder.ts index 381ef128..01af44c6 100644 --- a/src/onebot/action/go-cqhttp/CreateGroupFileFolder.ts +++ b/src/onebot/action/go-cqhttp/CreateGroupFileFolder.ts @@ -1,17 +1,13 @@ -import { FromSchema, JSONSchema } from 'json-schema-to-ts'; import { OneBotAction } from '@/onebot/action/OneBotAction'; import { ActionName } from '@/onebot/action/router'; +import { Static, Type } from '@sinclair/typebox'; -const SchemaData = { - type: 'object', - properties: { - group_id: { type: ['string', 'number'] }, - folder_name: { type: 'string' }, - }, - required: ['group_id', 'folder_name'], -} as const satisfies JSONSchema; +const SchemaData = Type.Object({ + group_id: Type.Union([Type.Number(), Type.String()]), + folder_name: Type.String(), +}); -type Payload = FromSchema; +type Payload = Static; export class CreateGroupFileFolder extends OneBotAction { actionName = ActionName.GoCQHTTP_CreateGroupFileFolder; diff --git a/src/onebot/action/go-cqhttp/DeleteGroupFile.ts b/src/onebot/action/go-cqhttp/DeleteGroupFile.ts index 88f7e0b9..244a5368 100644 --- a/src/onebot/action/go-cqhttp/DeleteGroupFile.ts +++ b/src/onebot/action/go-cqhttp/DeleteGroupFile.ts @@ -1,18 +1,15 @@ -import { FromSchema, JSONSchema } from 'json-schema-to-ts'; + import { OneBotAction } from '@/onebot/action/OneBotAction'; import { ActionName } from '@/onebot/action/router'; import { FileNapCatOneBotUUID } from '@/common/helper'; +import { Static, Type } from '@sinclair/typebox'; -const SchemaData = { - type: 'object', - properties: { - group_id: { type: ['string', 'number'] }, - file_id: { type: 'string' }, - }, - required: ['group_id', 'file_id'], -} as const satisfies JSONSchema; +const SchemaData = Type.Object({ + group_id: Type.Union([Type.Number(), Type.String()]), + file_id: Type.String(), +}); -type Payload = FromSchema; +type Payload = Static; export class DeleteGroupFile extends OneBotAction { actionName = ActionName.GOCQHTTP_DeleteGroupFile; diff --git a/src/onebot/action/go-cqhttp/DeleteGroupFileFolder.ts b/src/onebot/action/go-cqhttp/DeleteGroupFileFolder.ts index 1201d44d..c6e20df9 100644 --- a/src/onebot/action/go-cqhttp/DeleteGroupFileFolder.ts +++ b/src/onebot/action/go-cqhttp/DeleteGroupFileFolder.ts @@ -1,18 +1,14 @@ -import { FromSchema, JSONSchema } from 'json-schema-to-ts'; import { ActionName } from '@/onebot/action/router'; import { OneBotAction } from '@/onebot/action/OneBotAction'; +import { Static, Type } from '@sinclair/typebox'; -const SchemaData = { - type: 'object', - properties: { - group_id: { type: ['string', 'number'] }, - folder_id: { type: 'string' }, - folder: { type: 'string' } - }, - required: ['group_id'], -} as const satisfies JSONSchema; +const SchemaData = Type.Object({ + group_id: Type.Union([Type.Number(), Type.String()]), + folder_id: Type.Optional(Type.String()), + folder: Type.Optional(Type.String()), +}); -type Payload = FromSchema; +type Payload = Static; export class DeleteGroupFileFolder extends OneBotAction { actionName = ActionName.GoCQHTTP_DeleteGroupFileFolder; diff --git a/src/onebot/action/go-cqhttp/DownloadFile.ts b/src/onebot/action/go-cqhttp/DownloadFile.ts index 868908dc..82509e5a 100644 --- a/src/onebot/action/go-cqhttp/DownloadFile.ts +++ b/src/onebot/action/go-cqhttp/DownloadFile.ts @@ -4,29 +4,20 @@ import fs from 'fs'; import { join as joinPath } from 'node:path'; import { calculateFileMD5, httpDownload } from '@/common/file'; import { randomUUID } from 'crypto'; -import { FromSchema, JSONSchema } from 'json-schema-to-ts'; +import { Static, Type } from '@sinclair/typebox'; interface FileResponse { file: string; } -const SchemaData = { - type: 'object', - properties: { - thread_count: { type: ['number', 'string'] }, - url: { type: 'string' }, - base64: { type: 'string' }, - name: { type: 'string' }, - headers: { - type: ['string', 'array'], - items: { - type: 'string', - }, - }, - }, -} as const satisfies JSONSchema; +const SchemaData = Type.Object({ + url: Type.Optional(Type.String()), + base64: Type.Optional(Type.String()), + name: Type.Optional(Type.String()), + headers: Type.Optional(Type.Union([Type.String(), Type.Array(Type.String())])), +}); -type Payload = FromSchema; +type Payload = Static; export default class GoCQHTTPDownloadFile extends OneBotAction { actionName = ActionName.GoCQHTTP_DownloadFile; diff --git a/src/onebot/action/go-cqhttp/GetForwardMsg.ts b/src/onebot/action/go-cqhttp/GetForwardMsg.ts index 4e902c04..6d7923c9 100644 --- a/src/onebot/action/go-cqhttp/GetForwardMsg.ts +++ b/src/onebot/action/go-cqhttp/GetForwardMsg.ts @@ -1,20 +1,15 @@ import { OneBotAction } from '@/onebot/action/OneBotAction'; import { OB11Message, OB11MessageData, OB11MessageDataType, OB11MessageForward, OB11MessageNodePlain as OB11MessageNode } from '@/onebot'; import { ActionName } from '@/onebot/action/router'; -import { FromSchema, JSONSchema } from 'json-schema-to-ts'; import { MessageUnique } from '@/common/message-unique'; +import { Static, Type } from '@sinclair/typebox'; +const SchemaData = Type.Object({ + message_id: Type.Union([Type.Number(), Type.String()]), + id: Type.Union([Type.Number(), Type.String()]), +}); - -const SchemaData = { - type: 'object', - properties: { - message_id: { type: 'string' }, - id: { type: 'string' }, - }, -} as const satisfies JSONSchema; - -type Payload = FromSchema; +type Payload = Static; export class GoCQHTTPGetForwardMsgAction extends OneBotAction { actionName = ActionName.GoCQHTTP_GetForwardMsg; @@ -60,7 +55,7 @@ export class GoCQHTTPGetForwardMsgAction extends OneBotAction { throw new Error('message_id is required'); } - const rootMsgId = MessageUnique.getShortIdByMsgId(msgId); + const rootMsgId = MessageUnique.getShortIdByMsgId(msgId.toString()); const rootMsg = MessageUnique.getMsgIdAndPeerByShortId(rootMsgId ?? +msgId); if (!rootMsg) { throw new Error('msg not found'); diff --git a/src/onebot/action/go-cqhttp/GetFriendMsgHistory.ts b/src/onebot/action/go-cqhttp/GetFriendMsgHistory.ts index 302f58b8..c8106e6b 100644 --- a/src/onebot/action/go-cqhttp/GetFriendMsgHistory.ts +++ b/src/onebot/action/go-cqhttp/GetFriendMsgHistory.ts @@ -2,26 +2,22 @@ import { OneBotAction } from '@/onebot/action/OneBotAction'; import { OB11Message } from '@/onebot'; import { ActionName } from '@/onebot/action/router'; import { ChatType } from '@/core/types'; -import { FromSchema, JSONSchema } from 'json-schema-to-ts'; import { MessageUnique } from '@/common/message-unique'; import { AdapterConfigWrap } from '@/onebot/config/config'; +import { Static, Type } from '@sinclair/typebox'; interface Response { messages: OB11Message[]; } +const SchemaData = Type.Object({ + user_id: Type.Union([Type.Number(), Type.String()]), + message_seq: Type.Optional(Type.Union([Type.Number(), Type.String()])), + count: Type.Union([Type.Number(), Type.String()], { default: 20 }), + reverseOrder: Type.Optional(Type.Union([Type.Boolean(), Type.String()])) +}); -const SchemaData = { - type: 'object', - properties: { - user_id: { type: ['number', 'string'] }, - message_seq: { type: ['number', 'string'] }, - count: { type: ['number', 'string'] }, - reverseOrder: { type: ['boolean', 'string'] }, - }, - required: ['user_id'], -} as const satisfies JSONSchema; -type Payload = FromSchema; +type Payload = Static; export default class GetFriendMsgHistory extends OneBotAction { actionName = ActionName.GetFriendMsgHistory; @@ -30,7 +26,7 @@ export default class GetFriendMsgHistory extends OneBotAction async _handle(payload: Payload, adapter: string): Promise { //处理参数 const uid = await this.core.apis.UserApi.getUidByUinV2(payload.user_id.toString()); - const MsgCount = +(payload.count ?? 20); + const isReverseOrder = typeof payload.reverseOrder === 'string' ? payload.reverseOrder === 'true' : !!payload.reverseOrder; if (!uid) throw new Error(`记录${payload.user_id}不存在`); const friend = await this.core.apis.FriendApi.isBuddy(uid); @@ -38,7 +34,7 @@ export default class GetFriendMsgHistory extends OneBotAction const hasMessageSeq = !payload.message_seq ? !!payload.message_seq : !(payload.message_seq?.toString() === '' || payload.message_seq?.toString() === '0'); const startMsgId = hasMessageSeq ? (MessageUnique.getMsgIdAndPeerByShortId(+payload.message_seq!)?.MsgId ?? payload.message_seq!.toString()) : '0'; const msgList = hasMessageSeq ? - (await this.core.apis.MsgApi.getMsgHistory(peer, startMsgId, MsgCount)).msgList : (await this.core.apis.MsgApi.getAioFirstViewLatestMsgs(peer, MsgCount)).msgList; + (await this.core.apis.MsgApi.getMsgHistory(peer, startMsgId, +payload.count)).msgList : (await this.core.apis.MsgApi.getAioFirstViewLatestMsgs(peer, +payload.count)).msgList; if (msgList.length === 0) throw new Error(`消息${payload.message_seq}不存在`); //翻转消息 if (isReverseOrder) msgList.reverse(); diff --git a/src/onebot/action/go-cqhttp/GetGroupAtAllRemain.ts b/src/onebot/action/go-cqhttp/GetGroupAtAllRemain.ts index dc466284..64c4c10c 100644 --- a/src/onebot/action/go-cqhttp/GetGroupAtAllRemain.ts +++ b/src/onebot/action/go-cqhttp/GetGroupAtAllRemain.ts @@ -1,15 +1,12 @@ import { OneBotAction } from '@/onebot/action/OneBotAction'; import { ActionName } from '@/onebot/action/router'; -import { FromSchema, JSONSchema } from 'json-schema-to-ts'; +import { Static, Type } from '@sinclair/typebox'; -const SchemaData = { - type: 'object', - properties: { - group_id: { type: ['number', 'string'] } - }, - required: ['group_id'], -} as const satisfies JSONSchema; -type Payload = FromSchema; +const SchemaData = Type.Object({ + group_id: Type.Union([Type.Number(), Type.String()]) +}); + +type Payload = Static; export class GoCQHTTPGetGroupAtAllRemain extends OneBotAction { actionName = ActionName.GoCQHTTP_GetGroupAtAllRemain; diff --git a/src/onebot/action/go-cqhttp/GetGroupFileSystemInfo.ts b/src/onebot/action/go-cqhttp/GetGroupFileSystemInfo.ts index 4139137e..6fe9fe9b 100644 --- a/src/onebot/action/go-cqhttp/GetGroupFileSystemInfo.ts +++ b/src/onebot/action/go-cqhttp/GetGroupFileSystemInfo.ts @@ -1,16 +1,12 @@ -import { FromSchema, JSONSchema } from 'json-schema-to-ts'; import { OneBotAction } from '@/onebot/action/OneBotAction'; import { ActionName } from '@/onebot/action/router'; +import { Static, Type } from '@sinclair/typebox'; -const SchemaData = { - type: 'object', - properties: { - group_id: { type: ['string', 'number'] }, - }, - required: ['group_id'], -} as const satisfies JSONSchema; +const SchemaData = Type.Object({ + group_id: Type.Union([Type.Number(), Type.String()]) +}); -type Payload = FromSchema; +type Payload = Static; export class GetGroupFileSystemInfo extends OneBotAction; +type Payload = Static; export class GetGroupFilesByFolder extends OneBotAction { actionName = ActionName.GoCQHTTP_GetGroupFilesByFolder; @@ -23,7 +20,7 @@ export class GetGroupFilesByFolder extends OneBotAction { const ret = await this.core.apis.MsgApi.getGroupFileList(payload.group_id.toString(), { sortType: 1, - fileCount: +(payload.file_count ?? 50), + fileCount: +payload.file_count, startIndex: 0, sortOrder: 2, showOnlinedocFolder: 0, diff --git a/src/onebot/action/go-cqhttp/GetGroupHonorInfo.ts b/src/onebot/action/go-cqhttp/GetGroupHonorInfo.ts index 0dd9b8ff..6782228e 100644 --- a/src/onebot/action/go-cqhttp/GetGroupHonorInfo.ts +++ b/src/onebot/action/go-cqhttp/GetGroupHonorInfo.ts @@ -1,18 +1,14 @@ import { OneBotAction } from '@/onebot/action/OneBotAction'; import { ActionName } from '@/onebot/action/router'; import { WebHonorType } from '@/core/types'; -import { FromSchema, JSONSchema } from 'json-schema-to-ts'; +import { Static, Type } from '@sinclair/typebox'; -const SchemaData = { - type: 'object', - properties: { - group_id: { type: ['number', 'string'] }, - type: { enum: [WebHonorType.ALL, WebHonorType.EMOTION, WebHonorType.LEGEND, WebHonorType.PERFORMER, WebHonorType.STRONG_NEWBIE, WebHonorType.TALKATIVE] }, - }, - required: ['group_id'], -} as const satisfies JSONSchema; -// enum是不是有点抽象 -type Payload = FromSchema; +const SchemaData = Type.Object({ + group_id: Type.Union([Type.Number(), Type.String()]), + type: Type.Optional(Type.Enum(WebHonorType)) +}); + +type Payload = Static; export class GetGroupHonorInfo extends OneBotAction> { actionName = ActionName.GetGroupHonorInfo; diff --git a/src/onebot/action/go-cqhttp/GetGroupMsgHistory.ts b/src/onebot/action/go-cqhttp/GetGroupMsgHistory.ts index b8958605..7c0d6f30 100644 --- a/src/onebot/action/go-cqhttp/GetGroupMsgHistory.ts +++ b/src/onebot/action/go-cqhttp/GetGroupMsgHistory.ts @@ -2,26 +2,24 @@ import { OneBotAction } from '@/onebot/action/OneBotAction'; import { OB11Message } from '@/onebot'; import { ActionName } from '@/onebot/action/router'; import { ChatType, Peer } from '@/core/types'; -import { FromSchema, JSONSchema } from 'json-schema-to-ts'; import { MessageUnique } from '@/common/message-unique'; import { AdapterConfigWrap } from '@/onebot/config/config'; +import { Static, Type } from '@sinclair/typebox'; interface Response { messages: OB11Message[]; } -const SchemaData = { - type: 'object', - properties: { - group_id: { type: ['number', 'string'] }, - message_seq: { type: ['number', 'string'] }, - count: { type: ['number', 'string'] }, - reverseOrder: { type: ['boolean', 'string'] }, - }, - required: ['group_id'], -} as const satisfies JSONSchema; +const SchemaData = Type.Object({ + group_id: Type.Union([Type.Number(), Type.String()]), + message_seq: Type.Optional(Type.Union([Type.Number(), Type.String()])), + count: Type.Union([Type.Number(), Type.String()], { default: 20 }), + reverseOrder: Type.Optional(Type.Union([Type.Boolean(), Type.String()])) +}); + + +type Payload = Static; -type Payload = FromSchema; export default class GoCQHTTPGetGroupMsgHistory extends OneBotAction { actionName = ActionName.GoCQHTTP_GetGroupMsgHistory; @@ -30,13 +28,12 @@ export default class GoCQHTTPGetGroupMsgHistory extends OneBotAction { //处理参数 const isReverseOrder = typeof payload.reverseOrder === 'string' ? payload.reverseOrder === 'true' : !!payload.reverseOrder; - const MsgCount = +(payload.count ?? 20); const peer: Peer = { chatType: ChatType.KCHATTYPEGROUP, peerUid: payload.group_id.toString() }; const hasMessageSeq = !payload.message_seq ? !!payload.message_seq : !(payload.message_seq?.toString() === '' || payload.message_seq?.toString() === '0'); //拉取消息 const startMsgId = hasMessageSeq ? (MessageUnique.getMsgIdAndPeerByShortId(+payload.message_seq!)?.MsgId ?? payload.message_seq!.toString()) : '0'; const msgList = hasMessageSeq ? - (await this.core.apis.MsgApi.getMsgHistory(peer, startMsgId, MsgCount)).msgList : (await this.core.apis.MsgApi.getAioFirstViewLatestMsgs(peer, MsgCount)).msgList; + (await this.core.apis.MsgApi.getMsgHistory(peer, startMsgId, +payload.count)).msgList : (await this.core.apis.MsgApi.getAioFirstViewLatestMsgs(peer, +payload.count)).msgList; if (msgList.length === 0) throw new Error(`消息${payload.message_seq}不存在`); //翻转消息 if (isReverseOrder) msgList.reverse(); diff --git a/src/onebot/action/go-cqhttp/GetGroupRootFiles.ts b/src/onebot/action/go-cqhttp/GetGroupRootFiles.ts index 948ec1e4..217e7956 100644 --- a/src/onebot/action/go-cqhttp/GetGroupRootFiles.ts +++ b/src/onebot/action/go-cqhttp/GetGroupRootFiles.ts @@ -1,19 +1,16 @@ -import { FromSchema, JSONSchema } from 'json-schema-to-ts'; + import { OneBotAction } from '@/onebot/action/OneBotAction'; import { ActionName } from '@/onebot/action/router'; import { OB11GroupFile, OB11GroupFileFolder } from '@/onebot'; import { OB11Construct } from '@/onebot/helper/data'; +import { Static, Type } from '@sinclair/typebox'; -const SchemaData = { - type: 'object', - properties: { - group_id: { type: ['string', 'number'] }, - file_count: { type: ['string', 'number'] }, - }, - required: ['group_id'], -} as const satisfies JSONSchema; +const SchemaData = Type.Object({ + group_id: Type.Union([Type.Number(), Type.String()]), + file_count: Type.Union([Type.Number(), Type.String()], { default: 50 }), +}); -type Payload = FromSchema; +type Payload = Static; export class GetGroupRootFiles extends OneBotAction> { actionName = ActionName.GetOnlineClient; diff --git a/src/onebot/action/go-cqhttp/GetStrangerInfo.ts b/src/onebot/action/go-cqhttp/GetStrangerInfo.ts index 19fe5fc2..6cb1b63b 100644 --- a/src/onebot/action/go-cqhttp/GetStrangerInfo.ts +++ b/src/onebot/action/go-cqhttp/GetStrangerInfo.ts @@ -2,18 +2,14 @@ import { OneBotAction } from '@/onebot/action/OneBotAction'; import { OB11User, OB11UserSex } from '@/onebot'; import { OB11Construct } from '@/onebot/helper/data'; import { ActionName } from '@/onebot/action/router'; -import { FromSchema, JSONSchema } from 'json-schema-to-ts'; import { calcQQLevel } from '@/common/helper'; +import { Static, Type } from '@sinclair/typebox'; -const SchemaData = { - type: 'object', - properties: { - user_id: { type: ['number', 'string'] }, - }, - required: ['user_id'], -} as const satisfies JSONSchema; +const SchemaData = Type.Object({ + user_id: Type.Union([Type.Number(), Type.String()]), +}); -type Payload = FromSchema; +type Payload = Static; export default class GoCQHTTPGetStrangerInfo extends OneBotAction { actionName = ActionName.GoCQHTTP_GetStrangerInfo; diff --git a/src/onebot/action/go-cqhttp/GoCQHTTPCheckUrlSafely.ts b/src/onebot/action/go-cqhttp/GoCQHTTPCheckUrlSafely.ts index 1f6c7d7d..76b03d9e 100644 --- a/src/onebot/action/go-cqhttp/GoCQHTTPCheckUrlSafely.ts +++ b/src/onebot/action/go-cqhttp/GoCQHTTPCheckUrlSafely.ts @@ -1,15 +1,12 @@ import { OneBotAction } from '@/onebot/action/OneBotAction'; import { ActionName } from '@/onebot/action/router'; -import { FromSchema, JSONSchema } from 'json-schema-to-ts'; +import { Static, Type } from '@sinclair/typebox'; -const SchemaData = { - type: 'object', - properties: { - url: { type: 'string' }, - }, - required: ['url'], -} as const satisfies JSONSchema; -type Payload = FromSchema; +const SchemaData = Type.Object({ + url: Type.String(), +}); + +type Payload = Static; export class GoCQHTTPCheckUrlSafely extends OneBotAction { actionName = ActionName.GoCQHTTP_CheckUrlSafely; diff --git a/src/onebot/action/go-cqhttp/GoCQHTTPDeleteFriend.ts b/src/onebot/action/go-cqhttp/GoCQHTTPDeleteFriend.ts index 849535dc..c67d283b 100644 --- a/src/onebot/action/go-cqhttp/GoCQHTTPDeleteFriend.ts +++ b/src/onebot/action/go-cqhttp/GoCQHTTPDeleteFriend.ts @@ -1,22 +1,15 @@ import { OneBotAction } from '@/onebot/action/OneBotAction'; import { ActionName } from '@/onebot/action/router'; -import { FromSchema, JSONSchema } from 'json-schema-to-ts'; +import { Static, Type } from '@sinclair/typebox'; -const SchemaData = { - type: 'object', - properties: { - friend_id: { type: ['string', 'number'] }, - user_id: { type: ['string', 'number'] }, - temp_block: { type: 'boolean' }, - temp_both_del: { type: 'boolean' }, - }, - oneOf: [ - { required: ['friend_id'] }, - { required: ['user_id'] }, - ], +const SchemaData = Type.Object({ + friend_id: Type.Optional(Type.Union([Type.String(), Type.Number()])), + user_id: Type.Optional(Type.Union([Type.String(), Type.Number()])), + temp_block: Type.Optional(Type.Boolean()), + temp_both_del: Type.Optional(Type.Boolean()), +}); -} as const satisfies JSONSchema; -type Payload = FromSchema; +type Payload = Static; export class GoCQHTTPDeleteFriend extends OneBotAction { actionName = ActionName.GoCQHTTP_DeleteFriend; diff --git a/src/onebot/action/go-cqhttp/GoCQHTTPGetModelShow.ts b/src/onebot/action/go-cqhttp/GoCQHTTPGetModelShow.ts index 811e3d62..2e61f13d 100644 --- a/src/onebot/action/go-cqhttp/GoCQHTTPGetModelShow.ts +++ b/src/onebot/action/go-cqhttp/GoCQHTTPGetModelShow.ts @@ -1,14 +1,12 @@ import { OneBotAction } from '@/onebot/action/OneBotAction'; import { ActionName } from '@/onebot/action/router'; -import { FromSchema, JSONSchema } from 'json-schema-to-ts'; +import { Static, Type } from '@sinclair/typebox'; -const SchemaData = { - type: 'object', - properties: { - model: { type: 'string' }, - } -} as const satisfies JSONSchema; -type Payload = FromSchema; +const SchemaData = Type.Object({ + model: Type.String(), +}); + +type Payload = Static; export class GoCQHTTPGetModelShow extends OneBotAction { actionName = ActionName.GoCQHTTP_GetModelShow; diff --git a/src/onebot/action/go-cqhttp/GoCQHTTPSetModelShow.ts b/src/onebot/action/go-cqhttp/GoCQHTTPSetModelShow.ts index 3bc9141f..17ef253b 100644 --- a/src/onebot/action/go-cqhttp/GoCQHTTPSetModelShow.ts +++ b/src/onebot/action/go-cqhttp/GoCQHTTPSetModelShow.ts @@ -1,19 +1,10 @@ import { OneBotAction } from '@/onebot/action/OneBotAction'; import { ActionName } from '@/onebot/action/router'; -import { FromSchema, JSONSchema } from 'json-schema-to-ts'; - -const SchemaData = { - type: 'object', - properties: {}, -} as const satisfies JSONSchema; -type Payload = FromSchema; - //兼容性代码 -export class GoCQHTTPSetModelShow extends OneBotAction { +export class GoCQHTTPSetModelShow extends OneBotAction { actionName = ActionName.GoCQHTTP_SetModelShow; - payloadSchema = SchemaData; - async _handle(payload: Payload) { + async _handle(payload: void) { return null; } } diff --git a/src/onebot/action/go-cqhttp/SendGroupNotice.ts b/src/onebot/action/go-cqhttp/SendGroupNotice.ts index c30a50c8..b36146a8 100644 --- a/src/onebot/action/go-cqhttp/SendGroupNotice.ts +++ b/src/onebot/action/go-cqhttp/SendGroupNotice.ts @@ -2,24 +2,20 @@ import { checkFileExist, uri2local } from '@/common/file'; import { OneBotAction } from '@/onebot/action/OneBotAction'; import { ActionName } from '@/onebot/action/router'; import { unlink } from 'node:fs'; -import { FromSchema, JSONSchema } from 'json-schema-to-ts'; +import { Static, Type } from '@sinclair/typebox'; -const SchemaData = { - type: 'object', - properties: { - group_id: { type: ['number', 'string'] }, - content: { type: 'string' }, - image: { type: 'string' }, - pinned: { type: ['number', 'string'] }, - type: { type: ['number', 'string'] }, - confirm_required: { type: ['number', 'string'] }, - is_show_edit_card: { type: ['number', 'string'] }, - tip_window_type: { type: ['number', 'string'] }, - }, - required: ['group_id', 'content'], -} as const satisfies JSONSchema; +const SchemaData = Type.Object({ + group_id: Type.Union([Type.Number(), Type.String()]), + content: Type.String(), + image: Type.Optional(Type.String()), + pinned: Type.Union([Type.Number(), Type.String()], { default: 0 }), + type: Type.Union([Type.Number(), Type.String()], { default: 1 }), + confirm_required: Type.Union([Type.Number(), Type.String()], { default: 1 }), + is_show_edit_card: Type.Union([Type.Number(), Type.String()], { default: 0 }), + tip_window_type: Type.Union([Type.Number(), Type.String()], { default: 0 }) +}); -type Payload = FromSchema; +type Payload = Static; export class SendGroupNotice extends OneBotAction { actionName = ActionName.GoCQHTTP_SendGroupNotice; @@ -50,21 +46,14 @@ export class SendGroupNotice extends OneBotAction { UploadImage = ImageUploadResult.picInfo; } - - const noticeType = +(payload.type ?? 1); - const noticePinned = +(payload.pinned ?? 0); - - const noticeShowEditCard = +(payload.is_show_edit_card ?? 0); - const noticeTipWindowType = +(payload.tip_window_type ?? 0); - const noticeConfirmRequired = +(payload.confirm_required ?? 1); const publishGroupBulletinResult = await this.core.apis.WebApi.setGroupNotice( payload.group_id.toString(), payload.content, - noticePinned, - noticeType, - noticeShowEditCard, - noticeTipWindowType, - noticeConfirmRequired, + +payload.pinned, + +payload.type, + +payload.is_show_edit_card, + +payload.tip_window_type, + +payload.confirm_required, UploadImage?.id, UploadImage?.width, UploadImage?.height diff --git a/src/onebot/action/go-cqhttp/SetGroupPortrait.ts b/src/onebot/action/go-cqhttp/SetGroupPortrait.ts index fc86a92c..9845aad7 100644 --- a/src/onebot/action/go-cqhttp/SetGroupPortrait.ts +++ b/src/onebot/action/go-cqhttp/SetGroupPortrait.ts @@ -2,28 +2,19 @@ import { OneBotAction } from '@/onebot/action/OneBotAction'; import { ActionName, BaseCheckResult } from '@/onebot/action/router'; import * as fs from 'node:fs'; import { checkFileExistV2, uri2local } from '@/common/file'; +import { Static, Type } from '@sinclair/typebox'; -interface Payload { - file: string, - group_id: number -} +const SchemaData = Type.Object({ + file: Type.String(), + group_id: Type.Union([Type.Number(), Type.String()]) +}); + +type Payload = Static; export default class SetGroupPortrait extends OneBotAction { actionName = ActionName.SetGroupPortrait; - - // 用不着复杂检测 - protected async check(payload: Payload): Promise { - if (!payload.file || typeof payload.file != 'string' || !payload.group_id || typeof payload.group_id != 'number') { - return { - valid: false, - message: 'file和group_id字段不能为空或者类型错误', - }; - } - return { - valid: true, - }; - } - + payloadSchema = SchemaData; + async _handle(payload: Payload): Promise { const { path, success } = (await uri2local(this.core.NapCatTempPath, payload.file)); if (!success) { diff --git a/src/onebot/action/go-cqhttp/SetQQProfile.ts b/src/onebot/action/go-cqhttp/SetQQProfile.ts index 6062e0a8..21b0623a 100644 --- a/src/onebot/action/go-cqhttp/SetQQProfile.ts +++ b/src/onebot/action/go-cqhttp/SetQQProfile.ts @@ -1,18 +1,14 @@ import { OneBotAction } from '@/onebot/action/OneBotAction'; import { ActionName } from '@/onebot/action/router'; -import { FromSchema, JSONSchema } from 'json-schema-to-ts'; +import { Static, Type } from '@sinclair/typebox'; -const SchemaData = { - type: 'object', - properties: { - nickname: { type: 'string' }, - personal_note: { type: 'string' }, - sex: { type: ['number', 'string'] },//传Sex值?建议传0 - }, - required: ['nickname'], -} as const satisfies JSONSchema; +const SchemaData = Type.Object({ + nickname: Type.String(), + personal_note: Type.Optional(Type.String()), + sex: Type.Optional(Type.Union([Type.Number(), Type.String()])), // 传Sex值?建议传0 +}); -type Payload = FromSchema; +type Payload = Static; export class SetQQProfile extends OneBotAction { actionName = ActionName.SetQQProfile; diff --git a/src/onebot/action/go-cqhttp/UploadGroupFile.ts b/src/onebot/action/go-cqhttp/UploadGroupFile.ts index f526e816..62e5cf70 100644 --- a/src/onebot/action/go-cqhttp/UploadGroupFile.ts +++ b/src/onebot/action/go-cqhttp/UploadGroupFile.ts @@ -3,22 +3,18 @@ import { ActionName } from '@/onebot/action/router'; import { ChatType, Peer } from '@/core/types'; import fs from 'fs'; import { uri2local } from '@/common/file'; -import { FromSchema, JSONSchema } from 'json-schema-to-ts'; -import { MessageContext } from '@/onebot/api'; +import { SendMessageContext } from '@/onebot/api'; +import { Static, Type } from '@sinclair/typebox'; -const SchemaData = { - type: 'object', - properties: { - group_id: { type: ['number', 'string'] }, - file: { type: 'string' }, - name: { type: 'string' }, - folder: { type: 'string' }, - folder_id: { type: 'string' },//临时扩展 - }, - required: ['group_id', 'file', 'name'], -} as const satisfies JSONSchema; +const SchemaData = Type.Object({ + group_id: Type.Union([Type.Number(), Type.String()]), + file: Type.String(), + name: Type.String(), + folder: Type.Optional(Type.String()), + folder_id: Type.Optional(Type.String()),//临时扩展 +}); -type Payload = FromSchema; +type Payload = Static; export default class GoCQHTTPUploadGroupFile extends OneBotAction { actionName = ActionName.GoCQHTTP_UploadGroupFile; @@ -37,7 +33,7 @@ export default class GoCQHTTPUploadGroupFile extends OneBotAction if (!downloadResult.success) { throw new Error(downloadResult.errMsg); } - const msgContext: MessageContext = { + const msgContext: SendMessageContext = { peer: peer, deleteAfterSentFiles: [] }; diff --git a/src/onebot/action/go-cqhttp/UploadPrivateFile.ts b/src/onebot/action/go-cqhttp/UploadPrivateFile.ts index 97c20278..4633162e 100644 --- a/src/onebot/action/go-cqhttp/UploadPrivateFile.ts +++ b/src/onebot/action/go-cqhttp/UploadPrivateFile.ts @@ -3,21 +3,17 @@ import { ActionName } from '@/onebot/action/router'; import { ChatType, Peer, SendFileElement } from '@/core/types'; import fs from 'fs'; import { uri2local } from '@/common/file'; -import { FromSchema, JSONSchema } from 'json-schema-to-ts'; -import { MessageContext } from '@/onebot/api'; +import { SendMessageContext } from '@/onebot/api'; import { ContextMode, createContext } from '@/onebot/action/msg/SendMsg'; +import { Static, Type } from '@sinclair/typebox'; -const SchemaData = { - type: 'object', - properties: { - user_id: { type: ['number', 'string'] }, - file: { type: 'string' }, - name: { type: 'string' }, - }, - required: ['user_id', 'file', 'name'], -} as const satisfies JSONSchema; +const SchemaData = Type.Object({ + user_id: Type.Union([Type.Number(), Type.String()]), + file: Type.String(), + name: Type.String(), +}); -type Payload = FromSchema; +type Payload = Static; export default class GoCQHTTPUploadPrivateFile extends OneBotAction { actionName = ActionName.GOCQHTTP_UploadPrivateFile; @@ -45,7 +41,7 @@ export default class GoCQHTTPUploadPrivateFile extends OneBotAction; +type Payload = Static; export default class DelEssenceMsg extends OneBotAction { actionName = ActionName.DelEssenceMsg; diff --git a/src/onebot/action/group/DelGroupNotice.ts b/src/onebot/action/group/DelGroupNotice.ts index 56ecfa4b..5b932ebf 100644 --- a/src/onebot/action/group/DelGroupNotice.ts +++ b/src/onebot/action/group/DelGroupNotice.ts @@ -1,18 +1,13 @@ import { OneBotAction } from '@/onebot/action/OneBotAction'; import { ActionName } from '@/onebot/action/router'; -import { FromSchema, JSONSchema } from 'json-schema-to-ts'; +import { Static, Type } from '@sinclair/typebox'; +const SchemaData = Type.Object({ + group_id: Type.Union([Type.Number(), Type.String()]), + notice_id: Type.String() +}); -const SchemaData = { - type: 'object', - properties: { - group_id: { type: ['number', 'string'] }, - notice_id: { type: 'string' }, - }, - required: ['group_id', 'notice_id'], -} as const satisfies JSONSchema; - -type Payload = FromSchema; +type Payload = Static; export class DelGroupNotice extends OneBotAction { actionName = ActionName.DelGroupNotice; diff --git a/src/onebot/action/group/GetAiRecord.ts b/src/onebot/action/group/GetAiRecord.ts index d1659875..15e1f094 100644 --- a/src/onebot/action/group/GetAiRecord.ts +++ b/src/onebot/action/group/GetAiRecord.ts @@ -1,19 +1,15 @@ import { ActionName } from '@/onebot/action/router'; -import { FromSchema, JSONSchema } from 'json-schema-to-ts'; import { GetPacketStatusDepends } from "@/onebot/action/packet/GetPacketStatus"; import { AIVoiceChatType } from "@/core/packet/entities/aiChat"; +import { Static, Type } from '@sinclair/typebox'; -const SchemaData = { - type: 'object', - properties: { - character: { type: ['string'] }, - group_id: { type: ['number', 'string'] }, - text: { type: 'string' }, - }, - required: ['character', 'group_id', 'text'], -} as const satisfies JSONSchema; +const SchemaData = Type.Object({ + character: Type.String(), + group_id: Type.Union([Type.Number(), Type.String()]), + text: Type.String(), +}); -type Payload = FromSchema; +type Payload = Static; export class GetAiRecord extends GetPacketStatusDepends { actionName = ActionName.GetAiRecord; diff --git a/src/onebot/action/group/GetGroupEssence.ts b/src/onebot/action/group/GetGroupEssence.ts index e1cc760c..579d2d5e 100644 --- a/src/onebot/action/group/GetGroupEssence.ts +++ b/src/onebot/action/group/GetGroupEssence.ts @@ -1,20 +1,16 @@ import { ChatType, Peer } from '@/core'; import { OneBotAction } from '@/onebot/action/OneBotAction'; import { ActionName } from '@/onebot/action/router'; -import { FromSchema, JSONSchema } from 'json-schema-to-ts'; import { MessageUnique } from '@/common/message-unique'; import crypto from 'crypto'; import { AdapterConfigWrap } from '@/onebot/config/config'; +import { Static, Type } from '@sinclair/typebox'; -const SchemaData = { - type: 'object', - properties: { - group_id: { type: ['number', 'string'] } - }, - required: ['group_id'], -} as const satisfies JSONSchema; +const SchemaData = Type.Object({ + group_id: Type.Union([Type.Number(), Type.String()]), +}); -type Payload = FromSchema; +type Payload = Static; export class GetGroupEssence extends OneBotAction { actionName = ActionName.GoCQHTTP_GetEssenceMsg; diff --git a/src/onebot/action/group/GetGroupIgnoredNotifies.ts b/src/onebot/action/group/GetGroupIgnoredNotifies.ts index b5a5e134..0faa1826 100644 --- a/src/onebot/action/group/GetGroupIgnoredNotifies.ts +++ b/src/onebot/action/group/GetGroupIgnoredNotifies.ts @@ -1,17 +1,6 @@ import { GroupNotifyMsgStatus } from '@/core'; import { OneBotAction } from '@/onebot/action/OneBotAction'; import { ActionName } from '@/onebot/action/router'; -import { FromSchema, JSONSchema } from 'json-schema-to-ts'; - -const SchemaData = { - type: 'object', - properties: { - group_id: { type: ['number', 'string'] }, - }, -} as const satisfies JSONSchema; - -type Payload = FromSchema; - export class GetGroupIgnoredNotifies extends OneBotAction { actionName = ActionName.GetGroupIgnoredNotifies; diff --git a/src/onebot/action/group/GetGroupInfo.ts b/src/onebot/action/group/GetGroupInfo.ts index ead464c9..6af13419 100644 --- a/src/onebot/action/group/GetGroupInfo.ts +++ b/src/onebot/action/group/GetGroupInfo.ts @@ -2,17 +2,13 @@ import { OB11Group } from '@/onebot'; import { OB11Construct } from '@/onebot/helper/data'; import { OneBotAction } from '@/onebot/action/OneBotAction'; import { ActionName } from '@/onebot/action/router'; -import { FromSchema, JSONSchema } from 'json-schema-to-ts'; +import { Static, Type } from '@sinclair/typebox'; -const SchemaData = { - type: 'object', - properties: { - group_id: { type: ['number', 'string'] }, - }, - required: ['group_id'], -} as const satisfies JSONSchema; +const SchemaData = Type.Object({ + group_id: Type.Union([Type.Number(), Type.String()]), +}); -type Payload = FromSchema; +type Payload = Static; class GetGroupInfo extends OneBotAction { actionName = ActionName.GetGroupInfo; diff --git a/src/onebot/action/group/GetGroupList.ts b/src/onebot/action/group/GetGroupList.ts index b4792207..4a34128d 100644 --- a/src/onebot/action/group/GetGroupList.ts +++ b/src/onebot/action/group/GetGroupList.ts @@ -2,16 +2,13 @@ import { OB11Group } from '@/onebot'; import { OB11Construct } from '@/onebot/helper/data'; import { OneBotAction } from '@/onebot/action/OneBotAction'; import { ActionName } from '@/onebot/action/router'; -import { FromSchema, JSONSchema } from 'json-schema-to-ts'; -// no_cache get时传字符串 -const SchemaData = { - type: 'object', - properties: { - no_cache: { type: ['boolean', 'string'] }, - }, -} as const satisfies JSONSchema; +import { Static, Type } from '@sinclair/typebox'; -type Payload = FromSchema; +const SchemaData = Type.Object({ + no_cache: Type.Optional(Type.Union([Type.Boolean(), Type.String()])), +}); + +type Payload = Static; class GetGroupList extends OneBotAction { actionName = ActionName.GetGroupList; diff --git a/src/onebot/action/group/GetGroupMemberInfo.ts b/src/onebot/action/group/GetGroupMemberInfo.ts index 8cacd2a0..d136c938 100644 --- a/src/onebot/action/group/GetGroupMemberInfo.ts +++ b/src/onebot/action/group/GetGroupMemberInfo.ts @@ -2,19 +2,15 @@ import { OB11GroupMember } from '@/onebot'; import { OB11Construct } from '@/onebot/helper/data'; import { OneBotAction } from '@/onebot/action/OneBotAction'; import { ActionName } from '@/onebot/action/router'; -import { FromSchema, JSONSchema } from 'json-schema-to-ts'; +import { Static, Type } from '@sinclair/typebox'; -const SchemaData = { - type: 'object', - properties: { - group_id: { type: ['number', 'string'] }, - user_id: { type: ['number', 'string'] }, - no_cache: { type: ['boolean', 'string'] }, - }, - required: ['group_id', 'user_id'], -} as const satisfies JSONSchema; +const SchemaData = Type.Object({ + group_id: Type.Union([Type.Number(), Type.String()]), + user_id: Type.Union([Type.Number(), Type.String()]), + no_cache: Type.Optional(Type.Union([Type.Boolean(), Type.String()])), +}); -type Payload = FromSchema; +type Payload = Static; class GetGroupMemberInfo extends OneBotAction { actionName = ActionName.GetGroupMemberInfo; diff --git a/src/onebot/action/group/GetGroupMemberList.ts b/src/onebot/action/group/GetGroupMemberList.ts index 9c7d4df5..451ae6e1 100644 --- a/src/onebot/action/group/GetGroupMemberList.ts +++ b/src/onebot/action/group/GetGroupMemberList.ts @@ -2,18 +2,14 @@ import { OB11GroupMember } from '@/onebot'; import { OB11Construct } from '@/onebot/helper/data'; import { OneBotAction } from '@/onebot/action/OneBotAction'; import { ActionName } from '@/onebot/action/router'; -import { FromSchema, JSONSchema } from 'json-schema-to-ts'; +import { Static, Type } from '@sinclair/typebox'; -const SchemaData = { - type: 'object', - properties: { - group_id: { type: ['number', 'string'] }, - no_cache: { type: ['boolean', 'string'] }, - }, - required: ['group_id'], -} as const satisfies JSONSchema; +const SchemaData = Type.Object({ + group_id: Type.Union([Type.Number(), Type.String()]), + no_cache: Type.Optional(Type.Union([Type.Boolean(), Type.String()])) +}); -type Payload = FromSchema; +type Payload = Static; export class GetGroupMemberList extends OneBotAction { actionName = ActionName.GetGroupMemberList; diff --git a/src/onebot/action/group/GetGroupNotice.ts b/src/onebot/action/group/GetGroupNotice.ts index ffaa858c..84aa42c2 100644 --- a/src/onebot/action/group/GetGroupNotice.ts +++ b/src/onebot/action/group/GetGroupNotice.ts @@ -1,8 +1,7 @@ import { WebApiGroupNoticeFeed } from '@/core'; import { OneBotAction } from '@/onebot/action/OneBotAction'; import { ActionName } from '@/onebot/action/router'; -import { FromSchema, JSONSchema } from 'json-schema-to-ts'; - +import { Static, Type } from '@sinclair/typebox'; interface GroupNotice { sender_id: number; publish_time: number; @@ -17,15 +16,11 @@ interface GroupNotice { }; } -const SchemaData = { - type: 'object', - properties: { - group_id: { type: ['number', 'string'] }, - }, - required: ['group_id'], -} as const satisfies JSONSchema; +const SchemaData = Type.Object({ + group_id: Type.Union([Type.Number(), Type.String()]), +}); -type Payload = FromSchema; +type Payload = Static; type ApiGroupNotice = GroupNotice & WebApiGroupNoticeFeed; diff --git a/src/onebot/action/group/GetGroupShutList.ts b/src/onebot/action/group/GetGroupShutList.ts index 22e8cf7e..683a8c6b 100644 --- a/src/onebot/action/group/GetGroupShutList.ts +++ b/src/onebot/action/group/GetGroupShutList.ts @@ -1,16 +1,12 @@ import { OneBotAction } from '@/onebot/action/OneBotAction'; import { ActionName } from '@/onebot/action/router'; -import { FromSchema, JSONSchema } from 'json-schema-to-ts'; +import { Static, Type } from '@sinclair/typebox'; -const SchemaData = { - type: 'object', - properties: { - group_id: { type: ['number', 'string'] }, - }, - required: ['group_id'], -} as const satisfies JSONSchema; +const SchemaData = Type.Object({ + group_id: Type.Union([Type.Number(), Type.String()]), +}); -type Payload = FromSchema; +type Payload = Static; export class GetGroupShutList extends OneBotAction { actionName = ActionName.GetGroupShutList; diff --git a/src/onebot/action/group/GroupPoke.ts b/src/onebot/action/group/GroupPoke.ts index 2281a194..4db865f6 100644 --- a/src/onebot/action/group/GroupPoke.ts +++ b/src/onebot/action/group/GroupPoke.ts @@ -1,17 +1,13 @@ import { ActionName } from '@/onebot/action/router'; -import { FromSchema, JSONSchema } from 'json-schema-to-ts'; import { GetPacketStatusDepends } from "@/onebot/action/packet/GetPacketStatus"; -// no_cache get时传字符串 -const SchemaData = { - type: 'object', - properties: { - group_id: { type: ['number', 'string'] }, - user_id: { type: ['number', 'string'] }, - }, - required: ['group_id', 'user_id'], -} as const satisfies JSONSchema; +import { Static, Type } from '@sinclair/typebox'; -type Payload = FromSchema; +const SchemaData = Type.Object({ + group_id: Type.Union([Type.Number(), Type.String()]), + user_id: Type.Union([Type.Number(), Type.String()]), +}); + +type Payload = Static; export class GroupPoke extends GetPacketStatusDepends { actionName = ActionName.GroupPoke; diff --git a/src/onebot/action/group/SendGroupAiRecord.ts b/src/onebot/action/group/SendGroupAiRecord.ts index f6199af1..e76c70e0 100644 --- a/src/onebot/action/group/SendGroupAiRecord.ts +++ b/src/onebot/action/group/SendGroupAiRecord.ts @@ -1,21 +1,18 @@ import { ActionName } from '@/onebot/action/router'; -import { FromSchema, JSONSchema } from 'json-schema-to-ts'; import { GetPacketStatusDepends } from "@/onebot/action/packet/GetPacketStatus"; import { uri2local } from "@/common/file"; import { ChatType, Peer } from "@/core"; import { AIVoiceChatType } from "@/core/packet/entities/aiChat"; +import { Static, Type } from '@sinclair/typebox'; -const SchemaData = { - type: 'object', - properties: { - character: { type: ['string'] }, - group_id: { type: ['number', 'string'] }, - text: { type: 'string' }, - }, - required: ['character', 'group_id', 'text'], -} as const satisfies JSONSchema; +const SchemaData = Type.Object({ + character: Type.String(), + group_id: Type.Union([Type.Number(), Type.String()]), + text: Type.String(), +}); + +type Payload = Static; -type Payload = FromSchema; export class SendGroupAiRecord extends GetPacketStatusDepends; +type Payload = Static; export default class SetEssenceMsg extends OneBotAction { actionName = ActionName.SetEssenceMsg; payloadSchema = SchemaData; async _handle(payload: Payload): Promise { - const msg = MessageUnique.getMsgIdAndPeerByShortId(parseInt(payload.message_id.toString())); + const msg = MessageUnique.getMsgIdAndPeerByShortId(+payload.message_id); if (!msg) { throw new Error('msg not found'); } diff --git a/src/onebot/action/group/SetGroupAddRequest.ts b/src/onebot/action/group/SetGroupAddRequest.ts index 9c447d84..af64a653 100644 --- a/src/onebot/action/group/SetGroupAddRequest.ts +++ b/src/onebot/action/group/SetGroupAddRequest.ts @@ -1,19 +1,15 @@ import { OneBotAction } from '@/onebot/action/OneBotAction'; import { NTGroupRequestOperateTypes } from '@/core/types'; import { ActionName } from '@/onebot/action/router'; -import { FromSchema, JSONSchema } from 'json-schema-to-ts'; +import { Static, Type } from '@sinclair/typebox'; -const SchemaData = { - type: 'object', - properties: { - flag: { type: 'string' }, - approve: { type: ['string', 'boolean'] }, - reason: { type: 'string', nullable: true }, - }, - required: ['flag'], -} as const satisfies JSONSchema; +const SchemaData = Type.Object({ + flag: Type.String(), + approve: Type.Optional(Type.Union([Type.Boolean(), Type.String()])), + reason: Type.String({ default: ' ' }), +}); -type Payload = FromSchema; +type Payload = Static; export default class SetGroupAddRequest extends OneBotAction { actionName = ActionName.SetGroupAddRequest; @@ -24,7 +20,7 @@ export default class SetGroupAddRequest extends OneBotAction { const approve = payload.approve?.toString() !== 'false'; await this.core.apis.GroupApi.handleGroupRequest(flag, approve ? NTGroupRequestOperateTypes.KAGREE : NTGroupRequestOperateTypes.KREFUSE, - payload.reason ?? ' ', + payload.reason, ); return null; } diff --git a/src/onebot/action/group/SetGroupAdmin.ts b/src/onebot/action/group/SetGroupAdmin.ts index 5c33a32c..42348791 100644 --- a/src/onebot/action/group/SetGroupAdmin.ts +++ b/src/onebot/action/group/SetGroupAdmin.ts @@ -1,19 +1,15 @@ import { OneBotAction } from '@/onebot/action/OneBotAction'; import { NTGroupMemberRole } from '@/core/types'; import { ActionName } from '@/onebot/action/router'; -import { FromSchema, JSONSchema } from 'json-schema-to-ts'; +import { Static, Type } from '@sinclair/typebox'; -const SchemaData = { - type: 'object', - properties: { - group_id: { type: ['number', 'string'] }, - user_id: { type: ['number', 'string'] }, - enable: { type: ['boolean', 'string'] }, - }, - required: ['group_id', 'user_id'], -} as const satisfies JSONSchema; +const SchemaData = Type.Object({ + group_id: Type.Union([Type.Number(), Type.String()]), + user_id: Type.Union([Type.Number(), Type.String()]), + enable: Type.Optional(Type.Union([Type.Boolean(), Type.String()])), +}); -type Payload = FromSchema; +type Payload = Static; export default class SetGroupAdmin extends OneBotAction { actionName = ActionName.SetGroupAdmin; diff --git a/src/onebot/action/group/SetGroupBan.ts b/src/onebot/action/group/SetGroupBan.ts index ed9ea36d..88687582 100644 --- a/src/onebot/action/group/SetGroupBan.ts +++ b/src/onebot/action/group/SetGroupBan.ts @@ -1,18 +1,14 @@ import { OneBotAction } from '@/onebot/action/OneBotAction'; import { ActionName } from '@/onebot/action/router'; -import { FromSchema, JSONSchema } from 'json-schema-to-ts'; +import { Static, Type } from '@sinclair/typebox'; -const SchemaData = { - type: 'object', - properties: { - group_id: { type: ['number', 'string'] }, - user_id: { type: ['number', 'string'] }, - duration: { type: ['number', 'string'] }, - }, - required: ['group_id', 'user_id', 'duration'], -} as const satisfies JSONSchema; +const SchemaData = Type.Object({ + group_id: Type.Union([Type.Number(), Type.String()]), + user_id: Type.Union([Type.Number(), Type.String()]), + duration: Type.Union([Type.Number(), Type.String()], { default: 0 }), +}); -type Payload = FromSchema; +type Payload = Static; export default class SetGroupBan extends OneBotAction { actionName = ActionName.SetGroupBan; diff --git a/src/onebot/action/group/SetGroupCard.ts b/src/onebot/action/group/SetGroupCard.ts index c889b6b5..03a1b844 100644 --- a/src/onebot/action/group/SetGroupCard.ts +++ b/src/onebot/action/group/SetGroupCard.ts @@ -1,18 +1,14 @@ import { OneBotAction } from '@/onebot/action/OneBotAction'; import { ActionName } from '@/onebot/action/router'; -import { FromSchema, JSONSchema } from 'json-schema-to-ts'; +import { Static, Type } from '@sinclair/typebox'; -const SchemaData = { - type: 'object', - properties: { - group_id: { type: ['number', 'string'] }, - user_id: { type: ['number', 'string'] }, - card: { type: 'string' }, - }, - required: ['group_id', 'user_id', 'card'], -} as const satisfies JSONSchema; +const SchemaData = Type.Object({ + group_id: Type.Union([Type.Number(), Type.String()]), + user_id: Type.Union([Type.Number(), Type.String()]), + card: Type.Optional(Type.String()) +}); -type Payload = FromSchema; +type Payload = Static; export default class SetGroupCard extends OneBotAction { actionName = ActionName.SetGroupCard; diff --git a/src/onebot/action/group/SetGroupKick.ts b/src/onebot/action/group/SetGroupKick.ts index 90919d33..339350f0 100644 --- a/src/onebot/action/group/SetGroupKick.ts +++ b/src/onebot/action/group/SetGroupKick.ts @@ -1,19 +1,14 @@ import { OneBotAction } from '@/onebot/action/OneBotAction'; import { ActionName } from '@/onebot/action/router'; -import { FromSchema, JSONSchema } from 'json-schema-to-ts'; +import { Static, Type } from '@sinclair/typebox'; +const SchemaData = Type.Object({ + group_id: Type.Union([Type.Number(), Type.String()]), + user_id: Type.Union([Type.Number(), Type.String()]), + reject_add_request: Type.Optional(Type.Union([Type.Boolean(), Type.String()])), +}); -const SchemaData = { - type: 'object', - properties: { - group_id: { type: ['number', 'string'] }, - user_id: { type: ['number', 'string'] }, - reject_add_request: { type: ['boolean', 'string'] }, - }, - required: ['group_id', 'user_id'], -} as const satisfies JSONSchema; - -type Payload = FromSchema; +type Payload = Static; export default class SetGroupKick extends OneBotAction { actionName = ActionName.SetGroupKick; diff --git a/src/onebot/action/group/SetGroupLeave.ts b/src/onebot/action/group/SetGroupLeave.ts index d46a6b65..6618d9cd 100644 --- a/src/onebot/action/group/SetGroupLeave.ts +++ b/src/onebot/action/group/SetGroupLeave.ts @@ -1,17 +1,14 @@ import { OneBotAction } from '@/onebot/action/OneBotAction'; import { ActionName } from '@/onebot/action/router'; -import { FromSchema, JSONSchema } from 'json-schema-to-ts'; +import { Static, Type } from '@sinclair/typebox'; -const SchemaData = { - type: 'object', - properties: { - group_id: { type: ['number', 'string'] }, - is_dismiss: { type: ['boolean', 'string'] }, - }, - required: ['group_id'], -} as const satisfies JSONSchema; +const SchemaData = Type.Object({ + group_id: Type.Union([Type.Number(), Type.String()]), + is_dismiss: Type.Optional(Type.Union([Type.Boolean(), Type.String()])), +}); + +type Payload = Static; -type Payload = FromSchema; export default class SetGroupLeave extends OneBotAction { actionName = ActionName.SetGroupLeave; payloadSchema = SchemaData; diff --git a/src/onebot/action/group/SetGroupName.ts b/src/onebot/action/group/SetGroupName.ts index 719649c5..0820d39b 100644 --- a/src/onebot/action/group/SetGroupName.ts +++ b/src/onebot/action/group/SetGroupName.ts @@ -1,23 +1,21 @@ -import { FromSchema, JSONSchema } from 'json-schema-to-ts'; + import { OneBotAction } from '@/onebot/action/OneBotAction'; import { ActionName } from '@/onebot/action/router'; +import { Static, Type } from '@sinclair/typebox'; -const SchemaData = { - type: 'object', - properties: { - group_id: { type: ['number', 'string'] }, - group_name: { type: 'string' }, - }, - required: ['group_id', 'group_name'], -} as const satisfies JSONSchema; +const SchemaData = Type.Object({ + group_id: Type.Union([Type.Number(), Type.String()]), + group_name: Type.String(), +}); + +type Payload = Static; -type Payload = FromSchema; export default class SetGroupName extends OneBotAction { actionName = ActionName.SetGroupName; payloadSchema = SchemaData; async _handle(payload: Payload): Promise { - let ret = await this.core.apis.GroupApi.setGroupName(payload.group_id.toString(), payload.group_name); + const ret = await this.core.apis.GroupApi.setGroupName(payload.group_id.toString(), payload.group_name); if (ret.result !== 0) { throw new Error(`设置群名称失败 ErrCode: ${ret.result} ErrMsg: ${ret.errMsg}`); } diff --git a/src/onebot/action/group/SetGroupWholeBan.ts b/src/onebot/action/group/SetGroupWholeBan.ts index 9b460c38..af9c5025 100644 --- a/src/onebot/action/group/SetGroupWholeBan.ts +++ b/src/onebot/action/group/SetGroupWholeBan.ts @@ -1,17 +1,13 @@ -import { FromSchema, JSONSchema } from 'json-schema-to-ts'; import { OneBotAction } from '@/onebot/action/OneBotAction'; import { ActionName } from '@/onebot/action/router'; +import { Static, Type } from '@sinclair/typebox'; -const SchemaData = { - type: 'object', - properties: { - group_id: { type: ['number', 'string'] }, - enable: { type: ['boolean', 'string'] }, - }, - required: ['group_id'], -} as const satisfies JSONSchema; +const SchemaData = Type.Object({ + group_id: Type.Union([Type.Number(), Type.String()]), + enable: Type.Optional(Type.Union([Type.Boolean(), Type.String()])), +}); -type Payload = FromSchema; +type Payload = Static; export default class SetGroupWholeBan extends OneBotAction { actionName = ActionName.SetGroupWholeBan; diff --git a/src/onebot/action/msg/DeleteMsg.ts b/src/onebot/action/msg/DeleteMsg.ts index c6dcd808..7636561d 100644 --- a/src/onebot/action/msg/DeleteMsg.ts +++ b/src/onebot/action/msg/DeleteMsg.ts @@ -1,22 +1,13 @@ import { ActionName } from '@/onebot/action/router'; import { OneBotAction } from '@/onebot/action/OneBotAction'; -import { FromSchema, JSONSchema } from 'json-schema-to-ts'; import { MessageUnique } from '@/common/message-unique'; +import { Static, Type } from '@sinclair/typebox'; -const SchemaData = { - type: 'object', - properties: { - message_id: { - oneOf: [ - { type: 'number' }, - { type: 'string' }, - ], - }, - }, - required: ['message_id'], -} as const satisfies JSONSchema; +const SchemaData = Type.Object({ + message_id: Type.Union([Type.Number(), Type.String()]), +}); -type Payload = FromSchema; +type Payload = Static; class DeleteMsg extends OneBotAction { actionName = ActionName.DeleteMsg; diff --git a/src/onebot/action/msg/ForwardSingleMsg.ts b/src/onebot/action/msg/ForwardSingleMsg.ts index beba68a7..f37bf4c9 100644 --- a/src/onebot/action/msg/ForwardSingleMsg.ts +++ b/src/onebot/action/msg/ForwardSingleMsg.ts @@ -1,20 +1,16 @@ import { OneBotAction } from '@/onebot/action/OneBotAction'; import { ChatType, Peer } from '@/core/types'; import { ActionName } from '@/onebot/action/router'; -import { FromSchema, JSONSchema } from 'json-schema-to-ts'; import { MessageUnique } from '@/common/message-unique'; +import { Static, Type } from '@sinclair/typebox'; -const SchemaData = { - type: 'object', - properties: { - message_id: { type: ['number', 'string'] }, - group_id: { type: ['number', 'string'] }, - user_id: { type: ['number', 'string'] }, - }, - required: ['message_id'], -} as const satisfies JSONSchema; +const SchemaData = Type.Object({ + message_id: Type.Union([Type.Number(), Type.String()]), + group_id: Type.Optional(Type.Union([Type.Number(), Type.String()])), + user_id: Type.Optional(Type.Union([Type.Number(), Type.String()])), +}); -type Payload = FromSchema; +type Payload = Static; class ForwardSingleMsg extends OneBotAction { protected async getTargetPeer(payload: Payload): Promise { diff --git a/src/onebot/action/msg/GetMsg.ts b/src/onebot/action/msg/GetMsg.ts index 32532fa2..3b4054bb 100644 --- a/src/onebot/action/msg/GetMsg.ts +++ b/src/onebot/action/msg/GetMsg.ts @@ -1,23 +1,18 @@ import { OB11Message } from '@/onebot'; import { OneBotAction } from '@/onebot/action/OneBotAction'; import { ActionName } from '@/onebot/action/router'; -import { FromSchema, JSONSchema } from 'json-schema-to-ts'; import { MessageUnique } from '@/common/message-unique'; import { RawMessage } from '@/core'; import { AdapterConfigWrap } from '@/onebot/config/config'; - +import { Static, Type } from '@sinclair/typebox'; export type ReturnDataType = OB11Message -const SchemaData = { - type: 'object', - properties: { - message_id: { type: ['number', 'string'] }, - }, - required: ['message_id'], -} as const satisfies JSONSchema; +const SchemaData = Type.Object({ + message_id: Type.Union([Type.Number(), Type.String()]), +}); -type Payload = FromSchema; +type Payload = Static; class GetMsg extends OneBotAction { actionName = ActionName.GetMsg; diff --git a/src/onebot/action/msg/MarkMsgAsRead.ts b/src/onebot/action/msg/MarkMsgAsRead.ts index 85e9aeb4..1769c8f1 100644 --- a/src/onebot/action/msg/MarkMsgAsRead.ts +++ b/src/onebot/action/msg/MarkMsgAsRead.ts @@ -1,19 +1,16 @@ import { ChatType, Peer } from '@/core/types'; -import { FromSchema, JSONSchema } from 'json-schema-to-ts'; import { OneBotAction } from '@/onebot/action/OneBotAction'; import { ActionName } from '@/onebot/action/router'; import { MessageUnique } from '@/common/message-unique'; +import { Static, Type } from '@sinclair/typebox'; -const SchemaData = { - type: 'object', - properties: { - user_id: { type: ['number', 'string'] }, - group_id: { type: ['number', 'string'] }, - message_id: { type: ['number', 'string'] }, - }, -} as const satisfies JSONSchema; +const SchemaData = Type.Object({ + user_id: Type.Optional(Type.Union([Type.String(), Type.Number()])), + group_id: Type.Optional(Type.Union([Type.String(), Type.Number()])), + message_id: Type.Optional(Type.Union([Type.String(), Type.Number()])), +}); -type PlayloadType = FromSchema; +type PlayloadType = Static; class MarkMsgAsRead extends OneBotAction { async getPeer(payload: PlayloadType): Promise { diff --git a/src/onebot/action/msg/SetMsgEmojiLike.ts b/src/onebot/action/msg/SetMsgEmojiLike.ts index a98114d4..1211a62b 100644 --- a/src/onebot/action/msg/SetMsgEmojiLike.ts +++ b/src/onebot/action/msg/SetMsgEmojiLike.ts @@ -1,19 +1,15 @@ import { ActionName } from '@/onebot/action/router'; import { OneBotAction } from '@/onebot/action/OneBotAction'; -import { FromSchema, JSONSchema } from 'json-schema-to-ts'; import { MessageUnique } from '@/common/message-unique'; +import { Static, Type } from '@sinclair/typebox'; -const SchemaData = { - type: 'object', - properties: { - message_id: { type: ['string', 'number'] }, - emoji_id: { type: ['string', 'number'] }, - set: { type: ['boolean', 'string'] } - }, - required: ['message_id', 'emoji_id'], -} as const satisfies JSONSchema; +const SchemaData = Type.Object({ + message_id: Type.Union([Type.Number(), Type.String()]), + emoji_id: Type.Union([Type.Number(), Type.String()]), + set: Type.Optional(Type.Union([Type.Boolean(), Type.String()])) +}); -type Payload = FromSchema; +type Payload = Static; export class SetMsgEmojiLike extends OneBotAction { actionName = ActionName.SetMsgEmojiLike; diff --git a/src/onebot/action/system/GetCredentials.ts b/src/onebot/action/system/GetCredentials.ts index b8173108..0e918d2a 100644 --- a/src/onebot/action/system/GetCredentials.ts +++ b/src/onebot/action/system/GetCredentials.ts @@ -1,21 +1,18 @@ import { OneBotAction } from '@/onebot/action/OneBotAction'; import { ActionName } from '@/onebot/action/router'; -import { FromSchema, JSONSchema } from 'json-schema-to-ts'; +import { Static, Type } from '@sinclair/typebox'; interface Response { cookies: string, token: number } -const SchemaData = { - type: 'object', - properties: { - domain: { type: 'string' }, - }, - required: ['domain'], -} as const satisfies JSONSchema; +const SchemaData = Type.Object({ + domain: Type.String() +}); + +type Payload = Static; -type Payload = FromSchema; export class GetCredentials extends OneBotAction { actionName = ActionName.GetCredentials; diff --git a/src/onebot/action/system/GetSystemMsg.ts b/src/onebot/action/system/GetSystemMsg.ts index adbdba65..435d17bb 100644 --- a/src/onebot/action/system/GetSystemMsg.ts +++ b/src/onebot/action/system/GetSystemMsg.ts @@ -1,21 +1,10 @@ import { GroupNotifyMsgStatus } from '@/core'; import { OneBotAction } from '@/onebot/action/OneBotAction'; import { ActionName } from '@/onebot/action/router'; -import { FromSchema, JSONSchema } from 'json-schema-to-ts'; - -const SchemaData = { - type: 'object', - properties: { - group_id: { type: ['number', 'string'] }, - }, -} as const satisfies JSONSchema; - -type Payload = FromSchema; - export class GetGroupSystemMsg extends OneBotAction { actionName = ActionName.GetGroupSystemMsg; - async _handle(payload: void) { + async _handle() { const NTQQUserApi = this.core.apis.UserApi; const NTQQGroupApi = this.core.apis.GroupApi; // 默认10条 该api未完整实现 包括响应数据规范化 类型规范化 diff --git a/src/onebot/action/user/FriendPoke.ts b/src/onebot/action/user/FriendPoke.ts index 35ca1ac3..923b504c 100644 --- a/src/onebot/action/user/FriendPoke.ts +++ b/src/onebot/action/user/FriendPoke.ts @@ -1,16 +1,12 @@ import { ActionName } from '@/onebot/action/router'; -import { FromSchema, JSONSchema } from 'json-schema-to-ts'; import { GetPacketStatusDepends } from "@/onebot/action/packet/GetPacketStatus"; +import { Static, Type } from '@sinclair/typebox'; -const SchemaData = { - type: 'object', - properties: { - user_id: { type: ['number', 'string'] }, - }, - required: ['user_id'], -} as const satisfies JSONSchema; +const SchemaData = Type.Object({ + user_id: Type.Union([Type.Number(), Type.String()]) +}); -type Payload = FromSchema; +type Payload = Static; export class FriendPoke extends GetPacketStatusDepends { actionName = ActionName.FriendPoke; diff --git a/src/onebot/action/user/GetCookies.ts b/src/onebot/action/user/GetCookies.ts index a82d98d8..49269c54 100644 --- a/src/onebot/action/user/GetCookies.ts +++ b/src/onebot/action/user/GetCookies.ts @@ -1,21 +1,16 @@ import { OneBotAction } from '@/onebot/action/OneBotAction'; import { ActionName } from '@/onebot/action/router'; -import { FromSchema, JSONSchema } from 'json-schema-to-ts'; - +import { Static, Type } from '@sinclair/typebox'; interface Response { cookies: string, bkn: string } -const SchemaData = { - type: 'object', - properties: { - domain: { type: 'string' }, - }, - required: ['domain'], -} as const satisfies JSONSchema; +const SchemaData = Type.Object({ + domain: Type.String() +}); -type Payload = FromSchema; +type Payload = Static; export class GetCookies extends OneBotAction { actionName = ActionName.GetCookies; diff --git a/src/onebot/action/user/GetFriendList.ts b/src/onebot/action/user/GetFriendList.ts index 79e063ef..d95099a8 100644 --- a/src/onebot/action/user/GetFriendList.ts +++ b/src/onebot/action/user/GetFriendList.ts @@ -2,17 +2,14 @@ import { OB11User } from '@/onebot'; import { OB11Construct } from '@/onebot/helper/data'; import { OneBotAction } from '@/onebot/action/OneBotAction'; import { ActionName } from '@/onebot/action/router'; -import { FromSchema, JSONSchema } from 'json-schema-to-ts'; +import { Static, Type } from '@sinclair/typebox'; -// no_cache get时传字符串 -const SchemaData = { - type: 'object', - properties: { - no_cache: { type: ['boolean', 'string'] }, - }, -} as const satisfies JSONSchema; +const SchemaData = Type.Object({ + no_cache: Type.Union([Type.Boolean(), Type.String()]), +}); + +type Payload = Static; -type Payload = FromSchema; export default class GetFriendList extends OneBotAction { actionName = ActionName.GetFriendList; payloadSchema = SchemaData; diff --git a/src/onebot/action/user/GetRecentContact.ts b/src/onebot/action/user/GetRecentContact.ts index 83f4338f..96a180fe 100644 --- a/src/onebot/action/user/GetRecentContact.ts +++ b/src/onebot/action/user/GetRecentContact.ts @@ -1,23 +1,21 @@ -import { FromSchema, JSONSchema } from 'json-schema-to-ts'; + import { OneBotAction } from '@/onebot/action/OneBotAction'; import { ActionName } from '@/onebot/action/router'; import { AdapterConfigWrap } from '@/onebot/config/config'; +import { Static, Type } from '@sinclair/typebox'; -const SchemaData = { - type: 'object', - properties: { - count: { type: ['number', 'string'] }, - }, -} as const satisfies JSONSchema; +const SchemaData = Type.Object({ + count: Type.Union([Type.Number(), Type.String()], { default: 10 }), +}); -type Payload = FromSchema; +type Payload = Static; export default class GetRecentContact extends OneBotAction { actionName = ActionName.GetRecentContact; payloadSchema = SchemaData; async _handle(payload: Payload, adapter: string) { - const ret = await this.core.apis.UserApi.getRecentContactListSnapShot(+(payload.count || 10)); + const ret = await this.core.apis.UserApi.getRecentContactListSnapShot(+payload.count); const network = Object.values(this.obContext.configLoader.configData.network) as Array; //烘焙消息 const msgFormat = network.flat().find(e => e.name === adapter)?.messagePostFormat ?? 'array'; diff --git a/src/onebot/action/user/SendLike.ts b/src/onebot/action/user/SendLike.ts index 099684c8..ee661cdd 100644 --- a/src/onebot/action/user/SendLike.ts +++ b/src/onebot/action/user/SendLike.ts @@ -1,17 +1,13 @@ import { OneBotAction } from '@/onebot/action/OneBotAction'; import { ActionName } from '@/onebot/action/router'; -import { FromSchema, JSONSchema } from 'json-schema-to-ts'; +import { Static, Type } from '@sinclair/typebox'; -const SchemaData = { - type: 'object', - properties: { - user_id: { type: ['number', 'string'] }, - times: { type: ['number', 'string'] }, - }, - required: ['user_id', 'times'], -} as const satisfies JSONSchema; +const SchemaData = Type.Object({ + times: Type.Union([Type.Number(), Type.String()], { default: 1 }), + user_id: Type.Union([Type.Number(), Type.String()]) +}); -type Payload = FromSchema; +type Payload = Static; export default class SendLike extends OneBotAction { actionName = ActionName.SendLike; @@ -20,7 +16,7 @@ export default class SendLike extends OneBotAction { async _handle(payload: Payload): Promise { const qq = payload.user_id.toString(); const uid: string = await this.core.apis.UserApi.getUidByUinV2(qq) ?? ''; - const result = await this.core.apis.UserApi.like(uid, parseInt(payload.times?.toString()) || 1); + const result = await this.core.apis.UserApi.like(uid, +payload.times); if (result.result !== 0) { throw new Error(`点赞失败 ${result.errMsg}`); } diff --git a/src/onebot/action/user/SetFriendAddRequest.ts b/src/onebot/action/user/SetFriendAddRequest.ts index 3aa58b75..1170b552 100644 --- a/src/onebot/action/user/SetFriendAddRequest.ts +++ b/src/onebot/action/user/SetFriendAddRequest.ts @@ -1,18 +1,14 @@ -import { FromSchema, JSONSchema } from 'json-schema-to-ts'; import { OneBotAction } from '@/onebot/action/OneBotAction'; import { ActionName } from '@/onebot/action/router'; +import { Static, Type } from '@sinclair/typebox'; -const SchemaData = { - type: 'object', - properties: { - flag: { type: 'string' }, - approve: { type: ['string', 'boolean'] }, - remark: { type: 'string' }, - }, - required: ['flag'], -} as const satisfies JSONSchema; +const SchemaData = Type.Object({ + flag: Type.String(), + approve: Type.Optional(Type.Union([Type.String(), Type.Boolean()])), + remark: Type.Optional(Type.String()) +}); -type Payload = FromSchema; +type Payload = Static; export default class SetFriendAddRequest extends OneBotAction { actionName = ActionName.SetFriendAddRequest;