api.md

February 1, 2025 · View on GitHub

在此项目中的QQAPI 你可以在项目中快速复用

QQ环境相关 QQEnvTool

//获取当前登录QQ号
String myUin = QQEnvTool.getCurrentUin();

//获取QQ的指定QRoute实例
Object iTroopMemberListRepoApi = QQEnvTool.getQRouteApi(ClassUtils.findClass("com.tencent.qqnt.troopmemberlist.ITroopMemberListRepoApi"));

//uin转peerUid
QQEnvTool.getUidFromUin(String uin)
//peerUid转uin
QQEnvTool.getUinFromUid(String uid)

获取当前聊天对象 Contact

  • 获取好友/群组聊天对象 包含可能是频道的情况
  • @param type 联系人类型 2是群聊 1是好友 为4时创建频道聊天对象
  • @param uin 正常的QQ号/群号
  • @param guildId 频道id

解释下peerUid和Uin的关系 uin是qq号 peerUid是好友的uid 在QQNT架构中引入

//获取当前聊天对象
Object contact = ContactUtils.getCurrentContact();

//获取好友聊天对象
Object friendContact = ContactUtils.getFriendContact(String uin);

//获取群聊聊天对象
Object groupContact = ContactUtils.getGroupContact(String groupUin);

//使用chatType获取聊天对象
Object targetContact = ContactUtils.getContact(int type, String uin)

//包含频道情况的获取聊天对象
Object targetContact = ContactUtils.getContact(int type, String uin, String guildId)

监听消息View更新

1.调用QQMessageViewListener.addMessageViewUpdateListener(BaseSwitchFunctionHookItem,QQMessageViewListener.OnChatViewUpdateListener) 参数一为当前功能类,参数二为实现的监听器方法 2.实现QQMessageViewListener.OnChatViewUpdateListener接口 完成onViewUpdateAfter重写 参数一为MsgView 参数二懂的都懂

        QQMessageViewListener.addMessageViewUpdateListener(this, new QQMessageViewListener.OnChatViewUpdateListener() {
            @Override
            public void onViewUpdateAfter(@NonNull View msgItemView, @NonNull Object msgRecord) {
                
            }
        });

在消息长按菜单中注册自己的选项

1.让自己的HookItem类实现 OnMenuBuilder 接口 重写提示的方法


@HookItem("辅助功能/聊天/消息长按菜单添加复读")
class MessageMenuAddRereading : BaseSwitchFunctionHookItem(), OnMenuBuilder {
    override fun loadHook(classLoader: ClassLoader) {
        //什么都不用写
    }

    override fun onGetMenu(
        aioMsgItem: Any,
        targetType: String,
        param: XC_MethodHook.MethodHookParam
    ) {
        val item =
            QQCustomMenu.createMenuItem(aioMsgItem, "复读", R.id.item_msg_repeat, R.drawable.repeat) {
                val msgRecord = aioMsgItem.callMethod<Any>("getMsgRecord")
                //调用复读方法
                val listener =
                    RereadingMessageClickListener(msgRecord, ContactUtils.getCurrentContact())
                listener.rereading()
            }
        param.result = listOf(item) + param.result as List<*>
    }

}