mirror of
https://github.com/whitechi73/OpenShamrock.git
synced 2024-08-14 13:12:17 +08:00
Shamrock
: fix: グループリクエストイベントの通知と処理ロジックを最適化する
This commit is contained in:
parent
8c307c4f6e
commit
4932b36ee1
@ -13,11 +13,9 @@ import kotlinx.coroutines.GlobalScope
|
|||||||
import kotlinx.coroutines.delay
|
import kotlinx.coroutines.delay
|
||||||
import kotlinx.coroutines.launch
|
import kotlinx.coroutines.launch
|
||||||
import kotlinx.coroutines.suspendCancellableCoroutine
|
import kotlinx.coroutines.suspendCancellableCoroutine
|
||||||
import moe.fuqiuluo.qqinterface.servlet.BaseSvc
|
|
||||||
import moe.fuqiuluo.shamrock.tools.slice
|
import moe.fuqiuluo.shamrock.tools.slice
|
||||||
import moe.fuqiuluo.shamrock.xposed.helper.AppRuntimeFetcher
|
import moe.fuqiuluo.shamrock.xposed.helper.AppRuntimeFetcher
|
||||||
import mqq.app.AppRuntime
|
import mqq.app.AppRuntime
|
||||||
import mqq.app.MobileQQ
|
|
||||||
import tencent.mobileim.structmsg.`structmsg$FlagInfo`
|
import tencent.mobileim.structmsg.`structmsg$FlagInfo`
|
||||||
import tencent.mobileim.structmsg.`structmsg$ReqSystemMsgNew`
|
import tencent.mobileim.structmsg.`structmsg$ReqSystemMsgNew`
|
||||||
import tencent.mobileim.structmsg.`structmsg$RspSystemMsgNew`
|
import tencent.mobileim.structmsg.`structmsg$RspSystemMsgNew`
|
||||||
@ -59,6 +57,9 @@ internal object FriendSvc: BaseSvc() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
suspend fun requestFriendSystemMsgNew(msgNum: Int, latestFriendSeq: Long = 0, latestGroupSeq: Long = 0, retryCnt: Int = 3): List<StructMsg>? {
|
suspend fun requestFriendSystemMsgNew(msgNum: Int, latestFriendSeq: Long = 0, latestGroupSeq: Long = 0, retryCnt: Int = 3): List<StructMsg>? {
|
||||||
|
if (retryCnt < 0) {
|
||||||
|
return ArrayList()
|
||||||
|
}
|
||||||
val req = `structmsg$ReqSystemMsgNew`()
|
val req = `structmsg$ReqSystemMsgNew`()
|
||||||
req.msg_num.set(msgNum)
|
req.msg_num.set(msgNum)
|
||||||
req.latest_friend_seq.set(latestFriendSeq)
|
req.latest_friend_seq.set(latestFriendSeq)
|
||||||
@ -90,14 +91,17 @@ internal object FriendSvc: BaseSvc() {
|
|||||||
req.uint32_req_msg_type.set(1)
|
req.uint32_req_msg_type.set(1)
|
||||||
req.uint32_need_uid.set(1)
|
req.uint32_need_uid.set(1)
|
||||||
val respBuffer = sendBufferAW("ProfileService.Pb.ReqSystemMsgNew.Friend", true, req.toByteArray())
|
val respBuffer = sendBufferAW("ProfileService.Pb.ReqSystemMsgNew.Friend", true, req.toByteArray())
|
||||||
return if (respBuffer == null && retryCnt >= 0) {
|
return if (respBuffer == null) {
|
||||||
requestFriendSystemMsgNew(msgNum, latestFriendSeq, latestGroupSeq, retryCnt - 1)
|
|
||||||
} else if (respBuffer == null) {
|
|
||||||
ArrayList()
|
ArrayList()
|
||||||
} else {
|
} else {
|
||||||
|
try {
|
||||||
val msg = `structmsg$RspSystemMsgNew`()
|
val msg = `structmsg$RspSystemMsgNew`()
|
||||||
msg.mergeFrom(respBuffer.slice(4))
|
msg.mergeFrom(respBuffer.slice(4))
|
||||||
return msg.friendmsgs.get()
|
return msg.friendmsgs.get()
|
||||||
|
} catch (err: Throwable) {
|
||||||
|
requestFriendSystemMsgNew(msgNum, latestFriendSeq, latestGroupSeq, retryCnt - 1)
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -643,21 +643,6 @@ internal object GroupSvc: BaseSvc() {
|
|||||||
notSee: Boolean? = false,
|
notSee: Boolean? = false,
|
||||||
subType: String
|
subType: String
|
||||||
): Result<String>{
|
): Result<String>{
|
||||||
// val app = AppRuntimeFetcher.appRuntime
|
|
||||||
// if (app !is AppInterface)
|
|
||||||
// throw RuntimeException("AppRuntime cannot cast to AppInterface")
|
|
||||||
// val service = QRoute.api(IAddFriendTempApi::class.java)
|
|
||||||
// val action = `structmsg$SystemMsgActionInfo`()
|
|
||||||
// action.type.set(if (approve != false) 11 else 12)
|
|
||||||
// action.group_code.set(gid)
|
|
||||||
// action.msg.set(msg)
|
|
||||||
// val snInfo = `structmsg$AddFrdSNInfo`()
|
|
||||||
// snInfo.uint32_not_see_dynamic.set(if (notSee != false) 1 else 0)
|
|
||||||
//// snInfo.uint32_set_sn.set(0)
|
|
||||||
// action.addFrdSNInfo.set(snInfo)
|
|
||||||
// service.sendFriendSystemMsgAction(2, msgSeq * 1000, uin, 1, 2, 30024, 1, action, 0, `structmsg$StructMsg`(), false,
|
|
||||||
// app
|
|
||||||
// )
|
|
||||||
// 实在找不到接口了 发pb吧
|
// 实在找不到接口了 发pb吧
|
||||||
val buffer: ByteArray
|
val buffer: ByteArray
|
||||||
when (subType) {
|
when (subType) {
|
||||||
@ -688,7 +673,9 @@ internal object GroupSvc: BaseSvc() {
|
|||||||
7 to 1,
|
7 to 1,
|
||||||
8 to mapOf(
|
8 to mapOf(
|
||||||
1 to if (approve != false) 11 else 12,
|
1 to if (approve != false) 11 else 12,
|
||||||
2 to gid
|
2 to gid,
|
||||||
|
50 to msg,
|
||||||
|
53 to if (notSee != false) 1 else 0
|
||||||
),
|
),
|
||||||
9 to 1000
|
9 to 1000
|
||||||
).toByteArray()
|
).toByteArray()
|
||||||
@ -704,14 +691,17 @@ internal object GroupSvc: BaseSvc() {
|
|||||||
if (result[1, 1].asInt == 0) {
|
if (result[1, 1].asInt == 0) {
|
||||||
Result.success(result[2].asUtf8String)
|
Result.success(result[2].asUtf8String)
|
||||||
} else {
|
} else {
|
||||||
Result.failure(Exception(result[2].asUtf8String))
|
Result.failure(Exception(result[1, 2].asUtf8String))
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
Result.failure(Exception("操作失败"))
|
Result.failure(Exception("操作失败"))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
suspend fun requestGroupSystemMsgNew(msgNum: Int, latestFriendSeq: Long = 0, latestGroupSeq: Long = 0, retryCnt: Int = 3): List<StructMsg>? {
|
suspend fun requestGroupSystemMsgNew(msgNum: Int, reqMsgType: Int = 1, latestFriendSeq: Long = 0, latestGroupSeq: Long = 0, retryCnt: Int = 5): List<StructMsg> {
|
||||||
|
if (retryCnt < 0) {
|
||||||
|
return ArrayList()
|
||||||
|
}
|
||||||
val req = ReqSystemMsgNew()
|
val req = ReqSystemMsgNew()
|
||||||
req.msg_num.set(msgNum)
|
req.msg_num.set(msgNum)
|
||||||
req.latest_friend_seq.set(latestFriendSeq)
|
req.latest_friend_seq.set(latestFriendSeq)
|
||||||
@ -740,17 +730,19 @@ internal object GroupSvc: BaseSvc() {
|
|||||||
req.is_get_frd_ribbon.set(false)
|
req.is_get_frd_ribbon.set(false)
|
||||||
req.is_get_grp_ribbon.set(false)
|
req.is_get_grp_ribbon.set(false)
|
||||||
req.friend_msg_type_flag.set(1)
|
req.friend_msg_type_flag.set(1)
|
||||||
req.uint32_req_msg_type.set(1)
|
req.uint32_req_msg_type.set(reqMsgType)
|
||||||
req.uint32_need_uid.set(1)
|
req.uint32_need_uid.set(1)
|
||||||
val respBuffer = sendBufferAW("ProfileService.Pb.ReqSystemMsgNew.Group", true, req.toByteArray())
|
val respBuffer = sendBufferAW("ProfileService.Pb.ReqSystemMsgNew.Group", true, req.toByteArray())
|
||||||
return if (respBuffer == null && retryCnt >= 0) {
|
return if (respBuffer == null) {
|
||||||
requestGroupSystemMsgNew(msgNum, latestFriendSeq, latestGroupSeq, retryCnt - 1)
|
|
||||||
} else if (respBuffer == null) {
|
|
||||||
ArrayList()
|
ArrayList()
|
||||||
} else {
|
} else {
|
||||||
|
try {
|
||||||
val msg = RspSystemMsgNew()
|
val msg = RspSystemMsgNew()
|
||||||
msg.mergeFrom(respBuffer.slice(4))
|
msg.mergeFrom(respBuffer.slice(4))
|
||||||
return msg.groupmsgs.get()
|
return msg.groupmsgs.get().orEmpty()
|
||||||
|
} catch (err: Throwable) {
|
||||||
|
requestGroupSystemMsgNew(msgNum, reqMsgType, latestFriendSeq, latestGroupSeq, retryCnt - 1)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -2,7 +2,6 @@ package moe.fuqiuluo.shamrock.remote.action.handlers
|
|||||||
|
|
||||||
import kotlinx.serialization.json.JsonElement
|
import kotlinx.serialization.json.JsonElement
|
||||||
import moe.fuqiuluo.qqinterface.servlet.GroupSvc
|
import moe.fuqiuluo.qqinterface.servlet.GroupSvc
|
||||||
import moe.fuqiuluo.qqinterface.servlet.transfile.RichProtoSvc
|
|
||||||
import moe.fuqiuluo.shamrock.remote.action.ActionSession
|
import moe.fuqiuluo.shamrock.remote.action.ActionSession
|
||||||
import moe.fuqiuluo.shamrock.remote.action.IActionHandler
|
import moe.fuqiuluo.shamrock.remote.action.IActionHandler
|
||||||
import moe.fuqiuluo.shamrock.remote.service.data.GroupRequest
|
import moe.fuqiuluo.shamrock.remote.service.data.GroupRequest
|
||||||
@ -16,11 +15,12 @@ internal object GetGroupSystemMsg: IActionHandler() {
|
|||||||
|
|
||||||
suspend operator fun invoke(echo: JsonElement = EmptyJsonString): String {
|
suspend operator fun invoke(echo: JsonElement = EmptyJsonString): String {
|
||||||
val list = GroupSvc.requestGroupSystemMsgNew(20)
|
val list = GroupSvc.requestGroupSystemMsgNew(20)
|
||||||
|
val riskList = GroupSvc.requestGroupSystemMsgNew(20, 2)
|
||||||
val msgs = GroupSystemMessage(
|
val msgs = GroupSystemMessage(
|
||||||
invited = mutableListOf(),
|
invited = mutableListOf(),
|
||||||
join = mutableListOf()
|
join = mutableListOf()
|
||||||
)
|
)
|
||||||
list?.forEach {
|
(list + riskList).forEach {
|
||||||
when(it.msg.group_msg_type.get()) {
|
when(it.msg.group_msg_type.get()) {
|
||||||
22, 1 -> {
|
22, 1 -> {
|
||||||
// join 进群消息
|
// join 进群消息
|
||||||
@ -42,8 +42,8 @@ internal object GetGroupSystemMsg: IActionHandler() {
|
|||||||
// invite 别人邀请我
|
// invite 别人邀请我
|
||||||
msgs.invited += GroupRequest (
|
msgs.invited += GroupRequest (
|
||||||
msgSeq = it.msg_seq.get(),
|
msgSeq = it.msg_seq.get(),
|
||||||
invitorUin = null,
|
invitorUin = it.msg.action_uin.get(),
|
||||||
invitorNick = null,
|
invitorNick = it.msg.action_uin_nick.get(),
|
||||||
groupId = it.msg.group_code.get(),
|
groupId = it.msg.group_code.get(),
|
||||||
groupName = it.msg.group_name.get(),
|
groupName = it.msg.group_name.get(),
|
||||||
checked = it.msg.msg_decided.get().isNotBlank(),
|
checked = it.msg.msg_decided.get().isNotBlank(),
|
||||||
|
@ -1,8 +1,9 @@
|
|||||||
package moe.fuqiuluo.shamrock.remote.action.handlers
|
package moe.fuqiuluo.shamrock.remote.action.handlers
|
||||||
|
|
||||||
import kotlinx.serialization.json.JsonElement
|
import kotlinx.serialization.json.JsonElement
|
||||||
import moe.fuqiuluo.qqinterface.servlet.FriendSvc
|
|
||||||
import moe.fuqiuluo.qqinterface.servlet.GroupSvc
|
import moe.fuqiuluo.qqinterface.servlet.GroupSvc
|
||||||
|
import moe.fuqiuluo.shamrock.helper.Level
|
||||||
|
import moe.fuqiuluo.shamrock.helper.LogCenter
|
||||||
import moe.fuqiuluo.shamrock.remote.action.ActionSession
|
import moe.fuqiuluo.shamrock.remote.action.ActionSession
|
||||||
import moe.fuqiuluo.shamrock.remote.action.IActionHandler
|
import moe.fuqiuluo.shamrock.remote.action.IActionHandler
|
||||||
import moe.fuqiuluo.shamrock.tools.EmptyJsonString
|
import moe.fuqiuluo.shamrock.tools.EmptyJsonString
|
||||||
@ -12,7 +13,7 @@ internal object SetGroupAddRequest: IActionHandler() {
|
|||||||
val flag = session.getString("flag")
|
val flag = session.getString("flag")
|
||||||
val approve = session.getBoolean("approve")
|
val approve = session.getBoolean("approve")
|
||||||
val remark = session.getStringOrNull("reason")
|
val remark = session.getStringOrNull("reason")
|
||||||
val notSeen = session.getBoolean("notSeen")
|
val notSeen = session.getBoolean("not_seen")
|
||||||
val subType = session.getString("sub_type")
|
val subType = session.getString("sub_type")
|
||||||
return invoke(flag, approve, subType, remark, notSeen, session.echo)
|
return invoke(flag, approve, subType, remark, notSeen, session.echo)
|
||||||
}
|
}
|
||||||
@ -20,13 +21,20 @@ internal object SetGroupAddRequest: IActionHandler() {
|
|||||||
suspend operator fun invoke(flag: String, approve: Boolean? = true, subType: String, remark: String? = "", notSeen: Boolean? = false, echo: JsonElement = EmptyJsonString): String {
|
suspend operator fun invoke(flag: String, approve: Boolean? = true, subType: String, remark: String? = "", notSeen: Boolean? = false, echo: JsonElement = EmptyJsonString): String {
|
||||||
val flags = flag.split(";")
|
val flags = flag.split(";")
|
||||||
var ts = flags[0].toLong()
|
var ts = flags[0].toLong()
|
||||||
|
try {
|
||||||
if (ts.toString().length < 13) {
|
if (ts.toString().length < 13) {
|
||||||
// time but not seq, query seq again
|
// time but not seq, query seq again
|
||||||
val reqs = GroupSvc.requestGroupSystemMsgNew(20)
|
var reqs = GroupSvc.requestGroupSystemMsgNew(20, 1)
|
||||||
val req = reqs?.first {
|
val riskReqs = GroupSvc.requestGroupSystemMsgNew(20, 2)
|
||||||
|
reqs = reqs + riskReqs
|
||||||
|
val req = reqs.first {
|
||||||
it.msg_time.get() == ts
|
it.msg_time.get() == ts
|
||||||
}
|
}
|
||||||
ts = req?.msg_seq?.get() ?: return error("失败:未找到该请求", echo)
|
ts = req.msg_seq?.get() ?: return error("失败:未找到该请求", echo)
|
||||||
|
}
|
||||||
|
} catch (err: Throwable) {
|
||||||
|
LogCenter.log(err.stackTraceToString(), Level.WARN)
|
||||||
|
return error("查找请求失败:${err.message}", echo)
|
||||||
}
|
}
|
||||||
val groupCode = flags[1].toLong()
|
val groupCode = flags[1].toLong()
|
||||||
val uin = flags[2].toLong()
|
val uin = flags[2].toLong()
|
||||||
@ -35,7 +43,7 @@ internal object SetGroupAddRequest: IActionHandler() {
|
|||||||
if (result.isSuccess) {
|
if (result.isSuccess) {
|
||||||
ok(result.getOrNull(), echo)
|
ok(result.getOrNull(), echo)
|
||||||
} else {
|
} else {
|
||||||
logic(result.getOrNull() ?: "", echo)
|
logic(result.exceptionOrNull()?.message ?: "", echo)
|
||||||
}
|
}
|
||||||
} catch (err: Throwable) {
|
} catch (err: Throwable) {
|
||||||
err.printStackTrace()
|
err.printStackTrace()
|
||||||
|
@ -402,14 +402,16 @@ internal object PrimitiveListener {
|
|||||||
|
|
||||||
LogCenter.log("入群申请($groupCode) $applier: \"$reason\"")
|
LogCenter.log("入群申请($groupCode) $applier: \"$reason\"")
|
||||||
val flag = try {
|
val flag = try {
|
||||||
val reqs = requestGroupSystemMsgNew(10, 0, 0)
|
var reqs = requestGroupSystemMsgNew(10, 1)
|
||||||
val req = reqs?.first {
|
val riskReqs = requestGroupSystemMsgNew(10, 2)
|
||||||
|
reqs = reqs + riskReqs
|
||||||
|
val req = reqs.first {
|
||||||
it.msg_time.get() == time
|
it.msg_time.get() == time
|
||||||
}
|
}
|
||||||
val seq = req?.msg_seq?.get()
|
val seq = req.msg_seq?.get()
|
||||||
"$seq;$groupCode;$applierUid"
|
"$seq;$groupCode;$applier"
|
||||||
} catch (err: Throwable) {
|
} catch (err: Throwable) {
|
||||||
"$time;$groupCode;$applierUid"
|
"$time;$groupCode;$applier"
|
||||||
}
|
}
|
||||||
if(!GlobalEventTransmitter.RequestTransmitter
|
if(!GlobalEventTransmitter.RequestTransmitter
|
||||||
.transGroupApply(time, applier, reason, groupCode, flag, RequestSubType.Add)) {
|
.transGroupApply(time, applier, reason, groupCode, flag, RequestSubType.Add)) {
|
||||||
@ -426,11 +428,13 @@ internal object PrimitiveListener {
|
|||||||
}
|
}
|
||||||
LogCenter.log("邀请入群申请($groupCode): $applier")
|
LogCenter.log("邀请入群申请($groupCode): $applier")
|
||||||
val flag = try {
|
val flag = try {
|
||||||
val reqs = requestGroupSystemMsgNew(10, 0, 0)
|
var reqs = requestGroupSystemMsgNew(10, 1)
|
||||||
val req = reqs?.first {
|
val riskReqs = requestGroupSystemMsgNew(10, 2)
|
||||||
|
reqs = reqs + riskReqs
|
||||||
|
val req = reqs.first {
|
||||||
it.msg_time.get() == time
|
it.msg_time.get() == time
|
||||||
}
|
}
|
||||||
val seq = req?.msg_seq?.get()
|
val seq = req.msg_seq?.get()
|
||||||
"$seq;$groupCode;$applier"
|
"$seq;$groupCode;$applier"
|
||||||
} catch (err: Throwable) {
|
} catch (err: Throwable) {
|
||||||
"$time;$groupCode;$applierUid"
|
"$time;$groupCode;$applierUid"
|
||||||
@ -449,11 +453,13 @@ internal object PrimitiveListener {
|
|||||||
val uin = pb[1, 1, 5].asLong
|
val uin = pb[1, 1, 5].asLong
|
||||||
LogCenter.log("邀请入群$groupCode 邀请者: \"$invitor\"")
|
LogCenter.log("邀请入群$groupCode 邀请者: \"$invitor\"")
|
||||||
val flag = try {
|
val flag = try {
|
||||||
val reqs = requestGroupSystemMsgNew(10, 0, 0)
|
var reqs = requestGroupSystemMsgNew(10, 1)
|
||||||
val req = reqs?.first {
|
val riskReqs = requestGroupSystemMsgNew(10, 2)
|
||||||
|
reqs = reqs + riskReqs
|
||||||
|
val req = reqs.first {
|
||||||
it.msg_time.get() == time
|
it.msg_time.get() == time
|
||||||
}
|
}
|
||||||
val seq = req?.msg_seq?.get()
|
val seq = req.msg_seq?.get()
|
||||||
"$seq;$groupCode;$uin"
|
"$seq;$groupCode;$uin"
|
||||||
} catch (err: Throwable) {
|
} catch (err: Throwable) {
|
||||||
"$time;$groupCode;$uin"
|
"$time;$groupCode;$uin"
|
||||||
|
Loading…
x
Reference in New Issue
Block a user