From 964c55de310338df7ced412caeab90bf4a2f285f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=99=BD=E6=B1=A0?= Date: Mon, 26 Feb 2024 20:51:45 +0800 Subject: [PATCH] `Shamrock`: fix #256 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: 白池 --- .../remote/action/handlers/DownloadFile.kt | 23 ++++++++++--- .../remote/action/handlers/QuickOperation.kt | 33 ++++++++++--------- 2 files changed, 37 insertions(+), 19 deletions(-) diff --git a/xposed/src/main/java/moe/fuqiuluo/shamrock/remote/action/handlers/DownloadFile.kt b/xposed/src/main/java/moe/fuqiuluo/shamrock/remote/action/handlers/DownloadFile.kt index 32f30bd..17cc096 100644 --- a/xposed/src/main/java/moe/fuqiuluo/shamrock/remote/action/handlers/DownloadFile.kt +++ b/xposed/src/main/java/moe/fuqiuluo/shamrock/remote/action/handlers/DownloadFile.kt @@ -12,6 +12,7 @@ import moe.fuqiuluo.shamrock.utils.DownloadUtils import moe.fuqiuluo.shamrock.utils.FileUtils import moe.fuqiuluo.shamrock.utils.MD5 import moe.fuqiuluo.symbols.OneBotHandler +import java.io.File @OneBotHandler("download_file") internal object DownloadFile: IActionHandler() { @@ -19,6 +20,7 @@ internal object DownloadFile: IActionHandler() { val url = session.getStringOrNull("url") val name = session.getStringOrNull("name") val b64 = session.getStringOrNull("base64") + val rootDir = session.getStringOrNull("root") val threadCnt = session.getIntOrNull("thread_cnt") ?: 3 val headers = if (session.has("headers")) (if (session.isArray("headers")) { session.getArray("headers").map { @@ -27,7 +29,7 @@ internal object DownloadFile: IActionHandler() { } else { session.getString("headers").split("\r\n") }) else emptyList() - return invoke(url, b64, threadCnt, headers, name, session.echo) + return invoke(url, b64, threadCnt, headers, name, rootDir, session.echo) } suspend operator fun invoke( @@ -36,6 +38,7 @@ internal object DownloadFile: IActionHandler() { threadCnt: Int, headers: List, name: String?, + root: String?, echo: JsonElement = EmptyJsonString ): String { if (url != null) { @@ -49,9 +52,9 @@ internal object DownloadFile: IActionHandler() { headerMap[k] = v } } - return invoke(url, threadCnt, headerMap, name, echo) + return invoke(url, threadCnt, headerMap, name, root, echo) } else if (base64 != null) { - return invoke(base64, name, echo) + return invoke(base64, name, root, echo) } else { return noParam("url/base64", echo) } @@ -60,6 +63,7 @@ internal object DownloadFile: IActionHandler() { operator fun invoke( base64: String, name: String?, + root: String?, echo: JsonElement ): String { kotlin.runCatching { @@ -68,12 +72,17 @@ internal object DownloadFile: IActionHandler() { it.writeBytes(bytes) } }.onSuccess { - val tmp = if (name == null) + var tmp = if (name == null) FileUtils.renameByMd5(it) else it.parentFile!!.resolve(name).also { target -> it.renameTo(target) it.delete() } + if (root != null) { + tmp = File(root).resolve(name ?: tmp.name).also { + tmp.renameTo(it) + } + } return ok(data = DownloadResult( file = tmp.absolutePath, md5 = MD5.genFileMd5Hex(tmp.absolutePath) @@ -89,6 +98,7 @@ internal object DownloadFile: IActionHandler() { threadCnt: Int, headers: Map, name: String?, + root: String?, echo: JsonElement = EmptyJsonString ): String { return kotlin.runCatching { @@ -108,6 +118,11 @@ internal object DownloadFile: IActionHandler() { tmp.renameTo(newFile) newFile } + if (root != null) { + tmp = File(root).resolve(name ?: tmp.name).also { + tmp.renameTo(it) + } + } ok(data = DownloadResult( file = tmp.absolutePath, md5 = MD5.genFileMd5Hex(tmp.absolutePath) diff --git a/xposed/src/main/java/moe/fuqiuluo/shamrock/remote/action/handlers/QuickOperation.kt b/xposed/src/main/java/moe/fuqiuluo/shamrock/remote/action/handlers/QuickOperation.kt index 8bcf160..d1e1697 100644 --- a/xposed/src/main/java/moe/fuqiuluo/shamrock/remote/action/handlers/QuickOperation.kt +++ b/xposed/src/main/java/moe/fuqiuluo/shamrock/remote/action/handlers/QuickOperation.kt @@ -83,25 +83,28 @@ internal object QuickOperation : IActionHandler() { } } - if (MsgConstant.KCHATTYPEGROUP == record.chatType && operation["delete"].asBooleanOrNull == true) { - val duration = operation["delay"].asIntOrNull - if (duration != null) { - GlobalScope.launch { - delay(duration.toLong()) + if (MsgConstant.KCHATTYPEGROUP == record.chatType) { + if (operation["delete"].asBooleanOrNull == true) { + val duration = operation["delay"].asIntOrNull + if (duration != null) { + GlobalScope.launch { + delay(duration.toLong()) + MsgSvc.recallMsg(msgHash) + } + } else { MsgSvc.recallMsg(msgHash) } - } else { - MsgSvc.recallMsg(msgHash) + } + if (operation["kick"].asBooleanOrNull == true) { + GroupSvc.kickMember(record.peerUin, false, "", record.senderUin) + } + if (operation["ban"].asBooleanOrNull == true) { + val banTime = operation["ban_duration"].asIntOrNull ?: (30 * 60) + if (banTime <= 0) return logic("禁言时间必须大于0", session.echo) + GroupSvc.banMember(record.peerUin, record.senderUin, banTime) } } - if (MsgConstant.KCHATTYPEGROUP == record.chatType && operation["kick"].asBooleanOrNull == true) { - GroupSvc.kickMember(record.peerUin, false, "", record.senderUin) - } - if (MsgConstant.KCHATTYPEGROUP == record.chatType && operation["ban"].asBooleanOrNull == true) { - val banTime = operation["ban_duration"].asIntOrNull ?: (30 * 60) - if (banTime <= 0) return logic("禁言时间必须大于0", session.echo) - GroupSvc.banMember(record.peerUin, record.senderUin, banTime) - } + return logic("操作成功", session.echo) }