Skip to content

Commit

Permalink
refactor: ReplyNoAtHook for QQNT
Browse files Browse the repository at this point in the history
  • Loading branch information
klxiaoniu committed Jun 21, 2023
1 parent 29ed072 commit 2ff60ca
Show file tree
Hide file tree
Showing 3 changed files with 17 additions and 14 deletions.
16 changes: 6 additions & 10 deletions app/src/main/java/cc/ioctl/hook/ui/chat/ReplyNoAtHook.java
Original file line number Diff line number Diff line change
Expand Up @@ -32,14 +32,15 @@
import cc.hicore.QApp.QAppUtils;
import cc.ioctl.util.HookUtils;
import cc.ioctl.util.HostInfo;
import de.robv.android.xposed.XC_MethodHook;
import de.robv.android.xposed.XposedHelpers;
import io.github.qauxv.base.annotation.FunctionHookEntry;
import io.github.qauxv.base.annotation.UiItemAgentEntry;
import io.github.qauxv.dsl.FunctionEntryRouter.Locations.Simplify;
import io.github.qauxv.hook.CommonSwitchFunctionHook;
import io.github.qauxv.tlb.ConfigTable;
import io.github.qauxv.util.Initiator;
import io.github.qauxv.util.dexkit.DexKit;
import io.github.qauxv.util.dexkit.DexKitTarget;
import io.github.qauxv.util.dexkit.Reply_At_QQNT;
import java.lang.reflect.Method;
import java.lang.reflect.Modifier;
import java.util.Objects;
Expand Down Expand Up @@ -75,19 +76,14 @@ public String[] getUiItemLocation() {
public static final ReplyNoAtHook INSTANCE = new ReplyNoAtHook();

private ReplyNoAtHook() {
super();
super(new DexKitTarget[]{Reply_At_QQNT.INSTANCE});
}

@Override
public boolean initOnce() throws ReflectiveOperationException {
if (QAppUtils.isQQnt()) {
XposedHelpers.findAndHookMethod(Initiator.load("com.tencent.mobileqq.aio.input.e.k"), "o",
Initiator.load("com.tencent.mobileqq.aio.msg.AIOMsgItem"), new XC_MethodHook() {
@Override
protected void beforeHookedMethod(MethodHookParam param) {
param.setResult(null);
}
});
HookUtils.hookBeforeIfEnabled(this, DexKit.requireMethodFromCache(Reply_At_QQNT.INSTANCE),
49, param -> param.setResult(null));
} else if (HostInfo.requireMinQQVersion(QQ_8_6_0)) {
String className = ConfigTable.getConfig(ReplyNoAtHook.class.getSimpleName());
if (className == null) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -685,10 +685,17 @@ data object AIO_Create_QQNT : DexKitTarget.UsingStr() {
override val filter = DexKitFilter.allowAll
}

data object EmoMsgUtils_isSingleLottie : DexKitTarget.UsingStr() {
data object EmoMsgUtils_isSingleLottie_QQNT : DexKitTarget.UsingStr() {
override val findMethod: Boolean = true
override val traitString = arrayOf("is Valid EmojiFaceId")
override val declaringClass = ""
override val filter = DexKitFilter.strInClsName("com/tencent/mobileqq/aio/utils")
// "com/tencent/guild/aio/util" 是频道的
}

data object Reply_At_QQNT : DexKitTarget.UsingStr() {
override val findMethod: Boolean = true
override val traitString = arrayOf("msgItem.msgRecord.senderUid")
override val declaringClass = ""
override val filter = DexKitFilter.strInClsName("com/tencent/mobileqq/aio/input")
}
6 changes: 3 additions & 3 deletions app/src/main/java/me/ketal/hook/Emoji2Sticker.kt
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,7 @@ import io.github.qauxv.dsl.FunctionEntryRouter
import io.github.qauxv.hook.CommonSwitchFunctionHook
import io.github.qauxv.util.QQVersion
import io.github.qauxv.util.dexkit.DexKit
import io.github.qauxv.util.dexkit.EmoMsgUtils_isSingleLottie
import io.github.qauxv.util.dexkit.EmoMsgUtils_isSingleLottie_QQNT
import io.github.qauxv.util.requireMinQQVersion
import xyz.nextalone.util.clazz
import xyz.nextalone.util.hookAfter
Expand All @@ -40,7 +40,7 @@ import xyz.nextalone.util.throwOrTrue

@FunctionHookEntry
@UiItemAgentEntry
object Emoji2Sticker : CommonSwitchFunctionHook(arrayOf(EmoMsgUtils_isSingleLottie)) {
object Emoji2Sticker : CommonSwitchFunctionHook(arrayOf(EmoMsgUtils_isSingleLottie_QQNT)) {

override val name = "关闭大号Emoji"
override val description = "禁用新版QQ输入单个Emoji后发送大表情"
Expand All @@ -51,7 +51,7 @@ object Emoji2Sticker : CommonSwitchFunctionHook(arrayOf(EmoMsgUtils_isSingleLott

override fun initOnce() = throwOrTrue {
if (QAppUtils.isQQnt()) {
DexKit.requireMethodFromCache(EmoMsgUtils_isSingleLottie).hookBefore(this) {
DexKit.requireMethodFromCache(EmoMsgUtils_isSingleLottie_QQNT).hookBefore(this) {
it.result = false
}
}
Expand Down

0 comments on commit 2ff60ca

Please sign in to comment.