From c8d5eebe5d7d515e6de67b917ca05e276e1f4255 Mon Sep 17 00:00:00 2001 From: linyuchen Date: Sat, 16 Nov 2024 14:48:45 +0800 Subject: [PATCH] feat: new api set_friend_remark, set_friend_category, set_group_remark, set_group_msg_mask, set_restart --- manifest.json | 2 +- src/main/main.ts | 2 + src/ntqqapi/api/friend.ts | 7 +++- src/ntqqapi/api/group.ts | 15 +++++++ src/ntqqapi/api/system.ts | 39 +++++++++++++++++++ src/ntqqapi/hook.ts | 2 +- src/ntqqapi/ntcall.ts | 3 +- src/onebot11/action/index.ts | 10 +++++ .../action/llonebot/SetFriendCategory.ts | 17 ++++++++ .../action/llonebot/SetFriendRemark.ts | 17 ++++++++ .../action/llonebot/SetGroupMsgMask.ts | 16 ++++++++ .../action/llonebot/SetGroupRemark.ts | 15 +++++++ src/onebot11/action/system/SetRestart.ts | 10 +++++ src/onebot11/action/types.ts | 5 +++ src/version.ts | 2 +- 15 files changed, 157 insertions(+), 5 deletions(-) create mode 100644 src/ntqqapi/api/system.ts create mode 100644 src/onebot11/action/llonebot/SetFriendCategory.ts create mode 100644 src/onebot11/action/llonebot/SetFriendRemark.ts create mode 100644 src/onebot11/action/llonebot/SetGroupMsgMask.ts create mode 100644 src/onebot11/action/llonebot/SetGroupRemark.ts create mode 100644 src/onebot11/action/system/SetRestart.ts diff --git a/manifest.json b/manifest.json index f7bc811..adf90a4 100644 --- a/manifest.json +++ b/manifest.json @@ -4,7 +4,7 @@ "name": "LLOneBot", "slug": "LLOneBot", "description": "实现 OneBot 11 和 Satori 协议,用于 QQ 机器人开发", - "version": "4.2.2", + "version": "4.3.0", "icon": "./icon.webp", "authors": [ { diff --git a/src/main/main.ts b/src/main/main.ts index e2e751d..6ea0f55 100644 --- a/src/main/main.ts +++ b/src/main/main.ts @@ -35,6 +35,7 @@ import { NTQQWindowApi } from '../ntqqapi/api' import { existsSync, mkdirSync } from 'node:fs' +import { NTQQSystemApi } from '@/ntqqapi/api/system' declare module 'cordis' { interface Events { @@ -74,6 +75,7 @@ function onLoad() { ctx.plugin(NTQQWebApi) ctx.plugin(NTQQWindowApi) ctx.plugin(Database) + ctx.plugin(NTQQSystemApi) let started = false diff --git a/src/ntqqapi/api/friend.ts b/src/ntqqapi/api/friend.ts index f1ad644..2effc92 100644 --- a/src/ntqqapi/api/friend.ts +++ b/src/ntqqapi/api/friend.ts @@ -107,7 +107,8 @@ export class NTQQFriendApi extends Service { return ret.arkMsg } - async setBuddyRemark(uid: string, remark: string) { + async setBuddyRemark(uid: string, remark?: string) { + remark = remark ?? '' return await invoke('nodeIKernelBuddyService/setBuddyRemark', [{ remarkParams: { uid, remark } }]) @@ -122,4 +123,8 @@ export class NTQQFriendApi extends Service { } }]) } + + async setBuddyCategory(uid: string, categoryId: number) { + return await invoke('nodeIKernelBuddyService/setBuddyCategory', [{uid, categoryId}]) + } } diff --git a/src/ntqqapi/api/group.ts b/src/ntqqapi/api/group.ts index e6aacd2..102c819 100644 --- a/src/ntqqapi/api/group.ts +++ b/src/ntqqapi/api/group.ts @@ -22,6 +22,12 @@ declare module 'cordis' { } } +export enum GroupMsgMask { + ALLOW_NOTIFY = 1, // 允许提醒 + ALLOW_NOT_NOTIFY = 4, // 接受消息不提醒 + BOX_NOT_NOTIFY = 2, // 收进群助手不提醒 + NOT_ALLOW = 3, // 屏蔽 +} export class NTQQGroupApi extends Service { static inject = ['ntWindowApi'] @@ -341,4 +347,13 @@ export class NTQQGroupApi extends Service { [{ groupId }] ) } + + async setGroupMsgMask(groupCode: string, msgMask: GroupMsgMask){ + return await invoke('nodeIKernelGroupService/setGroupMsgMask', [{ groupCode, msgMask }]) + } + + async setGroupRemark(groupCode: string, groupRemark?: string) { + groupRemark = groupRemark ?? '' + return await invoke('nodeIKernelGroupService/modifyGroupRemark', [{ groupCode, groupRemark }]) + } } diff --git a/src/ntqqapi/api/system.ts b/src/ntqqapi/api/system.ts new file mode 100644 index 0000000..9b3239c --- /dev/null +++ b/src/ntqqapi/api/system.ts @@ -0,0 +1,39 @@ +import { Context, Service } from 'cordis' +import { invoke, NTClass } from '@/ntqqapi/ntcall' + +declare module 'cordis' { + interface Context { + ntSystemApi: NTQQSystemApi + } +} + +export class NTQQSystemApi extends Service { + static inject = ['ntUserApi'] + + constructor(protected ctx: Context) { + super(ctx, 'ntSystemApi', true) + } + + async restart(){ + // todo: 调用此接口后会将 NTQQ 设置里面的自动登录和无需手机确认打开,重启后将状态恢复到之前的状态 + + // 设置自动登录 + await this.setSettingAutoLogin(true) + // 退出账号 + invoke('quitAccount', [], { + className: NTClass.BUSINESS_API + }).then() + invoke('notifyQQClose', [{ type: 1 }], { className: NTClass.QQ_EX_API }).then() + // 等待登录界面,模拟点击登录按钮?还是直接调用登录方法? + } + + // 是否自动登录 + async getSettingAutoLogin(): Promise{ + return invoke('nodeIKernelNodeMiscService/queryAutoRun', []) + } + async setSettingAutoLogin(state: boolean){ + await invoke('nodeIKernelSettingService/setNeedConfirmSwitch', [{state: 1}]) // 1:不需要手机确认,2:需要手机确认 + + await invoke('nodeIKernelSettingService/setAutoLoginSwitch', [{state}]) + } +} diff --git a/src/ntqqapi/hook.ts b/src/ntqqapi/hook.ts index 9443019..cf04bbb 100644 --- a/src/ntqqapi/hook.ts +++ b/src/ntqqapi/hook.ts @@ -28,7 +28,7 @@ export enum ReceiveCmdS { MEDIA_UPLOAD_COMPLETE = 'nodeIKernelMsgListener/onRichMediaUploadComplete', } -const logHook = false +const logHook = true const receiveHooks: Map { + actionName = ActionName.SetFriendCategory + + protected async _handle(payload: Payload): Promise { + const uid = await this.ctx.ntUserApi.getUidByUin(payload.user_id.toString()) + if (!uid) throw new Error('无法获取好友信息') + return this.ctx.ntFriendApi.setBuddyCategory(uid, +payload.category_id) + } +} diff --git a/src/onebot11/action/llonebot/SetFriendRemark.ts b/src/onebot11/action/llonebot/SetFriendRemark.ts new file mode 100644 index 0000000..5083cbb --- /dev/null +++ b/src/onebot11/action/llonebot/SetFriendRemark.ts @@ -0,0 +1,17 @@ +import { BaseAction } from '../BaseAction' +import { ActionName } from '../types' + +interface Payload { + user_id: string, + remark?: string +} + +export class SetFriendRemark extends BaseAction { + actionName = ActionName.SetFriendRemark + + protected async _handle(payload: Payload): Promise { + const uid = await this.ctx.ntUserApi.getUidByUin(payload.user_id.toString()) + if (!uid) throw new Error('无法获取好友信息') + return this.ctx.ntFriendApi.setBuddyRemark(uid, payload.remark || '') + } +} diff --git a/src/onebot11/action/llonebot/SetGroupMsgMask.ts b/src/onebot11/action/llonebot/SetGroupMsgMask.ts new file mode 100644 index 0000000..dd1802a --- /dev/null +++ b/src/onebot11/action/llonebot/SetGroupMsgMask.ts @@ -0,0 +1,16 @@ +import { BaseAction } from '../BaseAction' +import { ActionName } from '../types' +import { GroupMsgMask } from '@/ntqqapi/api' + +interface Payload { + group_id: string, + mask: GroupMsgMask +} + +export class SetGroupMsgMask extends BaseAction { + actionName = ActionName.SetGroupMsgMask + + protected async _handle(payload: Payload): Promise{ + return this.ctx.ntGroupApi.setGroupMsgMask(payload.group_id.toString(), +payload.mask) + } +} diff --git a/src/onebot11/action/llonebot/SetGroupRemark.ts b/src/onebot11/action/llonebot/SetGroupRemark.ts new file mode 100644 index 0000000..d00d545 --- /dev/null +++ b/src/onebot11/action/llonebot/SetGroupRemark.ts @@ -0,0 +1,15 @@ +import { BaseAction } from '../BaseAction' +import { ActionName } from '../types' + +interface Payload { + group_id: string, + remark?: string +} + +export class SetGroupRemark extends BaseAction { + actionName = ActionName.SetGroupRemark + + protected async _handle(payload: Payload): Promise{ + return this.ctx.ntGroupApi.setGroupRemark(payload.group_id.toString(), payload.remark) + } +} diff --git a/src/onebot11/action/system/SetRestart.ts b/src/onebot11/action/system/SetRestart.ts new file mode 100644 index 0000000..72badaf --- /dev/null +++ b/src/onebot11/action/system/SetRestart.ts @@ -0,0 +1,10 @@ +import { BaseAction } from '@/onebot11/action/BaseAction' +import { ActionName } from '@/onebot11/action/types' + +export class SetRestart extends BaseAction { + actionName = ActionName.SetRestart + + protected async _handle() { + await this.ctx.ntSystemApi.restart() + } +} diff --git a/src/onebot11/action/types.ts b/src/onebot11/action/types.ts index 126db44..7441789 100644 --- a/src/onebot11/action/types.ts +++ b/src/onebot11/action/types.ts @@ -29,6 +29,10 @@ export enum ActionName { GetRobotUinRange = 'get_robot_uin_range', GroupPoke = 'group_poke', FriendPoke = 'friend_poke', + SetFriendRemark = 'set_friend_remark', + SetFriendCategory = 'set_friend_category', + SetGroupMsgMask = 'set_group_msg_mask', + SetGroupRemark = 'set_group_remark', // onebot 11 SendLike = 'send_like', GetLoginInfo = 'get_login_info', @@ -47,6 +51,7 @@ export enum ActionName { SetGroupLeave = 'set_group_leave', GetVersionInfo = 'get_version_info', GetStatus = 'get_status', + SetRestart = 'set_restart', CanSendRecord = 'can_send_record', CanSendImage = 'can_send_image', SetGroupKick = 'set_group_kick', diff --git a/src/version.ts b/src/version.ts index 9c9f404..b92cf30 100644 --- a/src/version.ts +++ b/src/version.ts @@ -1 +1 @@ -export const version = '4.2.2' +export const version = '4.3.0'