From 1d0a0731fb738e733f51cef71368748a5aaa66d5 Mon Sep 17 00:00:00 2001 From: owo233 Date: Sun, 10 Dec 2023 01:57:38 +0800 Subject: [PATCH] =?UTF-8?q?`Shamrock`:=20=E4=BF=AE=E5=A4=8D=E7=BE=A4?= =?UTF-8?q?=E6=B6=88=E6=81=AF=E6=92=A4=E5=9B=9E=E4=BA=8B=E4=BB=B6=E7=BE=A4?= =?UTF-8?q?=E5=8F=B7=E8=8E=B7=E5=8F=96=E9=94=99=E8=AF=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../service/listener/PrimitiveListener.kt | 27 +++++++++---------- 1 file changed, 13 insertions(+), 14 deletions(-) diff --git a/xposed/src/main/java/moe/fuqiuluo/shamrock/remote/service/listener/PrimitiveListener.kt b/xposed/src/main/java/moe/fuqiuluo/shamrock/remote/service/listener/PrimitiveListener.kt index 70c4b60..7260127 100644 --- a/xposed/src/main/java/moe/fuqiuluo/shamrock/remote/service/listener/PrimitiveListener.kt +++ b/xposed/src/main/java/moe/fuqiuluo/shamrock/remote/service/listener/PrimitiveListener.kt @@ -452,17 +452,19 @@ internal object PrimitiveListener { } private suspend fun onGroupRecall(time: Long, pb: ProtoMap) { - val groupCode = pb[1, 1, 1].asULong - val readPacket = ByteReadPacket(pb[1, 3, 2].asByteArray) - try { - /** - * 真是不理解这个傻呗设计,有些群是正常的Protobuf,有些群要去掉7字节 - */ - val detail = if (readPacket.readBuf32Long() == groupCode) { - readPacket.discardExact(1) - ProtoUtils.decodeFromByteArray(readPacket.readBytes(readPacket.readShort().toInt())) - } else pb[1, 3, 2] - + var detail = pb[1, 3, 2] + if (detail !is ProtoMap) { + try { + val readPacket = ByteReadPacket(detail.asByteArray) + readPacket.discardExact(4) + readPacket.discardExact(1) + detail = ProtoUtils.decodeFromByteArray(readPacket.readBytes(readPacket.readShort().toInt())) + readPacket.release() + } catch (e: Exception) { + LogCenter.log("onGroupRecall error: ${e.stackTraceToString()}", Level.WARN) + } + } + val groupCode = detail[4].asULong val operatorUid = detail[11, 1].asUtf8String val targetUid = detail[11, 3, 6].asUtf8String val msgSeq = detail[11, 3, 1].asLong @@ -482,9 +484,6 @@ internal object PrimitiveListener { ) { LogCenter.log("群消息撤回推送失败!", Level.WARN) } - } finally { - readPacket.release() - } } private suspend fun onGroupApply(time: Long, pb: ProtoMap) {