From 2b64aa8b2cce8c914f1f71dcbf13acb66410f56e Mon Sep 17 00:00:00 2001 From: ikechan8370 Date: Wed, 22 Nov 2023 23:53:26 +0800 Subject: [PATCH] `Shamrock` feat: GroupSystemMessage --- .../shamrock/remote/action/ActionManager.kt | 1 + .../action/handlers/GetGroupSystemMsg.kt | 66 +++++++++++++++++++ .../shamrock/remote/api/GroupAction.kt | 4 ++ .../shamrock/remote/service/data/TroopData.kt | 23 +++++++ 4 files changed, 94 insertions(+) create mode 100644 xposed/src/main/java/moe/fuqiuluo/shamrock/remote/action/handlers/GetGroupSystemMsg.kt diff --git a/xposed/src/main/java/moe/fuqiuluo/shamrock/remote/action/ActionManager.kt b/xposed/src/main/java/moe/fuqiuluo/shamrock/remote/action/ActionManager.kt index a3259a8..2a738e4 100644 --- a/xposed/src/main/java/moe/fuqiuluo/shamrock/remote/action/ActionManager.kt +++ b/xposed/src/main/java/moe/fuqiuluo/shamrock/remote/action/ActionManager.kt @@ -30,6 +30,7 @@ internal object ActionManager { // GroupActions ModifyTroopName, LeaveTroop, KickTroopMember, BanTroopMember, SetGroupWholeBan, SetGroupAdmin, ModifyTroopMemberName, SetGroupUnique, GetTroopHonor, GroupPoke, SetEssenceMessage, DeleteEssenceMessage, + GetGroupSystemMsg, // MSG ACTIONS SendMessage, DeleteMessage, GetMsg, GetForwardMsg, SendGroupForwardMsg, SendGroupMessage, SendPrivateMessage, diff --git a/xposed/src/main/java/moe/fuqiuluo/shamrock/remote/action/handlers/GetGroupSystemMsg.kt b/xposed/src/main/java/moe/fuqiuluo/shamrock/remote/action/handlers/GetGroupSystemMsg.kt new file mode 100644 index 0000000..d45d6df --- /dev/null +++ b/xposed/src/main/java/moe/fuqiuluo/shamrock/remote/action/handlers/GetGroupSystemMsg.kt @@ -0,0 +1,66 @@ +package moe.fuqiuluo.shamrock.remote.action.handlers + +import kotlinx.serialization.json.JsonElement +import moe.fuqiuluo.qqinterface.servlet.GroupSvc +import moe.fuqiuluo.shamrock.remote.action.ActionSession +import moe.fuqiuluo.shamrock.remote.action.IActionHandler +import moe.fuqiuluo.shamrock.remote.service.data.GroupRequest +import moe.fuqiuluo.shamrock.remote.service.data.GroupSystemMessage +import moe.fuqiuluo.shamrock.tools.EmptyJsonString + +internal object GetGroupSystemMsg: IActionHandler() { + override suspend fun internalHandle(session: ActionSession): String { + return invoke(session.echo) + } + + suspend operator fun invoke(echo: JsonElement = EmptyJsonString): String { + val list = GroupSvc.requestGroupSystemMsgNew(20, 0, 0) + val msgs = GroupSystemMessage( + invited = mutableListOf(), + join = mutableListOf() + ) + list?.forEach { + when(it.msg.group_msg_type.get()) { + 22, 2 -> { + // invite + msgs.invited += GroupRequest ( + msgSeq = it.msg_seq.get(), + invitorUin = it.msg.action_uin.get(), + invitorNick = it.msg.action_uin_nick.get(), + groupId = it.msg.group_code.get(), + groupName = it.msg.group_name.get(), + checked = it.msg.msg_decided.get().isNotBlank(), + actor = it.msg.actor_uin.get(), + requesterUin = it.req_uin.get(), + requesterNick = "", + message = "", + flag = "${it.msg_seq.get()};${it.msg.group_code.get()};${it.req_uin.get()}" + ) + } + 1 -> { + // add + msgs.join += GroupRequest ( + msgSeq = it.msg_seq.get(), + invitorUin = null, + invitorNick = null, + groupId = it.msg.group_code.get(), + groupName = it.msg.group_name.get(), + checked = it.msg.msg_decided.get().isNotBlank(), + actor = it.msg.actor_uin.get(), + requesterUin = it.req_uin.get(), + requesterNick = it.msg.req_uin_nick.get(), + message = it.msg.msg_additional.get(), + flag = "${it.msg_seq.get()};${it.msg.group_code.get()};${it.req_uin.get()}" + ) + } + + else -> {} + } + } + return ok(msgs, echo = echo) + } + + override val requiredParams: Array = arrayOf("group_id", "folder_id") + + override fun path(): String = "get_group_files_by_folder" +} \ No newline at end of file diff --git a/xposed/src/main/java/moe/fuqiuluo/shamrock/remote/api/GroupAction.kt b/xposed/src/main/java/moe/fuqiuluo/shamrock/remote/api/GroupAction.kt index ac2e039..0d41e92 100644 --- a/xposed/src/main/java/moe/fuqiuluo/shamrock/remote/api/GroupAction.kt +++ b/xposed/src/main/java/moe/fuqiuluo/shamrock/remote/api/GroupAction.kt @@ -106,4 +106,8 @@ fun Routing.troopAction() { call.respondText(DeleteEssenceMessage(messageId), ContentType.Application.Json) } + getOrPost("/get_group_system_msg") { + call.respondText(GetGroupSystemMsg(), ContentType.Application.Json) + } + } \ No newline at end of file diff --git a/xposed/src/main/java/moe/fuqiuluo/shamrock/remote/service/data/TroopData.kt b/xposed/src/main/java/moe/fuqiuluo/shamrock/remote/service/data/TroopData.kt index 0f8e6f2..595b73a 100644 --- a/xposed/src/main/java/moe/fuqiuluo/shamrock/remote/service/data/TroopData.kt +++ b/xposed/src/main/java/moe/fuqiuluo/shamrock/remote/service/data/TroopData.kt @@ -42,4 +42,27 @@ internal data class SimpleTroopMemberInfo( @SerialName("role") val role: MemberRole, @SerialName("unfriendly") val unfriendly: Boolean, @SerialName("card_changeable") val cardChangeable: Boolean, +) + +@Serializable +internal data class GroupRequest( + // InvitedRequest + @SerialName("request_id") val msgSeq: Long, + @SerialName("invitor_uin") val invitorUin: Long?, + @SerialName("invitor_nick") val invitorNick: String?, + @SerialName("group_id") val groupId: Long, + @SerialName("group_name") val groupName: String, + @SerialName("checked") val checked: Boolean, + @SerialName("actor") val actor: Long, + // JoinRequest + @SerialName("requester_uin") val requesterUin: Long, + @SerialName("requester_nick") val requesterNick: String, + @SerialName("message") val message: String, + @SerialName("flag") val flag: String, +) + +@Serializable +internal data class GroupSystemMessage( + @SerialName("invited_requests") var invited: List, + @SerialName("join_requests") var join: List, ) \ No newline at end of file