fix: GagInfoDisclosure: fix bug and optimize
This commit is contained in:
@@ -28,21 +28,18 @@ import io.github.qauxv.base.annotation.FunctionHookEntry
|
||||
import io.github.qauxv.base.annotation.UiItemAgentEntry
|
||||
import io.github.qauxv.bridge.AppRuntimeHelper
|
||||
import io.github.qauxv.bridge.ContactUtils
|
||||
import io.github.qauxv.bridge.GreyTipBuilder
|
||||
import io.github.qauxv.bridge.QQMessageFacade
|
||||
import io.github.qauxv.bridge.kernelcompat.ContactCompat
|
||||
import io.github.qauxv.bridge.ntapi.ChatTypeConstants
|
||||
import io.github.qauxv.bridge.ntapi.NtGrayTipHelper
|
||||
import io.github.qauxv.bridge.ntapi.RelationNTUinAndUidApi
|
||||
import io.github.qauxv.dsl.FunctionEntryRouter
|
||||
import io.github.qauxv.hook.CommonSwitchFunctionHook
|
||||
import io.github.qauxv.util.Initiator
|
||||
import io.github.qauxv.util.Log
|
||||
import io.github.qauxv.util.QQVersion
|
||||
import io.github.qauxv.util.SyncUtils
|
||||
import io.github.qauxv.util.dexkit.CMessageRecordFactory
|
||||
import io.github.qauxv.util.dexkit.NContactUtils_getBuddyName
|
||||
import io.github.qauxv.util.dexkit.NContactUtils_getDiscussionMemberShowName
|
||||
import io.github.qauxv.util.requireMinQQVersion
|
||||
import xyz.nextalone.util.get
|
||||
|
||||
@FunctionHookEntry
|
||||
@UiItemAgentEntry
|
||||
@@ -52,13 +49,13 @@ object GagInfoDisclosure : CommonSwitchFunctionHook(
|
||||
targets = arrayOf(
|
||||
CMessageRecordFactory,
|
||||
NContactUtils_getDiscussionMemberShowName,
|
||||
NContactUtils_getBuddyName,
|
||||
)
|
||||
) {
|
||||
|
||||
override val name = "显示设置禁言的管理"
|
||||
override val description = "总是显示哪个管理员设置了禁言"
|
||||
override val uiItemLocation = FunctionEntryRouter.Locations.Auxiliary.CHAT_CATEGORY
|
||||
override val isAvailable = QAppUtils.isQQnt()
|
||||
|
||||
private fun getSecStr(sec: Long): String {
|
||||
val (min, hour, day) = Triple("分", "时", "天")
|
||||
@@ -72,183 +69,62 @@ object GagInfoDisclosure : CommonSwitchFunctionHook(
|
||||
return ret.toString()
|
||||
}
|
||||
|
||||
private fun addTroopGrayTipMsg(troopUin: String, jsonStr: String) {
|
||||
NtGrayTipHelper.addLocalJsonGrayTipMsg(
|
||||
AppRuntimeHelper.getAppRuntime()!!,
|
||||
ContactCompat(ChatTypeConstants.GROUP, troopUin, ""),
|
||||
NtGrayTipHelper.createLocalJsonElement(NtGrayTipHelper.AIO_AV_GROUP_NOTICE.toLong(), jsonStr, ""),
|
||||
true,
|
||||
true
|
||||
) { result, uin ->
|
||||
if (result != 0) {
|
||||
Log.e("GagInfoDisclosure error: addLocalJsonGrayTipMsg failed, result=$result, uin=$uin")
|
||||
}
|
||||
}
|
||||
private fun NtGrayTipHelper.NtGrayTipJsonBuilder.appendUserItem(uin: String, name: String) {
|
||||
val uid = RelationNTUinAndUidApi.getUidFromUin(uin).takeIf { it.isNullOrEmpty() } ?: "u_0000000000000000000000"
|
||||
this.append(NtGrayTipHelper.NtGrayTipJsonBuilder.UserItem(uin, uid, name))
|
||||
}
|
||||
|
||||
override fun initOnce(): Boolean {
|
||||
val clzGagMgr = Initiator._TroopGagMgr()
|
||||
if (requireMinQQVersion(QQVersion.QQ_9_0_25)) {
|
||||
val method = clzGagMgr.declaredMethods.single { method ->
|
||||
val params = method.parameterTypes; params.size == 5
|
||||
&& params[0] == Int::class.java
|
||||
&& params[1] == Long::class.java
|
||||
&& params[2] == Long::class.java
|
||||
&& params[3] == Long::class.java
|
||||
&& params[4] == ArrayList::class.java
|
||||
&& method.returnType == Void.TYPE
|
||||
}
|
||||
hookBeforeIfEnabled(method) { param ->
|
||||
val selfUin = AppRuntimeHelper.getAccount()
|
||||
val troopUin = param.args[1] as Long
|
||||
val opUin = param.args[2] as Long
|
||||
val opName = ContactUtils.getDiscussionMemberShowName(AppRuntimeHelper.getAppRuntime()!!, troopUin.toString(), opUin.toString())
|
||||
val builder = NtGrayTipHelper.NtGrayTipJsonBuilder()
|
||||
builder.appendText("操作者: ")
|
||||
if (opUin.toString() == selfUin) {
|
||||
builder.appendText("你")
|
||||
} else {
|
||||
builder.appendText("$opName[$opUin]")
|
||||
val method = clzGagMgr.declaredMethods.single { method ->
|
||||
val params = method.parameterTypes; params.size == 5
|
||||
&& params[0] == Int::class.java
|
||||
&& params[1] == Long::class.java
|
||||
&& params[2] == Long::class.java
|
||||
&& params[3] == Long::class.java
|
||||
&& params[4] == ArrayList::class.java
|
||||
&& method.returnType == Void.TYPE
|
||||
}
|
||||
hookBeforeIfEnabled(method) { param ->
|
||||
val selfUin = AppRuntimeHelper.getAccount()
|
||||
val troopUin = param.args[1].toString()
|
||||
val opUin = param.args[2].toString()
|
||||
val opName = ContactUtils.getDiscussionMemberShowName(AppRuntimeHelper.getAppRuntime()!!, troopUin, opUin)
|
||||
val pushParams = param.args[4] as ArrayList<*>
|
||||
val victimUin = pushParams[0].get("uin") as String
|
||||
val victimName = ContactUtils.getDiscussionMemberShowName(AppRuntimeHelper.getAppRuntime()!!, troopUin, victimUin)
|
||||
val victimTime = pushParams[0].get("gagLength") as Long
|
||||
val builder = NtGrayTipHelper.NtGrayTipJsonBuilder()
|
||||
when (victimUin) {
|
||||
"0" -> {
|
||||
if (opUin == selfUin) builder.appendUserItem(selfUin, "你") else builder.appendUserItem(opUin, "$opName")
|
||||
builder.appendText(if (victimTime == 0L) " 关闭了全员禁言 " else " 开启了全员禁言 ")
|
||||
}
|
||||
addTroopGrayTipMsg(troopUin.toString(), builder.build().toString())
|
||||
}
|
||||
} else {
|
||||
val method1 = clzGagMgr.declaredMethods.single { method ->
|
||||
val params = method.parameterTypes; params.size == 7
|
||||
&& params[0] == String::class.java
|
||||
&& params[1] == Long::class.java
|
||||
&& params[2] == Long::class.java
|
||||
&& params[3] == Int::class.java
|
||||
&& params[4] == String::class.java
|
||||
&& params[4] == String::class.java
|
||||
&& params[4] == Boolean::class.java
|
||||
&& method.returnType == Void.TYPE
|
||||
}
|
||||
hookBeforeIfEnabled(method1) { param ->
|
||||
val selfUin = AppRuntimeHelper.getAccount()
|
||||
val troopUin = param.args[0] as String
|
||||
val time = param.args[1] as Long
|
||||
val interval = param.args[2] as Long
|
||||
val msgSeq = param.args[3] as Int
|
||||
val opUin = param.args[4] as String
|
||||
val victimUin = param.args[5] as String
|
||||
val victimName = ContactUtils.getTroopMemberNick(troopUin, victimUin)
|
||||
val opName = ContactUtils.getTroopMemberNick(troopUin, opUin)
|
||||
if (!QAppUtils.isQQnt()) {
|
||||
val builder = GreyTipBuilder.create(GreyTipBuilder.MSG_TYPE_TROOP_GAP_GRAY_TIPS)
|
||||
if (victimUin == selfUin) {
|
||||
builder.append("你")
|
||||
} else {
|
||||
builder.appendTroopMember(victimUin, victimName)
|
||||
}
|
||||
builder.append(" 被 ")
|
||||
if (opUin == selfUin) {
|
||||
builder.append("你")
|
||||
} else {
|
||||
builder.appendTroopMember(opUin, opName)
|
||||
}
|
||||
if (interval == 0L) {
|
||||
builder.append(" 解除禁言 ")
|
||||
} else {
|
||||
builder.append(" 禁言${getSecStr(interval)} ")
|
||||
}
|
||||
val msg = builder.build(troopUin, 1, opUin, time, msgSeq.toLong())
|
||||
val list = ArrayList<Any>() + msg
|
||||
QQMessageFacade.commitMessageRecordList(list)
|
||||
} else {
|
||||
val builder = NtGrayTipHelper.NtGrayTipJsonBuilder()
|
||||
if (victimUin == selfUin) {
|
||||
builder.appendText("你")
|
||||
} else {
|
||||
builder.appendText("$victimName[$victimUin]")
|
||||
}
|
||||
|
||||
selfUin -> {
|
||||
builder.appendUserItem(selfUin, "你")
|
||||
builder.appendText(" 被 ")
|
||||
if (opUin == selfUin) {
|
||||
builder.appendText("你")
|
||||
} else {
|
||||
builder.appendText("$opName[$opUin]")
|
||||
}
|
||||
if (interval == 0L) {
|
||||
builder.appendText(" 解除禁言 ")
|
||||
} else {
|
||||
builder.appendText(" 禁言${getSecStr(interval)} ")
|
||||
}
|
||||
addTroopGrayTipMsg(troopUin, builder.build().toString())
|
||||
builder.appendUserItem(opUin, "$opName")
|
||||
builder.appendText(if (victimTime == 0L) "解除禁言" else "禁言${getSecStr(victimTime)}")
|
||||
}
|
||||
param.setResult(null)
|
||||
}
|
||||
val method2 = clzGagMgr.declaredMethods.single { method ->
|
||||
val params = method.parameterTypes; params.size == 7
|
||||
&& params[0] == String::class.java
|
||||
&& params[1] == String::class.java
|
||||
&& params[2] == Long::class.java
|
||||
&& params[3] == Long::class.java
|
||||
&& params[4] == Int::class.java
|
||||
&& params[4] == Boolean::class.java
|
||||
&& params[4] == Boolean::class.java
|
||||
&& method.returnType == Void.TYPE
|
||||
}
|
||||
hookBeforeIfEnabled(method2) { param ->
|
||||
val selfUin = AppRuntimeHelper.getAccount()
|
||||
val troopUin = param.args[0] as String
|
||||
val opUin = param.args[1] as String
|
||||
val time = param.args[2] as Long
|
||||
val interval = param.args[3] as Long
|
||||
val msgSeq = param.args[4] as Int
|
||||
val gagTroop = param.args[5] as Boolean
|
||||
val opName = ContactUtils.getTroopMemberNick(troopUin, opUin)
|
||||
if (!QAppUtils.isQQnt()) {
|
||||
val builder = GreyTipBuilder.create(GreyTipBuilder.MSG_TYPE_TROOP_GAP_GRAY_TIPS)
|
||||
if (gagTroop) {
|
||||
if (opUin == selfUin) {
|
||||
builder.append("你")
|
||||
} else {
|
||||
builder.appendTroopMember(opUin, opName)
|
||||
}
|
||||
if (interval == 0L) {
|
||||
builder.append(" 关闭了全员禁言 ")
|
||||
} else {
|
||||
builder.append(" 开启了全员禁言 ")
|
||||
}
|
||||
} else {
|
||||
builder.append("你")
|
||||
builder.append(" 被 ")
|
||||
builder.appendTroopMember(opUin, opName)
|
||||
if (interval == 0L) {
|
||||
builder.append(" 解除禁言 ")
|
||||
} else {
|
||||
builder.append(" 禁言${getSecStr(interval)} ")
|
||||
}
|
||||
}
|
||||
val msg = builder.build(troopUin, 1, opUin, time, msgSeq.toLong())
|
||||
val list = ArrayList<Any>() + msg
|
||||
QQMessageFacade.commitMessageRecordList(list)
|
||||
} else {
|
||||
val builder = NtGrayTipHelper.NtGrayTipJsonBuilder()
|
||||
if (gagTroop) {
|
||||
if (opUin == selfUin) {
|
||||
builder.appendText("你")
|
||||
} else {
|
||||
builder.appendText("$opName[$opUin]")
|
||||
}
|
||||
if (interval == 0L) {
|
||||
builder.appendText(" 关闭了全员禁言 ")
|
||||
} else {
|
||||
builder.appendText(" 开启了全员禁言 ")
|
||||
}
|
||||
} else {
|
||||
builder.appendText("你")
|
||||
builder.appendText(" 被 ")
|
||||
builder.appendText("$opName[$opUin]")
|
||||
if (interval == 0L) {
|
||||
builder.appendText(" 解除禁言 ")
|
||||
} else {
|
||||
builder.appendText(" 禁言${getSecStr(interval)} ")
|
||||
}
|
||||
}
|
||||
addTroopGrayTipMsg(troopUin, builder.build().toString())
|
||||
|
||||
else -> {
|
||||
builder.appendUserItem(victimUin, "$victimName")
|
||||
builder.appendText("被")
|
||||
if (opUin == selfUin) builder.appendUserItem(selfUin, "你") else builder.appendUserItem(opUin, "$opName")
|
||||
builder.appendText(if (victimTime == 0L) "解除禁言" else "禁言${getSecStr(victimTime)}")
|
||||
}
|
||||
}
|
||||
NtGrayTipHelper.addLocalJsonGrayTipMsg(
|
||||
AppRuntimeHelper.getAppRuntime()!!,
|
||||
ContactCompat(ChatTypeConstants.GROUP, troopUin, ""),
|
||||
NtGrayTipHelper.createLocalJsonElement(NtGrayTipHelper.AIO_AV_GROUP_NOTICE.toLong(), builder.build().toString(), ""),
|
||||
true,
|
||||
true
|
||||
) { result, uin ->
|
||||
if (result != 0) {
|
||||
Log.e("GagInfoDisclosure error: addLocalJsonGrayTipMsg failed, result=$result, uin=$uin")
|
||||
}
|
||||
param.setResult(null)
|
||||
}
|
||||
}
|
||||
return true
|
||||
|
||||
Reference in New Issue
Block a user