diff --git a/src/core/apis/user.ts b/src/core/apis/user.ts index 2177feb9..64c1f799 100644 --- a/src/core/apis/user.ts +++ b/src/core/apis/user.ts @@ -46,6 +46,15 @@ export class NTQQUserApi { }); } + async setDiySelfOnlineStatus(faceId: string, wording: string, faceType: string) { + return this.context.session.getMsgService().setStatus({ + status: 10, + extStatus: 2000, + customStatus: { faceId: faceId, wording: wording, faceType: faceType }, + batteryStatus: 0 + }); + } + async getBuddyRecommendContactArkJson(uin: string, sencenID = '') { return this.context.session.getBuddyService().getBuddyRecommendContactArkJson(uin, sencenID); } diff --git a/src/core/services/NodeIKernelMsgService.ts b/src/core/services/NodeIKernelMsgService.ts index 0d0c9a44..e4f20ac8 100644 --- a/src/core/services/NodeIKernelMsgService.ts +++ b/src/core/services/NodeIKernelMsgService.ts @@ -30,7 +30,7 @@ export interface NodeIKernelMsgService { kickOffLine(DevInfo: unknown): unknown; - setStatus(args: { status: number, extStatus: number, batteryStatus: number }): Promise; + setStatus(args: { status: number, extStatus: number, batteryStatus: number, customStatus?: { faceId: string, wording: string, faceType: string } }): Promise; fetchStatusMgrInfo(): unknown; diff --git a/src/onebot/action/extends/SetDiyOnlineStatus.ts b/src/onebot/action/extends/SetDiyOnlineStatus.ts new file mode 100644 index 00000000..01066e50 --- /dev/null +++ b/src/onebot/action/extends/SetDiyOnlineStatus.ts @@ -0,0 +1,28 @@ +import { OneBotAction } from '@/onebot/action/OneBotAction'; +import { ActionName } from '@/onebot/action/router'; +import { Static, Type } from '@sinclair/typebox'; + +const SchemaData = Type.Object({ + face_id: Type.Union([Type.Number(), Type.String()]),// 参考 face_config.json 的 QSid + face_type: Type.Union([Type.Number(), Type.String()], { default: '1' }), + wording: Type.String({ default: ' ' }), +}); + +type Payload = Static; + +export class SeDiyOnlineStatus extends OneBotAction { + override actionName = ActionName.SeDiyOnlineStatus; + override payloadSchema = SchemaData; + + async _handle(payload: Payload) { + const ret = await this.core.apis.UserApi.setDiySelfOnlineStatus( + payload.face_id.toString(), + payload.face_type.toString(), + payload.wording, + ); + if (ret.result !== 0) { + throw new Error('设置在线状态失败'); + } + return ret.errMsg; + } +} diff --git a/src/onebot/action/index.ts b/src/onebot/action/index.ts index 2ecea787..c5f21a44 100644 --- a/src/onebot/action/index.ts +++ b/src/onebot/action/index.ts @@ -103,6 +103,7 @@ import { GetGuildProfile } from './guild/GetGuildProfile'; import { GetClientkey } from './extends/GetClientkey'; import { SendPacket } from './extends/SendPacket'; import { SendPoke } from '@/onebot/action/packet/SendPoke'; +import { SeDiyOnlineStatus } from './extends/SetDiyOnlineStatus'; export function createActionMap(obContext: NapCatOneBot11Adapter, core: NapCatCore) { @@ -209,6 +210,7 @@ export function createActionMap(obContext: NapCatOneBot11Adapter, core: NapCatCo new GetUserStatus(obContext, core), new GetRkey(obContext, core), new SetSpecialTittle(obContext, core), + new SeDiyOnlineStatus(obContext, core), // new UploadForwardMsg(obContext, core), new GetGroupShutList(obContext, core), new GetGroupFileUrl(obContext, core), diff --git a/src/onebot/action/router.ts b/src/onebot/action/router.ts index bc6e2dbd..cd0f7b4d 100644 --- a/src/onebot/action/router.ts +++ b/src/onebot/action/router.ts @@ -90,6 +90,7 @@ export const ActionName = { // 以下为扩展napcat扩展 Unknown: 'unknown', + SeDiyOnlineStatus: 'set_diy_online_status', SharePeer: 'ArkSharePeer', ShareGroupEx: 'ArkShareGroup', // RebootNormal : 'reboot_normal', //无快速登录重新启动