diff --git a/xposed/src/main/java/moe/fuqiuluo/shamrock/remote/action/handlers/SendForwardMessage.kt b/xposed/src/main/java/moe/fuqiuluo/shamrock/remote/action/handlers/SendForwardMessage.kt index 8e8583f..bd567a7 100644 --- a/xposed/src/main/java/moe/fuqiuluo/shamrock/remote/action/handlers/SendForwardMessage.kt +++ b/xposed/src/main/java/moe/fuqiuluo/shamrock/remote/action/handlers/SendForwardMessage.kt @@ -24,31 +24,33 @@ internal object SendForwardMessage : IActionHandler() { MessageHelper.obtainMessageTypeByDetailType(it) } ?: run { if (session.has("user_id")) { - MsgConstant.KCHATTYPEC2C + if (session.has("group_id")) { + MsgConstant.KCHATTYPETEMPC2CFROMGROUP + } else { + MsgConstant.KCHATTYPEC2C + } } else if (session.has("group_id")) { MsgConstant.KCHATTYPEGROUP } else { return noParam("detail_type/message_type", session.echo) } } - val peerId = when (chatType) { - MsgConstant.KCHATTYPEGROUP -> session.getStringOrNull("group_id") ?: return noParam( - "group_id", - session.echo - ) - - MsgConstant.KCHATTYPEC2C -> session.getStringOrNull("user_id") ?: return noParam( - "user_id", - session.echo - ) - + val peerId = when(chatType) { + MsgConstant.KCHATTYPEGROUP -> session.getStringOrNull("group_id") ?: return noParam("group_id", session.echo) + MsgConstant.KCHATTYPEC2C, MsgConstant.KCHATTYPETEMPC2CFROMGROUP -> session.getStringOrNull("user_id") ?: return noParam("user_id", session.echo) else -> error("unknown chat type: $chatType") } - if (session.isArray("messages")) { - val messages = session.getArray("messages") - invoke(chatType, peerId, messages, echo = session.echo) + val fromId = when(chatType) { + MsgConstant.KCHATTYPEGROUP, MsgConstant.KCHATTYPETEMPC2CFROMGROUP -> session.getStringOrNull("group_id") ?: return noParam("group_id", session.echo) + MsgConstant.KCHATTYPEC2C -> session.getStringOrNull("user_id") ?: return noParam("user_id", session.echo) + else -> error("unknown chat type: $chatType") + } + return if (session.isArray("messages")) { + val messages = session.getArray("messages") + invoke(chatType, peerId, messages, fromId, echo = session.echo) + } else { + logic("未知格式合并转发消息", session.echo) } - return logic("未知格式合并转发消息", session.echo) } catch (e: ParamsException) { return noParam(e.message!!, session.echo) } catch (e: Throwable) { @@ -60,6 +62,7 @@ internal object SendForwardMessage : IActionHandler() { chatType: Int, peerId: String, messages: JsonArray, + fromId: String = peerId, echo: JsonElement = EmptyJsonString ): String { kotlin.runCatching { @@ -148,7 +151,7 @@ internal object SendForwardMessage : IActionHandler() { }.filterNotNull() val from = MessageHelper.generateContact(MsgConstant.KCHATTYPEC2C, selfUin) - val to = MessageHelper.generateContact(chatType, peerId) + val to = MessageHelper.generateContact(chatType, peerId, fromId) val uniseq = MessageHelper.generateMsgId(chatType) msgService.multiForwardMsg(ArrayList().apply { diff --git a/xposed/src/main/java/moe/fuqiuluo/shamrock/remote/action/handlers/SendGroupForwardMessage.kt b/xposed/src/main/java/moe/fuqiuluo/shamrock/remote/action/handlers/SendGroupForwardMessage.kt index 87452dc..46d3ee9 100644 --- a/xposed/src/main/java/moe/fuqiuluo/shamrock/remote/action/handlers/SendGroupForwardMessage.kt +++ b/xposed/src/main/java/moe/fuqiuluo/shamrock/remote/action/handlers/SendGroupForwardMessage.kt @@ -9,7 +9,7 @@ internal object SendGroupForwardMessage: IActionHandler() { val groupId = session.getString("group_id") return if (session.isArray("messages")) { val messages = session.getArray("messages") - SendForwardMessage(MsgConstant.KCHATTYPEGROUP, groupId, messages, session.echo) + SendForwardMessage(MsgConstant.KCHATTYPEGROUP, groupId, messages, echo = session.echo) } else { logic("未知格式合并转发消息", session.echo) } diff --git a/xposed/src/main/java/moe/fuqiuluo/shamrock/remote/action/handlers/SendMessage.kt b/xposed/src/main/java/moe/fuqiuluo/shamrock/remote/action/handlers/SendMessage.kt index 48933df..b2b81ca 100644 --- a/xposed/src/main/java/moe/fuqiuluo/shamrock/remote/action/handlers/SendMessage.kt +++ b/xposed/src/main/java/moe/fuqiuluo/shamrock/remote/action/handlers/SendMessage.kt @@ -20,11 +20,15 @@ internal object SendMessage: IActionHandler() { override suspend fun internalHandle(session: ActionSession): String { val detailType = session.getStringOrNull("detail_type") ?: session.getStringOrNull("message_type") try { - var chatType = detailType?.let { + val chatType = detailType?.let { MessageHelper.obtainMessageTypeByDetailType(it) } ?: run { if (session.has("user_id")) { - MsgConstant.KCHATTYPEC2C + if (session.has("group_id")) { + MsgConstant.KCHATTYPETEMPC2CFROMGROUP + } else { + MsgConstant.KCHATTYPEC2C + } } else if (session.has("group_id")) { MsgConstant.KCHATTYPEGROUP } else { @@ -33,16 +37,13 @@ internal object SendMessage: IActionHandler() { } val peerId = when(chatType) { MsgConstant.KCHATTYPEGROUP -> session.getStringOrNull("group_id") ?: return noParam("group_id", session.echo) - MsgConstant.KCHATTYPEC2C -> session.getStringOrNull("user_id") ?: return noParam("user_id", session.echo) + MsgConstant.KCHATTYPEC2C, MsgConstant.KCHATTYPETEMPC2CFROMGROUP -> session.getStringOrNull("user_id") ?: return noParam("user_id", session.echo) else -> error("unknown chat type: $chatType") } - var fromId = peerId - if (chatType == MsgConstant.KCHATTYPEC2C) { - val groupId = session.getStringOrNull("group_id") - if (groupId != null) { - chatType = MsgConstant.KCHATTYPETEMPC2CFROMGROUP - fromId = groupId - } + val fromId = when(chatType) { + MsgConstant.KCHATTYPEGROUP, MsgConstant.KCHATTYPETEMPC2CFROMGROUP -> session.getStringOrNull("group_id") ?: return noParam("group_id", session.echo) + MsgConstant.KCHATTYPEC2C -> session.getStringOrNull("user_id") ?: return noParam("user_id", session.echo) + else -> error("unknown chat type: $chatType") } val retryCnt = session.getIntOrNull("retry_cnt") return if (session.isString("message")) { diff --git a/xposed/src/main/java/moe/fuqiuluo/shamrock/remote/action/handlers/SendPrivateForwardMessage.kt b/xposed/src/main/java/moe/fuqiuluo/shamrock/remote/action/handlers/SendPrivateForwardMessage.kt index 4468ba2..e64f28f 100644 --- a/xposed/src/main/java/moe/fuqiuluo/shamrock/remote/action/handlers/SendPrivateForwardMessage.kt +++ b/xposed/src/main/java/moe/fuqiuluo/shamrock/remote/action/handlers/SendPrivateForwardMessage.kt @@ -9,7 +9,7 @@ internal object SendPrivateForwardMessage : IActionHandler() { val userId = session.getString("user_id") return if (session.isArray("messages")) { val messages = session.getArray("messages") - SendForwardMessage(MsgConstant.KCHATTYPEC2C, userId, messages, session.echo) + SendForwardMessage(MsgConstant.KCHATTYPEC2C, userId, messages, echo = session.echo) } else { logic("未知格式合并转发消息", session.echo) } diff --git a/xposed/src/main/java/moe/fuqiuluo/shamrock/remote/api/MessageAction.kt b/xposed/src/main/java/moe/fuqiuluo/shamrock/remote/api/MessageAction.kt index 5c038c4..7c9b28f 100644 --- a/xposed/src/main/java/moe/fuqiuluo/shamrock/remote/api/MessageAction.kt +++ b/xposed/src/main/java/moe/fuqiuluo/shamrock/remote/api/MessageAction.kt @@ -113,6 +113,7 @@ fun Routing.messageAction() { get { val msgType = fetchGetOrThrow("message_type") val message = fetchGetOrThrow("message") + val retryCnt = fetchGetOrNull("retry_cnt")?.toInt() ?: 3 val autoEscape = fetchGetOrNull("auto_escape")?.toBooleanStrict() ?: false val chatType = MessageHelper.obtainMessageTypeByDetailType(msgType) @@ -124,12 +125,14 @@ fun Routing.messageAction() { peerId = if (chatType == MsgConstant.KCHATTYPEC2C) userId!! else groupId!!, message = message, autoEscape = autoEscape, - fromId = groupId ?: userId ?: "" + fromId = groupId ?: userId ?: "", + retryCnt = retryCnt ), ContentType.Application.Json) } post { val msgType = fetchPostOrThrow("message_type") val chatType = MessageHelper.obtainMessageTypeByDetailType(msgType) + val retryCnt = fetchPostOrNull("retry_cnt")?.toInt() ?: 3 val userId = fetchPostOrNull("user_id") val groupId = fetchPostOrNull("group_id") @@ -141,14 +144,16 @@ fun Routing.messageAction() { chatType = chatType, peerId = peerId, message = listOf(fetchPostJsonObject("message")).jsonArray, - fromId = groupId ?: userId ?: "" + fromId = groupId ?: userId ?: "", + retryCnt = retryCnt ) } else { SendMessage( chatType = chatType, peerId = peerId, message = fetchPostJsonArray("message"), - fromId = groupId ?: userId ?: "" + fromId = groupId ?: userId ?: "", + retryCnt = retryCnt ) } } else { @@ -159,7 +164,8 @@ fun Routing.messageAction() { peerId = peerId, message = fetchPostOrThrow("message"), autoEscape = autoEscape, - fromId = groupId ?: userId ?: "" + fromId = groupId ?: userId ?: "", + retryCnt = retryCnt ) }, ContentType.Application.Json) } @@ -169,34 +175,38 @@ fun Routing.messageAction() { get { val groupId = fetchGetOrThrow("group_id") val message = fetchGetOrThrow("message") + val retryCnt = fetchGetOrNull("retry_cnt")?.toInt() ?: 3 val autoEscape = fetchGetOrNull("auto_escape")?.toBooleanStrict() ?: false - call.respondText(SendMessage(MsgConstant.KCHATTYPEGROUP, groupId, message, autoEscape)) + call.respondText(SendMessage(MsgConstant.KCHATTYPEGROUP, groupId, message, autoEscape, retryCnt = retryCnt)) } post { val groupId = fetchPostOrThrow("group_id") + val retryCnt = fetchPostOrNull("retry_cnt")?.toInt() ?: 3 val autoEscape = fetchPostOrNull("auto_escape")?.toBooleanStrict() ?: false val result = if (isJsonData()) { if (isJsonString("message")) { - SendMessage(MsgConstant.KCHATTYPEGROUP, groupId, fetchPostJsonString("message"), autoEscape) + SendMessage(MsgConstant.KCHATTYPEGROUP, groupId, fetchPostJsonString("message"), autoEscape, retryCnt = retryCnt) } else { if (isJsonObject("message")) { SendMessage( chatType = MsgConstant.KCHATTYPEGROUP, peerId = groupId, - message = listOf(fetchPostJsonObject("message")).jsonArray + message = listOf(fetchPostJsonObject("message")).jsonArray, + retryCnt = retryCnt ) } else { SendMessage( chatType = MsgConstant.KCHATTYPEGROUP, peerId = groupId, - message = fetchPostJsonArray("message") + message = fetchPostJsonArray("message"), + retryCnt = retryCnt ) } } } else { - SendMessage(MsgConstant.KCHATTYPEGROUP, groupId, fetchPostOrThrow("message"), autoEscape) + SendMessage(MsgConstant.KCHATTYPEGROUP, groupId, fetchPostOrThrow("message"), autoEscape, retryCnt = retryCnt) } call.respondText(result, ContentType.Application.Json) @@ -208,18 +218,21 @@ fun Routing.messageAction() { val userId = fetchGetOrThrow("user_id") val groupId = fetchGetOrNull("group_id") val message = fetchGetOrThrow("message") + val retryCnt = fetchGetOrNull("retry_cnt")?.toInt() ?: 3 val autoEscape = fetchGetOrNull("auto_escape")?.toBooleanStrict() ?: false call.respondText(SendMessage( chatType = if (groupId == null) MsgConstant.KCHATTYPEC2C else MsgConstant.KCHATTYPETEMPC2CFROMGROUP, peerId = userId, message = message, autoEscape = autoEscape, - fromId = groupId ?: userId + fromId = groupId ?: userId, + retryCnt = retryCnt ), ContentType.Application.Json) } post { val userId = fetchPostOrThrow("user_id") val groupId = fetchPostOrNull("group_id") + val retryCnt = fetchPostOrNull("retry_cnt")?.toInt() ?: 3 val autoEscape = fetchPostOrNull("auto_escape")?.toBooleanStrict() ?: false val chatType = if (groupId == null) MsgConstant.KCHATTYPEC2C else MsgConstant.KCHATTYPETEMPC2CFROMGROUP @@ -233,7 +246,8 @@ fun Routing.messageAction() { peerId = userId, message = fetchPostJsonString("message"), autoEscape = autoEscape, - fromId = fromId + fromId = fromId, + retryCnt = retryCnt ) } else { if (isJsonObject("message")) { @@ -241,14 +255,16 @@ fun Routing.messageAction() { chatType = chatType, peerId = userId, message = listOf(fetchPostJsonObject("message")).jsonArray, - fromId = fromId + fromId = fromId, + retryCnt = retryCnt ) } else { SendMessage( chatType = chatType, peerId = userId, message = fetchPostJsonArray("message"), - fromId = fromId + fromId = fromId, + retryCnt = retryCnt ) } } @@ -258,7 +274,8 @@ fun Routing.messageAction() { peerId = userId, message = fetchPostOrThrow("message"), autoEscape = autoEscape, - fromId = fromId + fromId = fromId, + retryCnt = retryCnt ) }