Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,6 @@ import cn.evolvefield.onebot.sdk.response.contact.LoginInfoResp
import cn.evolvefield.onebot.sdk.response.contact.StrangerInfoResp
import cn.evolvefield.onebot.sdk.response.ext.CreateGroupFileFolderResp
import cn.evolvefield.onebot.sdk.response.ext.GetFileResp
import cn.evolvefield.onebot.sdk.response.ext.MoveGroupFIleResp
import cn.evolvefield.onebot.sdk.response.ext.SetGroupReactionResp
import cn.evolvefield.onebot.sdk.response.ext.UploadGroupFileResp
import cn.evolvefield.onebot.sdk.response.group.*
Expand Down Expand Up @@ -1040,6 +1039,31 @@ internal class Bot(
return result.withToken()
}

/**
* 重命名群文件夹
* @param groupId 群号
* @param folderId 文件夹ID
* @param newName 目标文件夹名称
* @param context Onebot 主动操作的上下文
*/
@JvmBlockingBridge
@JvmOverloads
suspend fun renameGroupFIleFolder(
groupId: Long,
folderId: String,
newName: String,
context: Context = {},
): ActionRaw {
val action = context.build(ActionPathEnum.RENAME_GROUP_FILE_FOLDER)
val params = JsonObject().apply {
addProperty("group_id", groupId)
addProperty("folder_id", folderId)
addProperty("new_folder_name", newName)
}
val result = actionHandler.action(this, action, params)
return result.withClass()
}

/**
* 移动群文件
* @param groupId 群号
Expand All @@ -1056,7 +1080,7 @@ internal class Bot(
currentParentDirectoryId: String,
targetParentDirectoryId: String,
context: Context = {},
): ActionData<MoveGroupFIleResp> {
): ActionRaw {
val action = context.build(ActionPathEnum.MOVE_GROUP_FILE)
val params = JsonObject().apply {
addProperty("group_id", groupId)
Expand All @@ -1065,7 +1089,35 @@ internal class Bot(
addProperty("target_parent_directory", targetParentDirectoryId)
}
val result = actionHandler.action(this, action, params)
return result.withToken()
return result.withClass()
}

/**
* 重命名群文件
* @param groupId 群号
* @param fileId 文件ID
* @param currentParentDirectoryId 目前父文件夹ID 参考 Folder 对象
* @param newName 目标文件名称
* @param context Onebot 主动操作的上下文
*/
@JvmBlockingBridge
@JvmOverloads
suspend fun renameGroupFIle(
groupId: Long,
fileId: String,
currentParentDirectoryId: String,
newName: String,
context: Context = {},
): ActionRaw {
val action = context.build(ActionPathEnum.RENAME_GROUP_FILE)
val params = JsonObject().apply {
addProperty("group_id", groupId)
addProperty("file_id", fileId)
addProperty("current_parent_directory", currentParentDirectoryId)
addProperty("newName", newName)
}
val result = actionHandler.action(this, action, params)
return result.withClass()
}

/**
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -268,4 +268,18 @@ enum class ActionPathEnum(
* 移动群文件
*/
MOVE_GROUP_FILE("move_group_file"),

/**
* 重命名群文件
*
* 属于 NapCat 扩展 API
*/
RENAME_GROUP_FILE("rename_group_file"),

/**
* 重命名群文件夹
*
* 属于 LLOnebot 扩展 API
*/
RENAME_GROUP_FILE_FOLDER("rename_group_file_folder"),
}

This file was deleted.

Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@ import net.mamoe.mirai.contact.file.AbsoluteFolder
import net.mamoe.mirai.contact.file.RemoteFiles
import net.mamoe.mirai.message.data.FileMessage
import net.mamoe.mirai.utils.*
import top.mrxiaom.overflow.internal.check
import top.mrxiaom.overflow.internal.contact.GroupWrapper
import top.mrxiaom.overflow.internal.contact.data.RemoteFilesWrapper.Companion.update
import top.mrxiaom.overflow.internal.message.data.WrappedFileMessage
Expand All @@ -34,7 +35,7 @@ internal class RemoteFilesWrapper(
}.data

val root = FolderWrapper(
this, null, "/", "/", 0, 0, 0, data?.files?.size ?: 0
this, null, AbsoluteFolder.ROOT_FOLDER_ID, "/", 0, 0, 0, data?.files?.size ?: 0
)
if (data != null) {
root.update(data)
Expand All @@ -55,7 +56,7 @@ internal class FolderWrapper(
override val contact: GroupWrapper,
override val parent: AbsoluteFolder? = null,
override val id: String,
override val name: String,
override var name: String,
override val lastModifiedTime: Long,
override val uploadTime: Long,
override val uploaderId: Long,
Expand Down Expand Up @@ -95,7 +96,14 @@ internal class FolderWrapper(
}

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

override suspend fun children(): Flow<AbsoluteFileFolder> {
Expand Down Expand Up @@ -173,10 +181,10 @@ internal class FolderWrapper(
}

override suspend fun resolveFileById(id: String, deep: Boolean): AbsoluteFile? {
if (deep) {
TODO("暂不支持深入子目录查找文件")
}
return files.firstOrNull { it.id == id }
files.firstOrNull { it.id == id }?.let { return it }
if (!deep) return null

return folders.map { it.resolveFileById(id, true) }.firstOrNull() { it != null }
}

override suspend fun resolveFiles(path: String): Flow<AbsoluteFile> {
Expand Down Expand Up @@ -249,7 +257,7 @@ internal class FileWrapper(
override val contact: GroupWrapper,
override var parent: FolderWrapper,
override val id: String,
override val name: String,
override var name: String,
override val md5: ByteArray,
override val sha1: ByteArray,
override val size: Long,
Expand Down Expand Up @@ -298,7 +306,7 @@ internal class FileWrapper(
if (folder !is FolderWrapper)
return false
val success =
impl.moveGroupFIle(contact.id, id, parent.id, folder.id).data?.ok ?: false
impl.moveGroupFIle(contact.id, id, parent.id, folder.id).check("移动文件失败,详见网络日志 (logs/onebot)")
if (success) {
parent.files.remove(this)
parent = folder
Expand All @@ -317,7 +325,14 @@ internal class FileWrapper(
}

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

override fun toMessage(): FileMessage {
Expand Down