From ca62b332756677129854a3d785eac266934e1b4b Mon Sep 17 00:00:00 2001 From: WhiteChi Date: Sat, 11 Nov 2023 23:02:36 +0800 Subject: [PATCH] =?UTF-8?q?`Shamrock`:=20=E4=BF=AE=E5=A4=8D=E8=8E=B7?= =?UTF-8?q?=E5=8F=96=E5=8E=86=E5=8F=B2=E6=B6=88=E6=81=AF=E4=B8=A2=E5=A4=B1?= =?UTF-8?q?=E5=BD=93=E5=89=8DID=E7=9A=84=E6=B6=88=E6=81=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../remote/action/handlers/GetHistoryMsg.kt | 58 +++++++++++++------ .../shamrock/remote/api/OtherAction.kt | 2 +- 2 files changed, 42 insertions(+), 18 deletions(-) diff --git a/xposed/src/main/java/moe/fuqiuluo/shamrock/remote/action/handlers/GetHistoryMsg.kt b/xposed/src/main/java/moe/fuqiuluo/shamrock/remote/action/handlers/GetHistoryMsg.kt index 4dd454a..723eac1 100644 --- a/xposed/src/main/java/moe/fuqiuluo/shamrock/remote/action/handlers/GetHistoryMsg.kt +++ b/xposed/src/main/java/moe/fuqiuluo/shamrock/remote/action/handlers/GetHistoryMsg.kt @@ -5,6 +5,7 @@ import com.tencent.qqnt.kernel.nativeinterface.MsgRecord import kotlinx.serialization.SerialName import kotlinx.serialization.Serializable import kotlinx.serialization.json.JsonElement +import moe.fuqiuluo.qqinterface.servlet.MsgSvc import moe.fuqiuluo.qqinterface.servlet.msg.convert.MessageConvert import moe.fuqiuluo.shamrock.helper.MessageHelper import moe.fuqiuluo.shamrock.helper.db.MessageDB @@ -53,23 +54,46 @@ internal object GetHistoryMsg: IActionHandler() { return logic(result.msg ?: "获取历史消息失败", echo = echo) } - val msgList = result.data!!.map { msg -> - val msgHash = MessageHelper.generateMsgIdHash(msg.chatType, msg.msgId) - MessageDetail( - time = msg.msgTime.toInt(), - msgType = MessageHelper.obtainDetailTypeByMsgType(msg.chatType), - msgId = msgHash, - realId = msg.msgSeq.toInt(), - sender = MessageSender( - msg.senderUin, msg.sendNickName, "unknown", 0, msg.senderUid - ), - message = MessageConvert.convertMessageRecordToMsgSegment(msg).map { - it.toJson() - }, - peerId = msg.peerUin, - groupId = if (msg.chatType == MsgConstant.KCHATTYPEGROUP) msg.peerUin else 0, - targetId = if (msg.chatType != MsgConstant.KCHATTYPEGROUP) msg.peerUin else 0 - ) + val msgList = ArrayList().apply { + addAll(result.data!!.map { msg -> + val msgHash = MessageHelper.generateMsgIdHash(msg.chatType, msg.msgId) + MessageDetail( + time = msg.msgTime.toInt(), + msgType = MessageHelper.obtainDetailTypeByMsgType(msg.chatType), + msgId = msgHash, + realId = msg.msgSeq.toInt(), + sender = MessageSender( + msg.senderUin, msg.sendNickName, "unknown", 0, msg.senderUid + ), + message = MessageConvert.convertMessageRecordToMsgSegment(msg).map { + it.toJson() + }, + peerId = msg.peerUin, + groupId = if (msg.chatType == MsgConstant.KCHATTYPEGROUP) msg.peerUin else 0, + targetId = if (msg.chatType != MsgConstant.KCHATTYPEGROUP) msg.peerUin else 0 + ) + }) + if (startMsgId != 0L) { + val msg = MsgSvc.getMsgByQMsgId(chatType, peerId, startMsgId).onFailure { + return logic("Obtain msg failed, please check your msg_id.", echo) + }.getOrThrow() + val seq = msg.clientSeq.toInt() + add(MessageDetail( + time = msg.msgTime.toInt(), + msgType = MessageHelper.obtainDetailTypeByMsgType(msg.chatType), + msgId = MessageHelper.generateMsgIdHash(msg.chatType, msg.msgId), + realId = seq, + sender = MessageSender( + msg.senderUin, msg.sendNickName, "unknown", 0, msg.senderUid + ), + message = MessageConvert.convertMessageRecordToMsgSegment(msg).map { + it.toJson() + }, + peerId = msg.peerUin, + groupId = if (msg.chatType == MsgConstant.KCHATTYPEGROUP) msg.peerUin else 0, + targetId = if (msg.chatType != MsgConstant.KCHATTYPEGROUP) msg.peerUin else 0 + )) + } } return ok(data = GetHistoryMsgResult(msgList), echo = echo) diff --git a/xposed/src/main/java/moe/fuqiuluo/shamrock/remote/api/OtherAction.kt b/xposed/src/main/java/moe/fuqiuluo/shamrock/remote/api/OtherAction.kt index 972b94d..b8fe755 100644 --- a/xposed/src/main/java/moe/fuqiuluo/shamrock/remote/api/OtherAction.kt +++ b/xposed/src/main/java/moe/fuqiuluo/shamrock/remote/api/OtherAction.kt @@ -35,7 +35,7 @@ import java.util.concurrent.TimeUnit fun Routing.otherAction() { if (ShamrockConfig.allowShell()) { - getOrPost("/shell") { + post("/shell") { val runtime = Runtime.getRuntime() val dir = fetchOrThrow("dir") val out = StringBuilder()