mirror of
https://github.com/whitechi73/OpenShamrock.git
synced 2024-08-14 13:12:17 +08:00
Shamrock
: fix get role by nt crash
This commit is contained in:
parent
36f8b6e54b
commit
63ce2d40bd
@ -97,6 +97,8 @@ import java.nio.ByteBuffer
|
||||
import kotlin.coroutines.resume
|
||||
|
||||
internal object GroupSvc: BaseSvc() {
|
||||
private const val GET_MEMBER_ROLE_BY_NT = false
|
||||
|
||||
private val RefreshTroopMemberInfoLock by lazy {
|
||||
Mutex()
|
||||
}
|
||||
@ -396,6 +398,13 @@ internal object GroupSvc: BaseSvc() {
|
||||
}
|
||||
|
||||
suspend fun getMemberRole(groupId: Long, memberUin: Long): MemberRole {
|
||||
if (!GET_MEMBER_ROLE_BY_NT) {
|
||||
return when (memberUin) {
|
||||
getOwner(groupId.toString()) -> MemberRole.Owner
|
||||
in getAdminList(groupId.toString()) -> MemberRole.Admin
|
||||
else -> MemberRole.Member
|
||||
}
|
||||
}
|
||||
return when(getTroopMemberInfoByUinViaNt(groupId.toString(), memberUin, 3000).getOrNull()?.role) {
|
||||
com.tencent.qqnt.kernel.nativeinterface.MemberRole.STRANGER -> MemberRole.Stranger
|
||||
com.tencent.qqnt.kernel.nativeinterface.MemberRole.MEMBER -> MemberRole.Member
|
||||
@ -641,30 +650,32 @@ internal object GroupSvc: BaseSvc() {
|
||||
qq: Long,
|
||||
timeout: Long = 5000L
|
||||
): Result<MemberInfo> {
|
||||
val kernelService = NTServiceFetcher.kernelService
|
||||
val sessionService = kernelService.wrapperSession
|
||||
val groupService = sessionService.groupService
|
||||
val info = withTimeoutOrNull(timeout) {
|
||||
suspendCancellableCoroutine {
|
||||
groupService.getTransferableMemberInfo(groupId.toLong()) { code, _, data ->
|
||||
if (code != 0) {
|
||||
it.resume(null)
|
||||
return@getTransferableMemberInfo
|
||||
}
|
||||
data.forEach { (_, info) ->
|
||||
if (info.uin == qq) {
|
||||
it.resume(info)
|
||||
return@forEach
|
||||
return runCatching {
|
||||
val kernelService = NTServiceFetcher.kernelService
|
||||
val sessionService = kernelService.wrapperSession
|
||||
val groupService = sessionService.groupService
|
||||
val info = withTimeoutOrNull(timeout) {
|
||||
suspendCancellableCoroutine {
|
||||
groupService.getTransferableMemberInfo(groupId.toLong()) { code, _, data ->
|
||||
if (code != 0) {
|
||||
it.resume(null)
|
||||
return@getTransferableMemberInfo
|
||||
}
|
||||
data.forEach { (_, info) ->
|
||||
if (info.uin == qq) {
|
||||
it.resume(info)
|
||||
return@forEach
|
||||
}
|
||||
}
|
||||
it.resume(null)
|
||||
}
|
||||
it.resume(null)
|
||||
}
|
||||
}
|
||||
}
|
||||
return if (info != null) {
|
||||
Result.success(info)
|
||||
} else {
|
||||
Result.failure(Exception("获取群成员信息失败"))
|
||||
return if (info != null) {
|
||||
Result.success(info)
|
||||
} else {
|
||||
Result.failure(Exception("获取群成员信息失败"))
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -138,16 +138,18 @@ internal class XposedEntry: IXposedHookLoadPackage {
|
||||
MMKVFetcher.initMMKV(ctx)
|
||||
}
|
||||
|
||||
if (ShamrockConfig.forbidUselessProcess()) {
|
||||
if(uselessProcess.any {
|
||||
processName.contains(it, ignoreCase = true)
|
||||
}) {
|
||||
log("[Shamrock] Useless process detected: $processName, exit.")
|
||||
Process.killProcess(Process.myPid())
|
||||
exitProcess(0)
|
||||
runCatching {
|
||||
if (ShamrockConfig.forbidUselessProcess()) {
|
||||
if(uselessProcess.any {
|
||||
processName.contains(it, ignoreCase = true)
|
||||
}) {
|
||||
log("[Shamrock] Useless process detected: $processName, exit.")
|
||||
Process.killProcess(Process.myPid())
|
||||
exitProcess(0)
|
||||
}
|
||||
} else {
|
||||
log("[Shamrock] Useless process detection is disabled.")
|
||||
}
|
||||
} else {
|
||||
log("[Shamrock] Useless process detection is disabled.")
|
||||
}
|
||||
|
||||
log("Process Name = $processName")
|
||||
|
@ -2,24 +2,17 @@ package moe.fuqiuluo.shamrock.xposed.helper
|
||||
|
||||
import com.tencent.qqnt.kernel.api.IKernelService
|
||||
import com.tencent.qqnt.kernel.api.impl.MsgService
|
||||
import com.tencent.qqnt.kernel.nativeinterface.IKernelGroupService
|
||||
import com.tencent.qqnt.kernel.nativeinterface.IKernelGuildService
|
||||
import com.tencent.qqnt.kernel.nativeinterface.IOperateCallback
|
||||
import com.tencent.qqnt.kernel.nativeinterface.IQQNTWrapperSession
|
||||
import de.robv.android.xposed.XC_MethodHook
|
||||
import de.robv.android.xposed.XposedBridge
|
||||
import kotlinx.coroutines.sync.Mutex
|
||||
import kotlinx.coroutines.sync.withLock
|
||||
import moe.fuqiuluo.shamrock.helper.Level
|
||||
import moe.fuqiuluo.shamrock.helper.LogCenter
|
||||
import moe.fuqiuluo.shamrock.remote.service.PacketReceiver
|
||||
import moe.fuqiuluo.shamrock.remote.service.listener.AioListener
|
||||
import moe.fuqiuluo.shamrock.remote.service.listener.GroupEventListener
|
||||
import moe.fuqiuluo.shamrock.remote.service.listener.KernelGuildListener
|
||||
import moe.fuqiuluo.shamrock.remote.service.listener.PrimitiveListener
|
||||
import moe.fuqiuluo.shamrock.tools.hookMethod
|
||||
import moe.fuqiuluo.shamrock.utils.PlatformUtils
|
||||
import kotlin.reflect.jvm.javaMethod
|
||||
|
||||
internal object NTServiceFetcher {
|
||||
private lateinit var iKernelService: IKernelService
|
||||
@ -30,7 +23,7 @@ internal object NTServiceFetcher {
|
||||
lock.withLock {
|
||||
val msgService = service.msgService ?: return
|
||||
val sessionService = service.wrapperSession ?: return
|
||||
val groupService = sessionService.groupService ?: return
|
||||
//val groupService = sessionService.groupService ?: return
|
||||
|
||||
val curHash = service.hashCode() + msgService.hashCode()
|
||||
if (isInitForNt(curHash)) return
|
||||
@ -43,7 +36,7 @@ internal object NTServiceFetcher {
|
||||
this.iKernelService = service
|
||||
|
||||
|
||||
initNTKernelListener(msgService, groupService)
|
||||
initNTKernelListener(msgService)
|
||||
antiBackgroundMode(sessionService)
|
||||
//hookGuildListener(sessionService)
|
||||
}
|
||||
@ -66,7 +59,7 @@ internal object NTServiceFetcher {
|
||||
return hash == curKernelHash
|
||||
}
|
||||
|
||||
private fun initNTKernelListener(msgService: MsgService, groupService: IKernelGroupService) {
|
||||
private fun initNTKernelListener(msgService: MsgService) {
|
||||
if (!PlatformUtils.isMainProcess()) return
|
||||
|
||||
try {
|
||||
|
Loading…
x
Reference in New Issue
Block a user