From dcb2b0a26f26bb4a43f19fb80fea6c37ec380b39 Mon Sep 17 00:00:00 2001 From: WhiteChi Date: Tue, 12 Dec 2023 10:28:24 +0800 Subject: [PATCH] `Shamrock`: fix #149 --- .../shamrock/ui/app/ShamrockConfig.kt | 15 ++- .../shamrock/ui/fragment/LabFragment.kt | 11 ++ .../remote/service/config/ShamrockConfig.kt | 5 + .../remote/service/listener/AioListener.kt | 125 ++++++------------ 4 files changed, 65 insertions(+), 91 deletions(-) diff --git a/app/src/main/java/moe/fuqiuluo/shamrock/ui/app/ShamrockConfig.kt b/app/src/main/java/moe/fuqiuluo/shamrock/ui/app/ShamrockConfig.kt index 2ed562e..2aec6f8 100644 --- a/app/src/main/java/moe/fuqiuluo/shamrock/ui/app/ShamrockConfig.kt +++ b/app/src/main/java/moe/fuqiuluo/shamrock/ui/app/ShamrockConfig.kt @@ -279,19 +279,19 @@ object ShamrockConfig { return preferences.getBoolean("enable_self_msg", false) } + fun enableSyncMsg(ctx: Context): Boolean { + val preferences = ctx.getSharedPreferences("config", 0) + return preferences.getBoolean("enable_sync_msg", false) + } + fun setEnableSelfMsg(ctx: Context, v: Boolean) { val preferences = ctx.getSharedPreferences("config", 0) preferences.edit().putBoolean("enable_self_msg", v).apply() } - fun isEchoNumber(ctx: Context): Boolean { + fun setEnableSyncMsg(ctx: Context, v: Boolean) { val preferences = ctx.getSharedPreferences("config", 0) - return preferences.getBoolean("echo_number", false) - } - - fun setEchoNumber(ctx: Context, v: Boolean) { - val preferences = ctx.getSharedPreferences("config", 0) - preferences.edit().putBoolean("echo_number", v).apply() + preferences.edit().putBoolean("enable_sync_msg", v).apply() } fun getConfigMap(ctx: Context): Map { @@ -321,6 +321,7 @@ object ShamrockConfig { "echo_number" to preferences.getBoolean("echo_number", false), "shell" to preferences.getBoolean("shell", false), "alive_reply" to preferences.getBoolean("alive_reply", false), + "enable_sync_msg" to preferences.getBoolean("enable_sync_msg", false), ) } diff --git a/app/src/main/java/moe/fuqiuluo/shamrock/ui/fragment/LabFragment.kt b/app/src/main/java/moe/fuqiuluo/shamrock/ui/fragment/LabFragment.kt index b5f139a..02dc594 100644 --- a/app/src/main/java/moe/fuqiuluo/shamrock/ui/fragment/LabFragment.kt +++ b/app/src/main/java/moe/fuqiuluo/shamrock/ui/fragment/LabFragment.kt @@ -264,6 +264,17 @@ fun LabFragment() { thickness = 0.2.dp ) + Function( + title = "同步消息推送", + desc = "推送来自同号异设备消息,未做特殊处理请勿打开。", + descColor = it, + isSwitch = ShamrockConfig.enableSyncMsg(ctx) + ) { + ShamrockConfig.setEnableSyncMsg(ctx, it) + ShamrockConfig.pushUpdate(ctx) + return@Function true + } + Function( title = "自发消息推送", desc = "推送Bot发送的消息,未做特殊处理请勿打开。", diff --git a/xposed/src/main/java/moe/fuqiuluo/shamrock/remote/service/config/ShamrockConfig.kt b/xposed/src/main/java/moe/fuqiuluo/shamrock/remote/service/config/ShamrockConfig.kt index d2e927f..569f80f 100644 --- a/xposed/src/main/java/moe/fuqiuluo/shamrock/remote/service/config/ShamrockConfig.kt +++ b/xposed/src/main/java/moe/fuqiuluo/shamrock/remote/service/config/ShamrockConfig.kt @@ -76,6 +76,7 @@ internal object ShamrockConfig { putBoolean("enable_self_msg", intent.getBooleanExtra("enable_self_msg", false)) // 推送自己发的消息 putBoolean("shell", intent.getBooleanExtra("shell", false)) // 开启Shell接口 + putBoolean("enable_sync_msg", intent.getBooleanExtra("enable_sync_msg", false)) // 推送同步消息 putBoolean("isInit", true) } @@ -101,6 +102,10 @@ internal object ShamrockConfig { return Config.rules?.privateRule } + fun enableSyncMsg(): Boolean { + return mmkv.getBoolean("enable_sync_msg", false) + } + fun enableSelfMsg(): Boolean { return mmkv.getBoolean("enable_self_msg", false) } diff --git a/xposed/src/main/java/moe/fuqiuluo/shamrock/remote/service/listener/AioListener.kt b/xposed/src/main/java/moe/fuqiuluo/shamrock/remote/service/listener/AioListener.kt index 3b74045..0ca896f 100644 --- a/xposed/src/main/java/moe/fuqiuluo/shamrock/remote/service/listener/AioListener.kt +++ b/xposed/src/main/java/moe/fuqiuluo/shamrock/remote/service/listener/AioListener.kt @@ -67,103 +67,60 @@ internal object AioListener : IKernelMsgListener { MessageHelper.sendMessageWithoutMsgId(record.chatType, record.peerUin.toString(), "pong", { _, _ -> }) } + if (record.senderUin == TicketSvc.getLongUin() && !ShamrockConfig.enableSyncMsg()) { + // 不允许推送同步消息 + return + } + //if (rawMsg.contains("forward")) { // LogCenter.log(record.extInfoForUI.decodeToString(), Level.WARN) //} - if (record.senderUin != TicketSvc.getLongUin() - || record.peerUin == TicketSvc.getLongUin() - ) { - when (record.chatType) { - MsgConstant.KCHATTYPEGROUP -> { - LogCenter.log("群消息(group = ${record.peerName}(${record.peerUin}), uin = ${record.senderUin}, id = $msgHash|${record.msgSeq}, msg = $rawMsg)") - ShamrockConfig.getGroupMsgRule()?.let { rule -> - if (!rule.black.isNullOrEmpty() && rule.black.contains(record.senderUin)) return - if (!rule.white.isNullOrEmpty() && !rule.white.contains(record.senderUin)) return - } - if (!GlobalEventTransmitter.MessageTransmitter.transGroupMessage( - record, record.elements, rawMsg, msgHash - ) - ) { - LogCenter.log("群消息推送失败 -> MessageTransmitter", Level.WARN) - } + when (record.chatType) { + MsgConstant.KCHATTYPEGROUP -> { + LogCenter.log("群消息(group = ${record.peerName}(${record.peerUin}), uin = ${record.senderUin}, id = $msgHash|${record.msgSeq}, msg = $rawMsg)") + ShamrockConfig.getGroupMsgRule()?.let { rule -> + if (!rule.black.isNullOrEmpty() && rule.black.contains(record.senderUin)) return + if (!rule.white.isNullOrEmpty() && !rule.white.contains(record.senderUin)) return } - MsgConstant.KCHATTYPEC2C -> { - LogCenter.log("私聊消息(private = ${record.senderUin}, id = [$msgHash | ${record.msgId} | ${record.msgSeq}], msg = $rawMsg)") - ShamrockConfig.getPrivateRule()?.let { rule -> - if (!rule.black.isNullOrEmpty() && rule.black.contains(record.senderUin)) return - if (!rule.white.isNullOrEmpty() && !rule.white.contains(record.senderUin)) return - } - - if (!GlobalEventTransmitter.MessageTransmitter.transPrivateMessage( - record, record.elements, rawMsg, msgHash - ) - ) { - LogCenter.log("私聊消息推送失败 -> MessageTransmitter", Level.WARN) - } + if(!GlobalEventTransmitter.MessageTransmitter.transGroupMessage( + record, record.elements, rawMsg, msgHash + )) { + LogCenter.log("群消息推送失败 -> 推送目标可能不存在", Level.WARN) } - - MsgConstant.KCHATTYPETEMPC2CFROMGROUP -> { - if (!ShamrockConfig.allowTempSession()) return - - LogCenter.log("私聊临时消息(private = ${record.senderUin}, id = $msgHash, msg = $rawMsg)") - ShamrockConfig.getPrivateRule()?.let { rule -> - if (!rule.black.isNullOrEmpty() && rule.black.contains(record.senderUin)) return - if (!rule.white.isNullOrEmpty() && !rule.white.contains(record.senderUin)) return - } - - if (!GlobalEventTransmitter.MessageTransmitter.transPrivateMessage( - record, record.elements, rawMsg, msgHash, tempSource = MessageTempSource.Group - ) - ) { - LogCenter.log("私聊临时消息推送失败 -> MessageTransmitter", Level.WARN) - } - } - - else -> LogCenter.log("不支持PUSH事件: ${record.chatType}") } - } else { - if (ShamrockConfig.enableSelfMsg()) - LogCenter.log("自发消息(target = ${record.peerUin}, id = $msgHash, msg = $rawMsg)") - - when (record.chatType) { - MsgConstant.KCHATTYPEGROUP -> { - if (!GlobalEventTransmitter.MessageTransmitter - .transGroupMessage(record, record.elements, rawMsg, msgHash, PostType.MsgSent) - ) { - LogCenter.log("自发群消息推送失败 -> MessageTransmitter", Level.WARN) - } + MsgConstant.KCHATTYPEC2C -> { + LogCenter.log("私聊消息(private = ${record.senderUin}, id = [$msgHash | ${record.msgId} | ${record.msgSeq}], msg = $rawMsg)") + ShamrockConfig.getPrivateRule()?.let { rule -> + if (!rule.black.isNullOrEmpty() && rule.black.contains(record.senderUin)) return + if (!rule.white.isNullOrEmpty() && !rule.white.contains(record.senderUin)) return } - MsgConstant.KCHATTYPEC2C -> { - if (!GlobalEventTransmitter.MessageTransmitter - .transPrivateMessage(record, record.elements, rawMsg, msgHash, PostType.MsgSent) - ) { - LogCenter.log("自发私聊消息推送失败 -> MessageTransmitter", Level.WARN) - } + if(!GlobalEventTransmitter.MessageTransmitter.transPrivateMessage( + record, record.elements, rawMsg, msgHash + )) { + LogCenter.log("私聊消息推送失败 -> MessageTransmitter", Level.WARN) } - - MsgConstant.KCHATTYPETEMPC2CFROMGROUP -> { - if (!ShamrockConfig.allowTempSession()) return - if (!GlobalEventTransmitter.MessageTransmitter - .transPrivateMessage( - record, - record.elements, - rawMsg, - msgHash, - PostType.MsgSent, - MessageTempSource.Group - ) - ) { - LogCenter.log("自发私聊临时消息推送失败 -> MessageTransmitter", Level.WARN) - } - } - - else -> LogCenter.log("不支持SELF PUSH事件: ${record.chatType}") } + + MsgConstant.KCHATTYPETEMPC2CFROMGROUP -> { + if (!ShamrockConfig.allowTempSession()) return + + LogCenter.log("私聊临时消息(private = ${record.senderUin}, id = $msgHash, msg = $rawMsg)") + ShamrockConfig.getPrivateRule()?.let { rule -> + if (!rule.black.isNullOrEmpty() && rule.black.contains(record.senderUin)) return + if (!rule.white.isNullOrEmpty() && !rule.white.contains(record.senderUin)) return + } + + if(!GlobalEventTransmitter.MessageTransmitter.transPrivateMessage( + record, record.elements, rawMsg, msgHash, tempSource = MessageTempSource.Group + )) { + LogCenter.log("私聊临时消息推送失败 -> MessageTransmitter", Level.WARN) + } + } + else -> LogCenter.log("不支持PUSH事件: ${record.chatType}") } - } catch (e: Throwable) { LogCenter.log(e.stackTraceToString(), Level.WARN) }