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
|
import kotlin.coroutines.resume
|
||||||
|
|
||||||
internal object GroupSvc: BaseSvc() {
|
internal object GroupSvc: BaseSvc() {
|
||||||
|
private const val GET_MEMBER_ROLE_BY_NT = false
|
||||||
|
|
||||||
private val RefreshTroopMemberInfoLock by lazy {
|
private val RefreshTroopMemberInfoLock by lazy {
|
||||||
Mutex()
|
Mutex()
|
||||||
}
|
}
|
||||||
@ -396,6 +398,13 @@ internal object GroupSvc: BaseSvc() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
suspend fun getMemberRole(groupId: Long, memberUin: Long): MemberRole {
|
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) {
|
return when(getTroopMemberInfoByUinViaNt(groupId.toString(), memberUin, 3000).getOrNull()?.role) {
|
||||||
com.tencent.qqnt.kernel.nativeinterface.MemberRole.STRANGER -> MemberRole.Stranger
|
com.tencent.qqnt.kernel.nativeinterface.MemberRole.STRANGER -> MemberRole.Stranger
|
||||||
com.tencent.qqnt.kernel.nativeinterface.MemberRole.MEMBER -> MemberRole.Member
|
com.tencent.qqnt.kernel.nativeinterface.MemberRole.MEMBER -> MemberRole.Member
|
||||||
@ -641,30 +650,32 @@ internal object GroupSvc: BaseSvc() {
|
|||||||
qq: Long,
|
qq: Long,
|
||||||
timeout: Long = 5000L
|
timeout: Long = 5000L
|
||||||
): Result<MemberInfo> {
|
): Result<MemberInfo> {
|
||||||
val kernelService = NTServiceFetcher.kernelService
|
return runCatching {
|
||||||
val sessionService = kernelService.wrapperSession
|
val kernelService = NTServiceFetcher.kernelService
|
||||||
val groupService = sessionService.groupService
|
val sessionService = kernelService.wrapperSession
|
||||||
val info = withTimeoutOrNull(timeout) {
|
val groupService = sessionService.groupService
|
||||||
suspendCancellableCoroutine {
|
val info = withTimeoutOrNull(timeout) {
|
||||||
groupService.getTransferableMemberInfo(groupId.toLong()) { code, _, data ->
|
suspendCancellableCoroutine {
|
||||||
if (code != 0) {
|
groupService.getTransferableMemberInfo(groupId.toLong()) { code, _, data ->
|
||||||
it.resume(null)
|
if (code != 0) {
|
||||||
return@getTransferableMemberInfo
|
it.resume(null)
|
||||||
}
|
return@getTransferableMemberInfo
|
||||||
data.forEach { (_, info) ->
|
|
||||||
if (info.uin == qq) {
|
|
||||||
it.resume(info)
|
|
||||||
return@forEach
|
|
||||||
}
|
}
|
||||||
|
data.forEach { (_, info) ->
|
||||||
|
if (info.uin == qq) {
|
||||||
|
it.resume(info)
|
||||||
|
return@forEach
|
||||||
|
}
|
||||||
|
}
|
||||||
|
it.resume(null)
|
||||||
}
|
}
|
||||||
it.resume(null)
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
return if (info != null) {
|
||||||
return if (info != null) {
|
Result.success(info)
|
||||||
Result.success(info)
|
} else {
|
||||||
} else {
|
Result.failure(Exception("获取群成员信息失败"))
|
||||||
Result.failure(Exception("获取群成员信息失败"))
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -138,16 +138,18 @@ internal class XposedEntry: IXposedHookLoadPackage {
|
|||||||
MMKVFetcher.initMMKV(ctx)
|
MMKVFetcher.initMMKV(ctx)
|
||||||
}
|
}
|
||||||
|
|
||||||
if (ShamrockConfig.forbidUselessProcess()) {
|
runCatching {
|
||||||
if(uselessProcess.any {
|
if (ShamrockConfig.forbidUselessProcess()) {
|
||||||
processName.contains(it, ignoreCase = true)
|
if(uselessProcess.any {
|
||||||
}) {
|
processName.contains(it, ignoreCase = true)
|
||||||
log("[Shamrock] Useless process detected: $processName, exit.")
|
}) {
|
||||||
Process.killProcess(Process.myPid())
|
log("[Shamrock] Useless process detected: $processName, exit.")
|
||||||
exitProcess(0)
|
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")
|
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.IKernelService
|
||||||
import com.tencent.qqnt.kernel.api.impl.MsgService
|
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.IOperateCallback
|
||||||
import com.tencent.qqnt.kernel.nativeinterface.IQQNTWrapperSession
|
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.Mutex
|
||||||
import kotlinx.coroutines.sync.withLock
|
import kotlinx.coroutines.sync.withLock
|
||||||
import moe.fuqiuluo.shamrock.helper.Level
|
import moe.fuqiuluo.shamrock.helper.Level
|
||||||
import moe.fuqiuluo.shamrock.helper.LogCenter
|
import moe.fuqiuluo.shamrock.helper.LogCenter
|
||||||
import moe.fuqiuluo.shamrock.remote.service.PacketReceiver
|
import moe.fuqiuluo.shamrock.remote.service.PacketReceiver
|
||||||
import moe.fuqiuluo.shamrock.remote.service.listener.AioListener
|
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.remote.service.listener.PrimitiveListener
|
||||||
import moe.fuqiuluo.shamrock.tools.hookMethod
|
import moe.fuqiuluo.shamrock.tools.hookMethod
|
||||||
import moe.fuqiuluo.shamrock.utils.PlatformUtils
|
import moe.fuqiuluo.shamrock.utils.PlatformUtils
|
||||||
import kotlin.reflect.jvm.javaMethod
|
|
||||||
|
|
||||||
internal object NTServiceFetcher {
|
internal object NTServiceFetcher {
|
||||||
private lateinit var iKernelService: IKernelService
|
private lateinit var iKernelService: IKernelService
|
||||||
@ -30,7 +23,7 @@ internal object NTServiceFetcher {
|
|||||||
lock.withLock {
|
lock.withLock {
|
||||||
val msgService = service.msgService ?: return
|
val msgService = service.msgService ?: return
|
||||||
val sessionService = service.wrapperSession ?: return
|
val sessionService = service.wrapperSession ?: return
|
||||||
val groupService = sessionService.groupService ?: return
|
//val groupService = sessionService.groupService ?: return
|
||||||
|
|
||||||
val curHash = service.hashCode() + msgService.hashCode()
|
val curHash = service.hashCode() + msgService.hashCode()
|
||||||
if (isInitForNt(curHash)) return
|
if (isInitForNt(curHash)) return
|
||||||
@ -43,7 +36,7 @@ internal object NTServiceFetcher {
|
|||||||
this.iKernelService = service
|
this.iKernelService = service
|
||||||
|
|
||||||
|
|
||||||
initNTKernelListener(msgService, groupService)
|
initNTKernelListener(msgService)
|
||||||
antiBackgroundMode(sessionService)
|
antiBackgroundMode(sessionService)
|
||||||
//hookGuildListener(sessionService)
|
//hookGuildListener(sessionService)
|
||||||
}
|
}
|
||||||
@ -66,7 +59,7 @@ internal object NTServiceFetcher {
|
|||||||
return hash == curKernelHash
|
return hash == curKernelHash
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun initNTKernelListener(msgService: MsgService, groupService: IKernelGroupService) {
|
private fun initNTKernelListener(msgService: MsgService) {
|
||||||
if (!PlatformUtils.isMainProcess()) return
|
if (!PlatformUtils.isMainProcess()) return
|
||||||
|
|
||||||
try {
|
try {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user