Skip to content

Commit 9a9b69f

Browse files
authored
完善&规范 群文件系统 (#178)
* root FolderWrapper 使用 Mirai 提供的 ROOT_FOLDER_ID * Napcat 支持重命名群文件 * 修复函数注释 * LLOnebot 支持 重命名群文件夹 * 注明 RENAME_GROUP_FILE 属于 NapCat 扩展 API * 删除无用的 RenameGroupFIleResp * resolveFileById support deep * 删除多余的 MoveGroupFIleResp
1 parent 12b374c commit 9a9b69f

4 files changed

Lines changed: 94 additions & 24 deletions

File tree

overflow-core/src/main/kotlin/cn/evolvefield/onebot/client/core/Bot.kt

Lines changed: 55 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,6 @@ import cn.evolvefield.onebot.sdk.response.contact.LoginInfoResp
1515
import cn.evolvefield.onebot.sdk.response.contact.StrangerInfoResp
1616
import cn.evolvefield.onebot.sdk.response.ext.CreateGroupFileFolderResp
1717
import cn.evolvefield.onebot.sdk.response.ext.GetFileResp
18-
import cn.evolvefield.onebot.sdk.response.ext.MoveGroupFIleResp
1918
import cn.evolvefield.onebot.sdk.response.ext.SetGroupReactionResp
2019
import cn.evolvefield.onebot.sdk.response.ext.UploadGroupFileResp
2120
import cn.evolvefield.onebot.sdk.response.group.*
@@ -1040,6 +1039,31 @@ internal class Bot(
10401039
return result.withToken()
10411040
}
10421041

1042+
/**
1043+
* 重命名群文件夹
1044+
* @param groupId 群号
1045+
* @param folderId 文件夹ID
1046+
* @param newName 目标文件夹名称
1047+
* @param context Onebot 主动操作的上下文
1048+
*/
1049+
@JvmBlockingBridge
1050+
@JvmOverloads
1051+
suspend fun renameGroupFIleFolder(
1052+
groupId: Long,
1053+
folderId: String,
1054+
newName: String,
1055+
context: Context = {},
1056+
): ActionRaw {
1057+
val action = context.build(ActionPathEnum.RENAME_GROUP_FILE_FOLDER)
1058+
val params = JsonObject().apply {
1059+
addProperty("group_id", groupId)
1060+
addProperty("folder_id", folderId)
1061+
addProperty("new_folder_name", newName)
1062+
}
1063+
val result = actionHandler.action(this, action, params)
1064+
return result.withClass()
1065+
}
1066+
10431067
/**
10441068
* 移动群文件
10451069
* @param groupId 群号
@@ -1056,7 +1080,7 @@ internal class Bot(
10561080
currentParentDirectoryId: String,
10571081
targetParentDirectoryId: String,
10581082
context: Context = {},
1059-
): ActionData<MoveGroupFIleResp> {
1083+
): ActionRaw {
10601084
val action = context.build(ActionPathEnum.MOVE_GROUP_FILE)
10611085
val params = JsonObject().apply {
10621086
addProperty("group_id", groupId)
@@ -1065,7 +1089,35 @@ internal class Bot(
10651089
addProperty("target_parent_directory", targetParentDirectoryId)
10661090
}
10671091
val result = actionHandler.action(this, action, params)
1068-
return result.withToken()
1092+
return result.withClass()
1093+
}
1094+
1095+
/**
1096+
* 重命名群文件
1097+
* @param groupId 群号
1098+
* @param fileId 文件ID
1099+
* @param currentParentDirectoryId 目前父文件夹ID 参考 Folder 对象
1100+
* @param newName 目标文件名称
1101+
* @param context Onebot 主动操作的上下文
1102+
*/
1103+
@JvmBlockingBridge
1104+
@JvmOverloads
1105+
suspend fun renameGroupFIle(
1106+
groupId: Long,
1107+
fileId: String,
1108+
currentParentDirectoryId: String,
1109+
newName: String,
1110+
context: Context = {},
1111+
): ActionRaw {
1112+
val action = context.build(ActionPathEnum.RENAME_GROUP_FILE)
1113+
val params = JsonObject().apply {
1114+
addProperty("group_id", groupId)
1115+
addProperty("file_id", fileId)
1116+
addProperty("current_parent_directory", currentParentDirectoryId)
1117+
addProperty("newName", newName)
1118+
}
1119+
val result = actionHandler.action(this, action, params)
1120+
return result.withClass()
10691121
}
10701122

10711123
/**

overflow-core/src/main/kotlin/cn/evolvefield/onebot/sdk/enums/ActionPathEnum.kt

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -268,4 +268,18 @@ enum class ActionPathEnum(
268268
* 移动群文件
269269
*/
270270
MOVE_GROUP_FILE("move_group_file"),
271+
272+
/**
273+
* 重命名群文件
274+
*
275+
* 属于 NapCat 扩展 API
276+
*/
277+
RENAME_GROUP_FILE("rename_group_file"),
278+
279+
/**
280+
* 重命名群文件夹
281+
*
282+
* 属于 LLOnebot 扩展 API
283+
*/
284+
RENAME_GROUP_FILE_FOLDER("rename_group_file_folder"),
271285
}

overflow-core/src/main/kotlin/cn/evolvefield/onebot/sdk/response/ext/MoveGroupFIleResp.kt

Lines changed: 0 additions & 11 deletions
This file was deleted.

overflow-core/src/main/kotlin/top/mrxiaom/overflow/internal/contact/data/RemoteFilesWrapper.kt

Lines changed: 25 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ import net.mamoe.mirai.contact.file.AbsoluteFolder
1313
import net.mamoe.mirai.contact.file.RemoteFiles
1414
import net.mamoe.mirai.message.data.FileMessage
1515
import net.mamoe.mirai.utils.*
16+
import top.mrxiaom.overflow.internal.check
1617
import top.mrxiaom.overflow.internal.contact.GroupWrapper
1718
import top.mrxiaom.overflow.internal.contact.data.RemoteFilesWrapper.Companion.update
1819
import top.mrxiaom.overflow.internal.message.data.WrappedFileMessage
@@ -34,7 +35,7 @@ internal class RemoteFilesWrapper(
3435
}.data
3536

3637
val root = FolderWrapper(
37-
this, null, "/", "/", 0, 0, 0, data?.files?.size ?: 0
38+
this, null, AbsoluteFolder.ROOT_FOLDER_ID, "/", 0, 0, 0, data?.files?.size ?: 0
3839
)
3940
if (data != null) {
4041
root.update(data)
@@ -55,7 +56,7 @@ internal class FolderWrapper(
5556
override val contact: GroupWrapper,
5657
override val parent: AbsoluteFolder? = null,
5758
override val id: String,
58-
override val name: String,
59+
override var name: String,
5960
override val lastModifiedTime: Long,
6061
override val uploadTime: Long,
6162
override val uploaderId: Long,
@@ -95,7 +96,14 @@ internal class FolderWrapper(
9596
}
9697

9798
override suspend fun renameTo(newName: String): Boolean {
98-
TODO("暂无重命名文件夹实现")
99+
if (!contact.bot.appName.lowercase().contains("llonebot")) {
100+
throw PermissionDeniedException("当前 Onebot 实现不支持移动文件夹")
101+
}
102+
val success = impl.renameGroupFIleFolder(contact.id, id, newName).check("重命名文件夹失败,详见网络日志 (logs/onebot)")
103+
if (success) {
104+
this.name = newName
105+
}
106+
return success
99107
}
100108

101109
override suspend fun children(): Flow<AbsoluteFileFolder> {
@@ -173,10 +181,10 @@ internal class FolderWrapper(
173181
}
174182

175183
override suspend fun resolveFileById(id: String, deep: Boolean): AbsoluteFile? {
176-
if (deep) {
177-
TODO("暂不支持深入子目录查找文件")
178-
}
179-
return files.firstOrNull { it.id == id }
184+
files.firstOrNull { it.id == id }?.let { return it }
185+
if (!deep) return null
186+
187+
return folders.map { it.resolveFileById(id, true) }.firstOrNull() { it != null }
180188
}
181189

182190
override suspend fun resolveFiles(path: String): Flow<AbsoluteFile> {
@@ -249,7 +257,7 @@ internal class FileWrapper(
249257
override val contact: GroupWrapper,
250258
override var parent: FolderWrapper,
251259
override val id: String,
252-
override val name: String,
260+
override var name: String,
253261
override val md5: ByteArray,
254262
override val sha1: ByteArray,
255263
override val size: Long,
@@ -298,7 +306,7 @@ internal class FileWrapper(
298306
if (folder !is FolderWrapper)
299307
return false
300308
val success =
301-
impl.moveGroupFIle(contact.id, id, parent.id, folder.id).data?.ok ?: false
309+
impl.moveGroupFIle(contact.id, id, parent.id, folder.id).check("移动文件失败,详见网络日志 (logs/onebot)")
302310
if (success) {
303311
parent.files.remove(this)
304312
parent = folder
@@ -317,7 +325,14 @@ internal class FileWrapper(
317325
}
318326

319327
override suspend fun renameTo(newName: String): Boolean {
320-
TODO("暂无重命名文件实现")
328+
if (!contact.bot.appName.lowercase().contains("napcat")) {
329+
throw PermissionDeniedException("当前 Onebot 实现不支持移动文件")
330+
}
331+
val success = impl.renameGroupFIle(contact.id, id, parent.id, newName).check("重命名文件失败,详见网络日志 (logs/onebot)")
332+
if (success) {
333+
this.name = newName
334+
}
335+
return success
321336
}
322337

323338
override fun toMessage(): FileMessage {

0 commit comments

Comments
 (0)