Shamrock: fix #256

Signed-off-by: 白池 <whitechi73@outlook.com>
This commit is contained in:
白池 2024-02-26 20:51:45 +08:00
parent befb4a2bef
commit 964c55de31
2 changed files with 37 additions and 19 deletions

View File

@ -12,6 +12,7 @@ import moe.fuqiuluo.shamrock.utils.DownloadUtils
import moe.fuqiuluo.shamrock.utils.FileUtils import moe.fuqiuluo.shamrock.utils.FileUtils
import moe.fuqiuluo.shamrock.utils.MD5 import moe.fuqiuluo.shamrock.utils.MD5
import moe.fuqiuluo.symbols.OneBotHandler import moe.fuqiuluo.symbols.OneBotHandler
import java.io.File
@OneBotHandler("download_file") @OneBotHandler("download_file")
internal object DownloadFile: IActionHandler() { internal object DownloadFile: IActionHandler() {
@ -19,6 +20,7 @@ internal object DownloadFile: IActionHandler() {
val url = session.getStringOrNull("url") val url = session.getStringOrNull("url")
val name = session.getStringOrNull("name") val name = session.getStringOrNull("name")
val b64 = session.getStringOrNull("base64") val b64 = session.getStringOrNull("base64")
val rootDir = session.getStringOrNull("root")
val threadCnt = session.getIntOrNull("thread_cnt") ?: 3 val threadCnt = session.getIntOrNull("thread_cnt") ?: 3
val headers = if (session.has("headers")) (if (session.isArray("headers")) { val headers = if (session.has("headers")) (if (session.isArray("headers")) {
session.getArray("headers").map { session.getArray("headers").map {
@ -27,7 +29,7 @@ internal object DownloadFile: IActionHandler() {
} else { } else {
session.getString("headers").split("\r\n") session.getString("headers").split("\r\n")
}) else emptyList() }) 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( suspend operator fun invoke(
@ -36,6 +38,7 @@ internal object DownloadFile: IActionHandler() {
threadCnt: Int, threadCnt: Int,
headers: List<String>, headers: List<String>,
name: String?, name: String?,
root: String?,
echo: JsonElement = EmptyJsonString echo: JsonElement = EmptyJsonString
): String { ): String {
if (url != null) { if (url != null) {
@ -49,9 +52,9 @@ internal object DownloadFile: IActionHandler() {
headerMap[k] = v headerMap[k] = v
} }
} }
return invoke(url, threadCnt, headerMap, name, echo) return invoke(url, threadCnt, headerMap, name, root, echo)
} else if (base64 != null) { } else if (base64 != null) {
return invoke(base64, name, echo) return invoke(base64, name, root, echo)
} else { } else {
return noParam("url/base64", echo) return noParam("url/base64", echo)
} }
@ -60,6 +63,7 @@ internal object DownloadFile: IActionHandler() {
operator fun invoke( operator fun invoke(
base64: String, base64: String,
name: String?, name: String?,
root: String?,
echo: JsonElement echo: JsonElement
): String { ): String {
kotlin.runCatching { kotlin.runCatching {
@ -68,12 +72,17 @@ internal object DownloadFile: IActionHandler() {
it.writeBytes(bytes) it.writeBytes(bytes)
} }
}.onSuccess { }.onSuccess {
val tmp = if (name == null) var tmp = if (name == null)
FileUtils.renameByMd5(it) FileUtils.renameByMd5(it)
else it.parentFile!!.resolve(name).also { target -> else it.parentFile!!.resolve(name).also { target ->
it.renameTo(target) it.renameTo(target)
it.delete() it.delete()
} }
if (root != null) {
tmp = File(root).resolve(name ?: tmp.name).also {
tmp.renameTo(it)
}
}
return ok(data = DownloadResult( return ok(data = DownloadResult(
file = tmp.absolutePath, file = tmp.absolutePath,
md5 = MD5.genFileMd5Hex(tmp.absolutePath) md5 = MD5.genFileMd5Hex(tmp.absolutePath)
@ -89,6 +98,7 @@ internal object DownloadFile: IActionHandler() {
threadCnt: Int, threadCnt: Int,
headers: Map<String, String>, headers: Map<String, String>,
name: String?, name: String?,
root: String?,
echo: JsonElement = EmptyJsonString echo: JsonElement = EmptyJsonString
): String { ): String {
return kotlin.runCatching { return kotlin.runCatching {
@ -108,6 +118,11 @@ internal object DownloadFile: IActionHandler() {
tmp.renameTo(newFile) tmp.renameTo(newFile)
newFile newFile
} }
if (root != null) {
tmp = File(root).resolve(name ?: tmp.name).also {
tmp.renameTo(it)
}
}
ok(data = DownloadResult( ok(data = DownloadResult(
file = tmp.absolutePath, file = tmp.absolutePath,
md5 = MD5.genFileMd5Hex(tmp.absolutePath) md5 = MD5.genFileMd5Hex(tmp.absolutePath)

View File

@ -83,25 +83,28 @@ internal object QuickOperation : IActionHandler() {
} }
} }
if (MsgConstant.KCHATTYPEGROUP == record.chatType && operation["delete"].asBooleanOrNull == true) { if (MsgConstant.KCHATTYPEGROUP == record.chatType) {
val duration = operation["delay"].asIntOrNull if (operation["delete"].asBooleanOrNull == true) {
if (duration != null) { val duration = operation["delay"].asIntOrNull
GlobalScope.launch { if (duration != null) {
delay(duration.toLong()) GlobalScope.launch {
delay(duration.toLong())
MsgSvc.recallMsg(msgHash)
}
} else {
MsgSvc.recallMsg(msgHash) 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) return logic("操作成功", session.echo)
} }