Shamrock: fix #149

This commit is contained in:
WhiteChi 2023-12-12 10:28:24 +08:00
parent d388e5df0c
commit dcb2b0a26f
4 changed files with 65 additions and 91 deletions

View File

@ -279,19 +279,19 @@ object ShamrockConfig {
return preferences.getBoolean("enable_self_msg", false) 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) { fun setEnableSelfMsg(ctx: Context, v: Boolean) {
val preferences = ctx.getSharedPreferences("config", 0) val preferences = ctx.getSharedPreferences("config", 0)
preferences.edit().putBoolean("enable_self_msg", v).apply() 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) val preferences = ctx.getSharedPreferences("config", 0)
return preferences.getBoolean("echo_number", false) preferences.edit().putBoolean("enable_sync_msg", v).apply()
}
fun setEchoNumber(ctx: Context, v: Boolean) {
val preferences = ctx.getSharedPreferences("config", 0)
preferences.edit().putBoolean("echo_number", v).apply()
} }
fun getConfigMap(ctx: Context): Map<String, Any?> { fun getConfigMap(ctx: Context): Map<String, Any?> {
@ -321,6 +321,7 @@ object ShamrockConfig {
"echo_number" to preferences.getBoolean("echo_number", false), "echo_number" to preferences.getBoolean("echo_number", false),
"shell" to preferences.getBoolean("shell", false), "shell" to preferences.getBoolean("shell", false),
"alive_reply" to preferences.getBoolean("alive_reply", false), "alive_reply" to preferences.getBoolean("alive_reply", false),
"enable_sync_msg" to preferences.getBoolean("enable_sync_msg", false),
) )
} }

View File

@ -264,6 +264,17 @@ fun LabFragment() {
thickness = 0.2.dp thickness = 0.2.dp
) )
Function(
title = "同步消息推送",
desc = "推送来自同号异设备消息,未做特殊处理请勿打开。",
descColor = it,
isSwitch = ShamrockConfig.enableSyncMsg(ctx)
) {
ShamrockConfig.setEnableSyncMsg(ctx, it)
ShamrockConfig.pushUpdate(ctx)
return@Function true
}
Function( Function(
title = "自发消息推送", title = "自发消息推送",
desc = "推送Bot发送的消息未做特殊处理请勿打开。", desc = "推送Bot发送的消息未做特殊处理请勿打开。",

View File

@ -76,6 +76,7 @@ internal object ShamrockConfig {
putBoolean("enable_self_msg", intent.getBooleanExtra("enable_self_msg", false)) // 推送自己发的消息 putBoolean("enable_self_msg", intent.getBooleanExtra("enable_self_msg", false)) // 推送自己发的消息
putBoolean("shell", intent.getBooleanExtra("shell", false)) // 开启Shell接口 putBoolean("shell", intent.getBooleanExtra("shell", false)) // 开启Shell接口
putBoolean("enable_sync_msg", intent.getBooleanExtra("enable_sync_msg", false)) // 推送同步消息
putBoolean("isInit", true) putBoolean("isInit", true)
} }
@ -101,6 +102,10 @@ internal object ShamrockConfig {
return Config.rules?.privateRule return Config.rules?.privateRule
} }
fun enableSyncMsg(): Boolean {
return mmkv.getBoolean("enable_sync_msg", false)
}
fun enableSelfMsg(): Boolean { fun enableSelfMsg(): Boolean {
return mmkv.getBoolean("enable_self_msg", false) return mmkv.getBoolean("enable_self_msg", false)
} }

View File

@ -67,103 +67,60 @@ internal object AioListener : IKernelMsgListener {
MessageHelper.sendMessageWithoutMsgId(record.chatType, record.peerUin.toString(), "pong", { _, _ -> }) MessageHelper.sendMessageWithoutMsgId(record.chatType, record.peerUin.toString(), "pong", { _, _ -> })
} }
if (record.senderUin == TicketSvc.getLongUin() && !ShamrockConfig.enableSyncMsg()) {
// 不允许推送同步消息
return
}
//if (rawMsg.contains("forward")) { //if (rawMsg.contains("forward")) {
// LogCenter.log(record.extInfoForUI.decodeToString(), Level.WARN) // 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( when (record.chatType) {
record, record.elements, rawMsg, msgHash MsgConstant.KCHATTYPEGROUP -> {
) LogCenter.log("群消息(group = ${record.peerName}(${record.peerUin}), uin = ${record.senderUin}, id = $msgHash|${record.msgSeq}, msg = $rawMsg)")
) { ShamrockConfig.getGroupMsgRule()?.let { rule ->
LogCenter.log("群消息推送失败 -> MessageTransmitter", Level.WARN) 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.transGroupMessage(
LogCenter.log("私聊消息(private = ${record.senderUin}, id = [$msgHash | ${record.msgId} | ${record.msgSeq}], msg = $rawMsg)") record, record.elements, rawMsg, msgHash
ShamrockConfig.getPrivateRule()?.let { rule -> )) {
if (!rule.black.isNullOrEmpty() && rule.black.contains(record.senderUin)) return LogCenter.log("群消息推送失败 -> 推送目标可能不存在", Level.WARN)
if (!rule.white.isNullOrEmpty() && !rule.white.contains(record.senderUin)) return
}
if (!GlobalEventTransmitter.MessageTransmitter.transPrivateMessage(
record, record.elements, rawMsg, msgHash
)
) {
LogCenter.log("私聊消息推送失败 -> MessageTransmitter", 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 { MsgConstant.KCHATTYPEC2C -> {
if (ShamrockConfig.enableSelfMsg()) LogCenter.log("私聊消息(private = ${record.senderUin}, id = [$msgHash | ${record.msgId} | ${record.msgSeq}], msg = $rawMsg)")
LogCenter.log("自发消息(target = ${record.peerUin}, id = $msgHash, msg = $rawMsg)") ShamrockConfig.getPrivateRule()?.let { rule ->
if (!rule.black.isNullOrEmpty() && rule.black.contains(record.senderUin)) return
when (record.chatType) { if (!rule.white.isNullOrEmpty() && !rule.white.contains(record.senderUin)) return
MsgConstant.KCHATTYPEGROUP -> {
if (!GlobalEventTransmitter.MessageTransmitter
.transGroupMessage(record, record.elements, rawMsg, msgHash, PostType.MsgSent)
) {
LogCenter.log("自发群消息推送失败 -> MessageTransmitter", Level.WARN)
}
} }
MsgConstant.KCHATTYPEC2C -> { if(!GlobalEventTransmitter.MessageTransmitter.transPrivateMessage(
if (!GlobalEventTransmitter.MessageTransmitter record, record.elements, rawMsg, msgHash
.transPrivateMessage(record, record.elements, rawMsg, msgHash, PostType.MsgSent) )) {
) { LogCenter.log("私聊消息推送失败 -> MessageTransmitter", Level.WARN)
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) { } catch (e: Throwable) {
LogCenter.log(e.stackTraceToString(), Level.WARN) LogCenter.log(e.stackTraceToString(), Level.WARN)
} }