From 31eb09edeff81efe226fc17d9cc823783e91e6ea Mon Sep 17 00:00:00 2001 From: Clansty Date: Tue, 8 Apr 2025 05:14:53 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E9=87=8D=E5=91=BD=E5=90=8D=E7=BE=A4?= =?UTF-8?q?=E6=96=87=E4=BB=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/core/packet/context/operationContext.ts | 7 ++++ .../transformer/action/RenameGroupFile.ts | 34 +++++++++++++++++++ src/core/packet/transformer/action/index.ts | 1 + src/onebot/action/extends/MoveGroupFile.ts | 5 +-- src/onebot/action/extends/RenameGroupFile.ts | 33 ++++++++++++++++++ src/onebot/action/index.ts | 2 ++ src/onebot/action/router.ts | 1 + 7 files changed, 81 insertions(+), 2 deletions(-) create mode 100644 src/core/packet/transformer/action/RenameGroupFile.ts create mode 100644 src/onebot/action/extends/RenameGroupFile.ts diff --git a/src/core/packet/context/operationContext.ts b/src/core/packet/context/operationContext.ts index 9e32daaa..0e558058 100644 --- a/src/core/packet/context/operationContext.ts +++ b/src/core/packet/context/operationContext.ts @@ -161,6 +161,13 @@ export class PacketOperationContext { return res.move.retCode; } + async RenameGroupFile(groupUin: number, fileUUID: string, currentParentDirectory: string, newName: string) { + const req = trans.RenameGroupFile.build(groupUin, fileUUID, currentParentDirectory, newName); + const resp = await this.context.client.sendOidbPacket(req, true); + const res = trans.RenameGroupFile.parse(resp); + return res.rename.retCode; + } + async GetGroupFileUrl(groupUin: number, fileUUID: string) { const req = trans.DownloadGroupFile.build(groupUin, fileUUID); const resp = await this.context.client.sendOidbPacket(req, true); diff --git a/src/core/packet/transformer/action/RenameGroupFile.ts b/src/core/packet/transformer/action/RenameGroupFile.ts new file mode 100644 index 00000000..2cbaeacd --- /dev/null +++ b/src/core/packet/transformer/action/RenameGroupFile.ts @@ -0,0 +1,34 @@ +import * as proto from '@/core/packet/transformer/proto'; +import { NapProtoMsg } from '@napneko/nap-proto-core'; +import { OidbPacket, PacketTransformer } from '@/core/packet/transformer/base'; +import OidbBase from '@/core/packet/transformer/oidb/oidbBase'; + +class RenameGroupFile extends PacketTransformer { + constructor() { + super(); + } + + build(groupUin: number, fileUUID: string, currentParentDirectory: string, newName: string): OidbPacket { + const body = new NapProtoMsg(proto.OidbSvcTrpcTcp0x6D6).encode({ + rename: { + groupUin: groupUin, + busId: 102, + fileId: fileUUID, + parentFolder: currentParentDirectory, + newFileName: newName, + } + }); + return OidbBase.build(0x6D6, 4, body, true, false); + } + + parse(data: Buffer) { + const oidbBody = OidbBase.parse(data).body; + const res = new NapProtoMsg(proto.OidbSvcTrpcTcp0x6D6Response).decode(oidbBody); + if (res.rename.retCode !== 0) { + throw new Error(`sendGroupFileRenameReq error: ${res.rename.clientWording} (code=${res.rename.retCode})`); + } + return res; + } +} + +export default new RenameGroupFile(); diff --git a/src/core/packet/transformer/action/index.ts b/src/core/packet/transformer/action/index.ts index 317b7167..03af3f35 100644 --- a/src/core/packet/transformer/action/index.ts +++ b/src/core/packet/transformer/action/index.ts @@ -7,3 +7,4 @@ export { default as SendPoke } from './SendPoke'; export { default as SetSpecialTitle } from './SetSpecialTitle'; export { default as ImageOCR } from './ImageOCR'; export { default as MoveGroupFile } from './MoveGroupFile'; +export { default as RenameGroupFile } from './RenameGroupFile'; diff --git a/src/onebot/action/extends/MoveGroupFile.ts b/src/onebot/action/extends/MoveGroupFile.ts index 8de368d0..110551bc 100644 --- a/src/onebot/action/extends/MoveGroupFile.ts +++ b/src/onebot/action/extends/MoveGroupFile.ts @@ -13,7 +13,7 @@ const SchemaData = Type.Object({ type Payload = Static; interface MoveGroupFileResponse { - retcode: number; + ok: boolean; } export class MoveGroupFile extends GetPacketStatusDepends { @@ -23,8 +23,9 @@ export class MoveGroupFile extends GetPacketStatusDepends; + +interface RenameGroupFileResponse { + ok: boolean; +} + +export class RenameGroupFile extends GetPacketStatusDepends { + override actionName = ActionName.RenameGroupFile; + override payloadSchema = SchemaData; + + async _handle(payload: Payload) { + const contextMsgFile = FileNapCatOneBotUUID.decode(payload.file_id) || FileNapCatOneBotUUID.decodeModelId(payload.file_id); + if (contextMsgFile?.fileUUID) { + await this.core.apis.PacketApi.pkt.operation.RenameGroupFile(+payload.group_id, contextMsgFile.fileUUID, payload.current_parent_directory, payload.new_name); + return { + ok: true, + }; + } + throw new Error('real fileUUID not found!'); + } +} diff --git a/src/onebot/action/index.ts b/src/onebot/action/index.ts index b5e1e09d..86f4f08a 100644 --- a/src/onebot/action/index.ts +++ b/src/onebot/action/index.ts @@ -111,6 +111,7 @@ import { GetUnidirectionalFriendList } from './extends/GetUnidirectionalFriendLi import SetGroupRemark from './extends/SetGroupRemark'; import { MoveGroupFile } from './extends/MoveGroupFile'; import { TransGroupFile } from './extends/TransGroupFile'; +import { RenameGroupFile } from './extends/RenameGroupFile'; export function createActionMap(obContext: NapCatOneBot11Adapter, core: NapCatCore) { @@ -135,6 +136,7 @@ export function createActionMap(obContext: NapCatOneBot11Adapter, core: NapCatCo new SendGroupSign(obContext, core), new GetClientkey(obContext, core), new MoveGroupFile(obContext, core), + new RenameGroupFile(obContext, core), new TransGroupFile(obContext, core), // onebot11 new SendLike(obContext, core), diff --git a/src/onebot/action/router.ts b/src/onebot/action/router.ts index 200fe84e..2c41ffb3 100644 --- a/src/onebot/action/router.ts +++ b/src/onebot/action/router.ts @@ -132,6 +132,7 @@ export const ActionName = { MoveGroupFile: 'move_group_file', TransGroupFile: 'trans_group_file', + RenameGroupFile: 'rename_group_file', GetGuildList: 'get_guild_list', GetGuildProfile: 'get_guild_service_profile',