From 3e27c64e84eb25dcba3d2ffbbfa314b5b626af0a Mon Sep 17 00:00:00 2001 From: ikechan8370 Date: Tue, 21 Nov 2023 23:39:20 +0800 Subject: [PATCH] =?UTF-8?q?`Shamrock`:=20=E5=8F=8B=E4=BA=BA=E3=81=8A?= =?UTF-8?q?=E3=82=88=E3=81=B3=E3=82=B0=E3=83=AB=E3=83=BC=E3=83=97=E3=81=AE?= =?UTF-8?q?=E3=83=A1=E3=83=B3=E3=83=90=E3=83=BC=E3=82=B7=E3=83=83=E3=83=97?= =?UTF-8?q?=E8=A6=81=E6=B1=82=E3=81=AE=E5=87=A6=E7=90=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../relation/api/IAddFriendTempApi.java | 186 ++++++++++++++++++ .../structmsg/structmsg$AddFrdSNInfo.java | 19 ++ .../structmsg/structmsg$FlagInfo.java | 54 +++++ .../structmsg/structmsg$FriendInfo.java | 13 ++ .../structmsg/structmsg$GroupInfo.java | 27 +++ .../structmsg/structmsg$MsgInviteExt.java | 21 ++ .../structmsg/structmsg$MsgPayGroupExt.java | 18 ++ .../structmsg/structmsg$ReqNextSystemMsg.java | 37 ++++ .../structmsg$ReqSystemMsgAction.java | 35 ++++ .../structmsg/structmsg$ReqSystemMsgNew.java | 49 +++++ .../structmsg/structmsg$ReqSystemMsgRead.java | 27 +++ .../mobileim/structmsg/structmsg$RspHead.java | 15 ++ .../structmsg/structmsg$RspNextSystemMsg.java | 37 ++++ .../structmsg$RspSystemMsgAction.java | 25 +++ .../structmsg/structmsg$RspSystemMsgNew.java | 66 +++++++ .../structmsg/structmsg$RspSystemMsgRead.java | 17 ++ .../structmsg/structmsg$StructMsg.java | 31 +++ .../structmsg/structmsg$SystemMsg.java | 186 ++++++++++++++++++ .../structmsg/structmsg$SystemMsgAction.java | 20 ++ .../structmsg$SystemMsgActionInfo.java | 40 ++++ .../fuqiuluo/qqinterface/servlet/FriendSvc.kt | 69 +++++++ .../fuqiuluo/qqinterface/servlet/GroupSvc.kt | 94 ++++++++- .../fuqiuluo/shamrock/remote/HTTPServer.kt | 1 + .../shamrock/remote/action/ActionManager.kt | 3 + .../action/handlers/SetFriendAddRequest.kt | 36 ++++ .../action/handlers/SetGroupAddRequest.kt | 41 ++++ .../shamrock/remote/api/RequestAction.kt | 39 ++++ .../shamrock/remote/config/StatusPages.kt | 3 + .../service/api/GlobalEventTransmitter.kt | 9 +- .../remote/service/data/push/NoticeEvent.kt | 1 + .../service/listener/PrimitiveListener.kt | 54 ++++- 31 files changed, 1263 insertions(+), 10 deletions(-) create mode 100644 qqinterface/src/main/java/com/tencent/mobileqq/relation/api/IAddFriendTempApi.java create mode 100644 qqinterface/src/main/java/tencent/mobileim/structmsg/structmsg$AddFrdSNInfo.java create mode 100644 qqinterface/src/main/java/tencent/mobileim/structmsg/structmsg$FlagInfo.java create mode 100644 qqinterface/src/main/java/tencent/mobileim/structmsg/structmsg$FriendInfo.java create mode 100644 qqinterface/src/main/java/tencent/mobileim/structmsg/structmsg$GroupInfo.java create mode 100644 qqinterface/src/main/java/tencent/mobileim/structmsg/structmsg$MsgInviteExt.java create mode 100644 qqinterface/src/main/java/tencent/mobileim/structmsg/structmsg$MsgPayGroupExt.java create mode 100644 qqinterface/src/main/java/tencent/mobileim/structmsg/structmsg$ReqNextSystemMsg.java create mode 100644 qqinterface/src/main/java/tencent/mobileim/structmsg/structmsg$ReqSystemMsgAction.java create mode 100644 qqinterface/src/main/java/tencent/mobileim/structmsg/structmsg$ReqSystemMsgNew.java create mode 100644 qqinterface/src/main/java/tencent/mobileim/structmsg/structmsg$ReqSystemMsgRead.java create mode 100644 qqinterface/src/main/java/tencent/mobileim/structmsg/structmsg$RspHead.java create mode 100644 qqinterface/src/main/java/tencent/mobileim/structmsg/structmsg$RspNextSystemMsg.java create mode 100644 qqinterface/src/main/java/tencent/mobileim/structmsg/structmsg$RspSystemMsgAction.java create mode 100644 qqinterface/src/main/java/tencent/mobileim/structmsg/structmsg$RspSystemMsgNew.java create mode 100644 qqinterface/src/main/java/tencent/mobileim/structmsg/structmsg$RspSystemMsgRead.java create mode 100644 qqinterface/src/main/java/tencent/mobileim/structmsg/structmsg$StructMsg.java create mode 100644 qqinterface/src/main/java/tencent/mobileim/structmsg/structmsg$SystemMsg.java create mode 100644 qqinterface/src/main/java/tencent/mobileim/structmsg/structmsg$SystemMsgAction.java create mode 100644 qqinterface/src/main/java/tencent/mobileim/structmsg/structmsg$SystemMsgActionInfo.java create mode 100644 xposed/src/main/java/moe/fuqiuluo/shamrock/remote/action/handlers/SetFriendAddRequest.kt create mode 100644 xposed/src/main/java/moe/fuqiuluo/shamrock/remote/action/handlers/SetGroupAddRequest.kt create mode 100644 xposed/src/main/java/moe/fuqiuluo/shamrock/remote/api/RequestAction.kt diff --git a/qqinterface/src/main/java/com/tencent/mobileqq/relation/api/IAddFriendTempApi.java b/qqinterface/src/main/java/com/tencent/mobileqq/relation/api/IAddFriendTempApi.java new file mode 100644 index 0000000..cd579ad --- /dev/null +++ b/qqinterface/src/main/java/com/tencent/mobileqq/relation/api/IAddFriendTempApi.java @@ -0,0 +1,186 @@ +package com.tencent.mobileqq.relation.api; + +import android.app.Activity; +import android.content.Context; +import android.content.Intent; +import android.os.Bundle; +import android.widget.TextView; +import com.tencent.common.app.AppInterface; +import com.tencent.mobileqq.data.MessageRecord; +import com.tencent.mobileqq.data.PhoneContact; +import com.tencent.mobileqq.qroute.QRouteApi; +import java.util.ArrayList; +import java.util.HashMap; +import tencent.mobileim.structmsg.*; + +public interface IAddFriendTempApi extends QRouteApi { + public static final int ENTER_FROM_CONTACT_TAB = 1; + + public static final int ENTER_FROM_DEFAULT = 0; + + public static final int ENTER_FROM_MESSAGE_TAB = 2; + + public static final int ENTER_FROM_NEW_FRIEND = 3; + + public static final int ENTER_FROM_NEW_FRIEND_MORE = 4; + +// void addBatchQIMFriends(List paramList, AppInterface paramAppInterface); + + void addFriendToFriendList(AppInterface paramAppInterface, String paramString1, int paramInt1, int paramInt2, String paramString2, boolean paramBoolean1, boolean paramBoolean2, long paramLong); + + void addListener(Object paramObject, AppInterface paramAppInterface); + + void cancelMayKnowRecommend(String paramString, AppInterface paramAppInterface); + +// void changeStructMsgActions(structmsg.StructMsg paramStructMsg, int paramInt1, String paramString, int paramInt2); + +// boolean changeStructMsgActionsWhenFail(structmsg.StructMsg paramStructMsg, int paramInt, String paramString1, String paramString2); + + void checkReadContactPermission(Runnable paramRunnable, AppInterface paramAppInterface); + + void checkUpdate(AppInterface paramAppInterface, String paramString); + + void clearAllSystemMsg(AppInterface paramAppInterface); + + void clickQIMSource(Context paramContext, MessageRecord paramMessageRecord, AppInterface paramAppInterface); + + Intent composeReturnIntent(Class paramClass, String paramString, Activity paramActivity); + + void deleteAllSuspiciousMsg(AppInterface paramAppInterface); + +// void deleteQIMNotifyAddFriendData(QIMNotifyAddFriend paramQIMNotifyAddFriend, AppInterface paramAppInterface); + + boolean enableCheckPermission(); + + void followUser(String paramString, boolean paramBoolean); + + Intent getAddRequestIntent(Context paramContext); + + Intent getBindNumberIntent(Context paramContext); + + Intent getChatActivityIntent(Context paramContext); + +// ArrayList getConnectionsPersonLocal(int paramInt, AppInterface paramAppInterface); + + void getConnectionsPersonRemoteNextPage(int paramInt, AppInterface paramAppInterface); + +// ArrayList getConnectionsTabInfoListLocal(AppInterface paramAppInterface); + + void getDiscussInfo(long paramLong, AppInterface paramAppInterface); + + String getDiscussionNameCanNull(AppInterface paramAppInterface, String paramString); + + int getForwardSelectionRequest(); + + Intent getFriendProfileMoreInfoIntent(Context paramContext); + + int getMayKnowLoadConnectionBizTypeFirstLoad(); + + int getMayKnowPersonNum(AppInterface paramAppInterface); + + boolean getMayKnowRecommendRemoteFromNewFrd(AppInterface paramAppInterface); + + String getQIMNewFriendSource(AppInterface paramAppInterface); + +// ArrayList getQIMNotifyAddFriendsMsg(boolean paramBoolean, AppInterface paramAppInterface); + + String getQQInfoFromQQUin(long paramLong1, long paramLong2, AppInterface paramAppInterface); + + HashMap getQidianExternal(HashMap paramHashMap); + +// String getRecommendLabelString(List paramList); + + int getRequestForSetting(); + + int getSizeSmall(); + + void getSuspiciousFriendsUnreadNum(AppInterface paramAppInterface); + + int getTypeSetConnectionsSwitch(); + + Object getValue(String paramString1, String paramString2, int paramInt1, int paramInt2); + + void gotoFriendSettingBrowser(Context paramContext); + + boolean hasQidianExternal(HashMap paramHashMap); + + boolean hasQimSource(AppInterface paramAppInterface); + + void insertCommonHobbyIfNeeded(AppInterface paramAppInterface, String paramString); + + boolean isMayKnowConnectionsUserClosed(AppInterface paramAppInterface); + + boolean isNewFrdMiniCardSwitchOn(AppInterface paramAppInterface); + + boolean isPhoneContactEnabled(AppInterface paramAppInterface); + + boolean isQidianMaster(AppInterface paramAppInterface, String paramString); + + boolean isStudyMode(AppInterface paramAppInterface); + + boolean isSuspiciousSwitchOpen(); + +// void jumpToMoveGroup(Activity paramActivity, QBaseFragment paramQBaseFragment, String paramString, int paramInt1, int paramInt2); + + void jumpToNewFriendMoreSysMsgSuspiciousFragment(Context paramContext); + + void jumpToNewFriendMoreSysMsgSuspiciousFragment(Context paramContext, Intent paramIntent, int paramInt); + + void jumpToQidianProfile(String paramString, Activity paramActivity); + + void jumpToSplash(Activity paramActivity); + + void launchPluginBroadcastWhenToggleSwitch(String paramString, AppInterface paramAppInterface, boolean paramBoolean); + + void loadConnectionsTabData(AppInterface paramAppInterface, int paramInt1, int paramInt2); + + void markQIMNotifyAddFriendsRead(AppInterface paramAppInterface); + +// void openSecCheckWebForFragment(AppInterface paramAppInterface, Context paramContext, QBaseFragment paramQBaseFragment, int paramInt, String paramString1, String paramString2); + +// void recordStartExpose(MayKnowRecommend paramMayKnowRecommend, int paramInt1, int paramInt2, int paramInt3, AppInterface paramAppInterface); + +// void recordStopExpose(MayKnowRecommend paramMayKnowRecommend, int paramInt1, int paramInt2, int paramInt3, AppInterface paramAppInterface); + + void removeListener(Object paramObject, AppInterface paramAppInterface); + + void reportExtendFriend(int paramInt, String paramString, Intent paramIntent); + + void reportRecommend(AppInterface paramAppInterface, String paramString1, String paramString2, int paramInt1, int paramInt2, String paramString3, int paramInt3, byte[] paramArrayOfbyte, String paramString4, int paramInt4); + + void reportRecommendExpose(AppInterface paramAppInterface, int paramInt1, ArrayList paramArrayList1, ArrayList paramArrayList2, ArrayList paramArrayList, ArrayList paramArrayList3, int paramInt2); + + void sendAddFriendNoticeForBaby(AppInterface paramAppInterface, Intent paramIntent); + +// void sendDelSingleSystemMsg(structmsg.StructMsg paramStructMsg, String paramString, int paramInt, long paramLong, AppInterface paramAppInterface); + + void sendFriendSystemMsgAction(int msg_type, long msg_seq, long req_uin, int sub_type, int src_id, int sub_src_id, int group_msg_type, structmsg$SystemMsgActionInfo action_info, int system_msg_action_type, structmsg$StructMsg paramStructMsg, boolean isUncommonlyUsedFrd, AppInterface paramAppInterface); + + void sendFriendSystemMsgReadedReport(AppInterface paramAppInterface); + + void sendGetNextFriendSystemMsg(AppInterface paramAppInterface); + + void sendPokeMsg(AppInterface paramAppInterface, Context paramContext, String paramString); + + void setConnectionsSwitch(boolean paramBoolean, AppInterface paramAppInterface); + + boolean shouldShowMayKnowInNewFriend(AppInterface paramAppInterface); + +// void startAddContactsPage(Context paramContext, int paramInt1, int paramInt2, LaunchMode paramLaunchMode, @Nullable Bundle paramBundle); + + void startAddContactsPageForResult(Activity paramActivity, int paramInt1, int paramInt2, int paramInt3); + + void startAddRequestPage(Context paramContext, Intent paramIntent); + + void startAddRequestPageForResult(Activity paramActivity, Intent paramIntent, int paramInt); + + void startAddRequestSuspiciousPage(Context paramContext, Intent paramIntent); + + void startContactBindFromOther(AppInterface paramAppInterface, int paramInt1, int paramInt2, Intent paramIntent); + + void startContactBindFromOther(AppInterface paramAppInterface, int paramInt, ArrayList paramArrayList); + + void startRemarkAfterAgree(Activity paramActivity, int paramInt, String paramString, long paramLong, Bundle paramBundle); + + void updateCustomNoteTxt(TextView paramTextView, int paramInt1, int paramInt2); +} diff --git a/qqinterface/src/main/java/tencent/mobileim/structmsg/structmsg$AddFrdSNInfo.java b/qqinterface/src/main/java/tencent/mobileim/structmsg/structmsg$AddFrdSNInfo.java new file mode 100644 index 0000000..c1ee1e0 --- /dev/null +++ b/qqinterface/src/main/java/tencent/mobileim/structmsg/structmsg$AddFrdSNInfo.java @@ -0,0 +1,19 @@ +package tencent.mobileim.structmsg; + +import com.tencent.mobileqq.pb.MessageMicro; +import com.tencent.mobileqq.pb.PBField; +import com.tencent.mobileqq.pb.PBUInt32Field; + +public final class structmsg$AddFrdSNInfo extends MessageMicro { + static final FieldMap __fieldMap__; + + public final PBUInt32Field uint32_not_see_dynamic = PBField.initUInt32(0); + + public final PBUInt32Field uint32_set_sn = PBField.initUInt32(0); + + static { + Integer integer = Integer.valueOf(0); + __fieldMap__ = MessageMicro.initFieldMap(new int[] { 8, 16 }, new String[] { "uint32_not_see_dynamic", "uint32_set_sn" }, new Object[] { integer, integer }, structmsg$AddFrdSNInfo.class); + } +} + diff --git a/qqinterface/src/main/java/tencent/mobileim/structmsg/structmsg$FlagInfo.java b/qqinterface/src/main/java/tencent/mobileim/structmsg/structmsg$FlagInfo.java new file mode 100644 index 0000000..6623d40 --- /dev/null +++ b/qqinterface/src/main/java/tencent/mobileim/structmsg/structmsg$FlagInfo.java @@ -0,0 +1,54 @@ +package tencent.mobileim.structmsg; + +import com.tencent.mobileqq.pb.MessageMicro; +import com.tencent.mobileqq.pb.PBField; +import com.tencent.mobileqq.pb.PBUInt32Field; + +public final class structmsg$FlagInfo extends MessageMicro { + static final FieldMap __fieldMap__; + + public final PBUInt32Field FrdMsg_Discuss2ManyChat = PBField.initUInt32(0); + + public final PBUInt32Field FrdMsg_GetBusiCard = PBField.initUInt32(0); + + public final PBUInt32Field FrdMsg_NeedWaitingMsg = PBField.initUInt32(0); + + public final PBUInt32Field FrdMsg_uint32_need_all_unread_msg = PBField.initUInt32(0); + + public final PBUInt32Field GrpMsg_GetC2cInviteJoinGroup = PBField.initUInt32(0); + + public final PBUInt32Field GrpMsg_GetDisbandedByAdmin = PBField.initUInt32(0); + + public final PBUInt32Field GrpMsg_GetOfficialAccount = PBField.initUInt32(0); + + public final PBUInt32Field GrpMsg_GetPayInGroup = PBField.initUInt32(0); + + public final PBUInt32Field GrpMsg_HiddenGrp = PBField.initUInt32(0); + + public final PBUInt32Field GrpMsg_Kick_Admin = PBField.initUInt32(0); + + public final PBUInt32Field GrpMsg_NeedAutoAdminWording = PBField.initUInt32(0); + + public final PBUInt32Field GrpMsg_NotAllowJoinGrp_InviteNotFrd = PBField.initUInt32(0); + + public final PBUInt32Field GrpMsg_WordingDown = PBField.initUInt32(0); + + public final PBUInt32Field GrpMsg_get_quit_pay_group_msg_flag = PBField.initUInt32(0); + + public final PBUInt32Field GrpMsg_get_transfer_group_msg_flag = PBField.initUInt32(0); + + public final PBUInt32Field GrpMsg_mask_invite_auto_join = PBField.initUInt32(0); + + public final PBUInt32Field GrpMsg_support_invite_auto_join = PBField.initUInt32(0); + + static { + Integer integer = Integer.valueOf(0); + __fieldMap__ = MessageMicro.initFieldMap(new int[] { + 8, 16, 24, 32, 40, 48, 56, 64, 72, 80, + 88, 96, 104, 112, 120, 128, 136 }, new String[] { + "GrpMsg_Kick_Admin", "GrpMsg_HiddenGrp", "GrpMsg_WordingDown", "FrdMsg_GetBusiCard", "GrpMsg_GetOfficialAccount", "GrpMsg_GetPayInGroup", "FrdMsg_Discuss2ManyChat", "GrpMsg_NotAllowJoinGrp_InviteNotFrd", "FrdMsg_NeedWaitingMsg", "FrdMsg_uint32_need_all_unread_msg", + "GrpMsg_NeedAutoAdminWording", "GrpMsg_get_transfer_group_msg_flag", "GrpMsg_get_quit_pay_group_msg_flag", "GrpMsg_support_invite_auto_join", "GrpMsg_mask_invite_auto_join", "GrpMsg_GetDisbandedByAdmin", "GrpMsg_GetC2cInviteJoinGroup" }, new Object[] { + integer, integer, integer, integer, integer, integer, integer, integer, integer, integer, + integer, integer, integer, integer, integer, integer, integer }, structmsg$FlagInfo.class); + } +} \ No newline at end of file diff --git a/qqinterface/src/main/java/tencent/mobileim/structmsg/structmsg$FriendInfo.java b/qqinterface/src/main/java/tencent/mobileim/structmsg/structmsg$FriendInfo.java new file mode 100644 index 0000000..1f53b2b --- /dev/null +++ b/qqinterface/src/main/java/tencent/mobileim/structmsg/structmsg$FriendInfo.java @@ -0,0 +1,13 @@ +package tencent.mobileim.structmsg; + +import com.tencent.mobileqq.pb.MessageMicro; +import com.tencent.mobileqq.pb.PBField; +import com.tencent.mobileqq.pb.PBStringField; + +public final class structmsg$FriendInfo extends MessageMicro { + static final FieldMap __fieldMap__ = MessageMicro.initFieldMap(new int[] { 10, 18 }, new String[] { "msg_joint_friend", "msg_blacklist" }, new Object[] { "", "" }, structmsg$FriendInfo.class); + + public final PBStringField msg_blacklist = PBField.initString(""); + + public final PBStringField msg_joint_friend = PBField.initString(""); +} diff --git a/qqinterface/src/main/java/tencent/mobileim/structmsg/structmsg$GroupInfo.java b/qqinterface/src/main/java/tencent/mobileim/structmsg/structmsg$GroupInfo.java new file mode 100644 index 0000000..ea7523c --- /dev/null +++ b/qqinterface/src/main/java/tencent/mobileim/structmsg/structmsg$GroupInfo.java @@ -0,0 +1,27 @@ +package tencent.mobileim.structmsg; + +import com.tencent.mobileqq.pb.MessageMicro; +import com.tencent.mobileqq.pb.PBField; +import com.tencent.mobileqq.pb.PBStringField; +import com.tencent.mobileqq.pb.PBUInt32Field; + +public final class structmsg$GroupInfo extends MessageMicro { + static final FieldMap __fieldMap__; + + public final PBUInt32Field display_action = PBField.initUInt32(0); + + public final PBUInt32Field group_auth_type = PBField.initUInt32(0); + + public final PBStringField msg_alert = PBField.initString(""); + + public final PBStringField msg_detail_alert = PBField.initString(""); + + public final PBStringField msg_other_admin_done = PBField.initString(""); + + public final PBUInt32Field uint32_app_privilege_flag = PBField.initUInt32(0); + + static { + Integer integer = Integer.valueOf(0); + __fieldMap__ = MessageMicro.initFieldMap(new int[] { 8, 16, 26, 34, 42, 48 }, new String[] { "group_auth_type", "display_action", "msg_alert", "msg_detail_alert", "msg_other_admin_done", "uint32_app_privilege_flag" }, new Object[] { integer, integer, "", "", "", integer }, structmsg$GroupInfo.class); + } +} diff --git a/qqinterface/src/main/java/tencent/mobileim/structmsg/structmsg$MsgInviteExt.java b/qqinterface/src/main/java/tencent/mobileim/structmsg/structmsg$MsgInviteExt.java new file mode 100644 index 0000000..a36c902 --- /dev/null +++ b/qqinterface/src/main/java/tencent/mobileim/structmsg/structmsg$MsgInviteExt.java @@ -0,0 +1,21 @@ +package tencent.mobileim.structmsg; + +import com.tencent.mobileqq.pb.MessageMicro; +import com.tencent.mobileqq.pb.PBField; +import com.tencent.mobileqq.pb.PBUInt32Field; +import com.tencent.mobileqq.pb.PBUInt64Field; + +public final class structmsg$MsgInviteExt extends MessageMicro { + static final FieldMap __fieldMap__; + + public final PBUInt32Field uint32_src_type = PBField.initUInt32(0); + + public final PBUInt32Field uint32_wait_state = PBField.initUInt32(0); + + public final PBUInt64Field uint64_src_code = PBField.initUInt64(0L); + + static { + Integer integer = Integer.valueOf(0); + __fieldMap__ = MessageMicro.initFieldMap(new int[] { 8, 16, 24 }, new String[] { "uint32_src_type", "uint64_src_code", "uint32_wait_state" }, new Object[] { integer, Long.valueOf(0L), integer }, structmsg$MsgInviteExt.class); + } +} diff --git a/qqinterface/src/main/java/tencent/mobileim/structmsg/structmsg$MsgPayGroupExt.java b/qqinterface/src/main/java/tencent/mobileim/structmsg/structmsg$MsgPayGroupExt.java new file mode 100644 index 0000000..173eb8b --- /dev/null +++ b/qqinterface/src/main/java/tencent/mobileim/structmsg/structmsg$MsgPayGroupExt.java @@ -0,0 +1,18 @@ +package tencent.mobileim.structmsg; + +import com.tencent.mobileqq.pb.MessageMicro; +import com.tencent.mobileqq.pb.PBField; +import com.tencent.mobileqq.pb.PBUInt64Field; + +public final class structmsg$MsgPayGroupExt extends MessageMicro { + static final FieldMap __fieldMap__; + + public final PBUInt64Field uint64_join_grp_time = PBField.initUInt64(0L); + + public final PBUInt64Field uint64_quit_grp_time = PBField.initUInt64(0L); + + static { + Long long_ = Long.valueOf(0L); + __fieldMap__ = MessageMicro.initFieldMap(new int[] { 8, 16 }, new String[] { "uint64_join_grp_time", "uint64_quit_grp_time" }, new Object[] { long_, long_ }, structmsg$MsgPayGroupExt.class); + } +} diff --git a/qqinterface/src/main/java/tencent/mobileim/structmsg/structmsg$ReqNextSystemMsg.java b/qqinterface/src/main/java/tencent/mobileim/structmsg/structmsg$ReqNextSystemMsg.java new file mode 100644 index 0000000..29a8075 --- /dev/null +++ b/qqinterface/src/main/java/tencent/mobileim/structmsg/structmsg$ReqNextSystemMsg.java @@ -0,0 +1,37 @@ +package tencent.mobileim.structmsg; + +import com.tencent.mobileqq.pb.MessageMicro; +import com.tencent.mobileqq.pb.PBEnumField; +import com.tencent.mobileqq.pb.PBField; +import com.tencent.mobileqq.pb.PBUInt32Field; +import com.tencent.mobileqq.pb.PBUInt64Field; + +public final class structmsg$ReqNextSystemMsg extends MessageMicro { + static final FieldMap __fieldMap__; + + public final PBEnumField checktype = PBField.initEnum(1); + + public structmsg$FlagInfo flag = new structmsg$FlagInfo(); + + public final PBUInt64Field following_friend_seq = PBField.initUInt64(0L); + + public final PBUInt64Field following_group_seq = PBField.initUInt64(0L); + + public final PBUInt64Field friend_msg_type_flag = PBField.initUInt64(0L); + + public final PBUInt32Field language = PBField.initUInt32(0); + + public final PBUInt32Field msg_num = PBField.initUInt32(0); + + public final PBUInt32Field uint32_need_uid = PBField.initUInt32(0); + + public final PBUInt32Field uint32_req_msg_type = PBField.initUInt32(0); + + public final PBUInt32Field version = PBField.initUInt32(0); + + static { + Integer integer = Integer.valueOf(0); + Long long_ = Long.valueOf(0L); + __fieldMap__ = MessageMicro.initFieldMap(new int[] { 8, 16, 24, 32, 42, 48, 56, 64, 72, 128 }, new String[] { "msg_num", "following_friend_seq", "following_group_seq", "checktype", "flag", "language", "version", "friend_msg_type_flag", "uint32_req_msg_type", "uint32_need_uid" }, new Object[] { integer, long_, long_, Integer.valueOf(1), null, integer, integer, long_, integer, integer }, structmsg$ReqNextSystemMsg.class); + } +} diff --git a/qqinterface/src/main/java/tencent/mobileim/structmsg/structmsg$ReqSystemMsgAction.java b/qqinterface/src/main/java/tencent/mobileim/structmsg/structmsg$ReqSystemMsgAction.java new file mode 100644 index 0000000..0d00216 --- /dev/null +++ b/qqinterface/src/main/java/tencent/mobileim/structmsg/structmsg$ReqSystemMsgAction.java @@ -0,0 +1,35 @@ +package tencent.mobileim.structmsg; + +import com.tencent.mobileqq.pb.MessageMicro; +import com.tencent.mobileqq.pb.PBEnumField; +import com.tencent.mobileqq.pb.PBField; +import com.tencent.mobileqq.pb.PBUInt32Field; +import com.tencent.mobileqq.pb.PBUInt64Field; + +public final class structmsg$ReqSystemMsgAction extends MessageMicro { + static final FieldMap __fieldMap__; + + public structmsg$SystemMsgActionInfo action_info = new structmsg$SystemMsgActionInfo(); + + public final PBUInt32Field group_msg_type = PBField.initUInt32(0); + + public final PBUInt32Field language = PBField.initUInt32(0); + + public final PBUInt64Field msg_seq = PBField.initUInt64(0L); + + public final PBEnumField msg_type = PBField.initEnum(1); + + public final PBUInt64Field req_uin = PBField.initUInt64(0L); + + public final PBUInt32Field src_id = PBField.initUInt32(0); + + public final PBUInt32Field sub_src_id = PBField.initUInt32(0); + + public final PBUInt32Field sub_type = PBField.initUInt32(0); + + static { + Integer integer = Integer.valueOf(0); + Long long_ = Long.valueOf(0L); + __fieldMap__ = MessageMicro.initFieldMap(new int[] { 8, 16, 24, 32, 40, 48, 56, 66, 72 }, new String[] { "msg_type", "msg_seq", "req_uin", "sub_type", "src_id", "sub_src_id", "group_msg_type", "action_info", "language" }, new Object[] { Integer.valueOf(1), long_, long_, integer, integer, integer, integer, null, integer }, structmsg$ReqSystemMsgAction.class); + } +} diff --git a/qqinterface/src/main/java/tencent/mobileim/structmsg/structmsg$ReqSystemMsgNew.java b/qqinterface/src/main/java/tencent/mobileim/structmsg/structmsg$ReqSystemMsgNew.java new file mode 100644 index 0000000..a7e5bc2 --- /dev/null +++ b/qqinterface/src/main/java/tencent/mobileim/structmsg/structmsg$ReqSystemMsgNew.java @@ -0,0 +1,49 @@ +package tencent.mobileim.structmsg; + +import com.tencent.mobileqq.pb.MessageMicro; +import com.tencent.mobileqq.pb.PBBoolField; +import com.tencent.mobileqq.pb.PBEnumField; +import com.tencent.mobileqq.pb.PBField; +import com.tencent.mobileqq.pb.PBUInt32Field; +import com.tencent.mobileqq.pb.PBUInt64Field; + +public final class structmsg$ReqSystemMsgNew extends MessageMicro { + static final FieldMap __fieldMap__; + + public final PBEnumField checktype = PBField.initEnum(1); + + public structmsg$FlagInfo flag = new structmsg$FlagInfo(); + + public final PBUInt64Field friend_msg_type_flag = PBField.initUInt64(0L); + + public final PBBoolField is_get_frd_ribbon = PBField.initBool(true); + + public final PBBoolField is_get_grp_ribbon = PBField.initBool(true); + + public final PBUInt32Field language = PBField.initUInt32(0); + + public final PBUInt64Field latest_friend_seq = PBField.initUInt64(0L); + + public final PBUInt64Field latest_group_seq = PBField.initUInt64(0L); + + public final PBUInt32Field msg_num = PBField.initUInt32(0); + + public final PBUInt32Field uint32_need_uid = PBField.initUInt32(0); + + public final PBUInt32Field uint32_req_msg_type = PBField.initUInt32(0); + + public final PBUInt32Field version = PBField.initUInt32(0); + + static { + Integer integer = Integer.valueOf(0); + Long long_ = Long.valueOf(0L); + Boolean bool = Boolean.TRUE; + __fieldMap__ = MessageMicro.initFieldMap(new int[] { + 8, 16, 24, 32, 40, 50, 56, 64, 72, 80, + 88, 128 }, new String[] { + "msg_num", "latest_friend_seq", "latest_group_seq", "version", "checktype", "flag", "language", "is_get_frd_ribbon", "is_get_grp_ribbon", "friend_msg_type_flag", + "uint32_req_msg_type", "uint32_need_uid" }, new Object[] { + integer, long_, long_, integer, Integer.valueOf(1), null, integer, bool, bool, long_, + integer, integer }, structmsg$ReqSystemMsgNew.class); + } +} diff --git a/qqinterface/src/main/java/tencent/mobileim/structmsg/structmsg$ReqSystemMsgRead.java b/qqinterface/src/main/java/tencent/mobileim/structmsg/structmsg$ReqSystemMsgRead.java new file mode 100644 index 0000000..8e56d06 --- /dev/null +++ b/qqinterface/src/main/java/tencent/mobileim/structmsg/structmsg$ReqSystemMsgRead.java @@ -0,0 +1,27 @@ +package tencent.mobileim.structmsg; + +import com.tencent.mobileqq.pb.MessageMicro; +import com.tencent.mobileqq.pb.PBEnumField; +import com.tencent.mobileqq.pb.PBField; +import com.tencent.mobileqq.pb.PBUInt32Field; +import com.tencent.mobileqq.pb.PBUInt64Field; + +public final class structmsg$ReqSystemMsgRead extends MessageMicro { + static final FieldMap __fieldMap__; + + public final PBEnumField checktype = PBField.initEnum(1); + + public final PBUInt64Field latest_friend_seq = PBField.initUInt64(0L); + + public final PBUInt64Field latest_group_seq = PBField.initUInt64(0L); + + public final PBUInt32Field type = PBField.initUInt32(0); + + public final PBUInt32Field uint32_req_msg_type = PBField.initUInt32(0); + + static { + Long long_ = Long.valueOf(0L); + Integer integer = Integer.valueOf(0); + __fieldMap__ = MessageMicro.initFieldMap(new int[] { 8, 16, 24, 32, 40 }, new String[] { "latest_friend_seq", "latest_group_seq", "type", "checktype", "uint32_req_msg_type" }, new Object[] { long_, long_, integer, Integer.valueOf(1), integer }, structmsg$ReqSystemMsgRead.class); + } +} diff --git a/qqinterface/src/main/java/tencent/mobileim/structmsg/structmsg$RspHead.java b/qqinterface/src/main/java/tencent/mobileim/structmsg/structmsg$RspHead.java new file mode 100644 index 0000000..6a4db67 --- /dev/null +++ b/qqinterface/src/main/java/tencent/mobileim/structmsg/structmsg$RspHead.java @@ -0,0 +1,15 @@ +package tencent.mobileim.structmsg; + +import com.tencent.mobileqq.pb.MessageMicro; +import com.tencent.mobileqq.pb.PBField; +import com.tencent.mobileqq.pb.PBInt32Field; +import com.tencent.mobileqq.pb.PBStringField; + +public final class structmsg$RspHead extends MessageMicro { + static final FieldMap __fieldMap__ = MessageMicro.initFieldMap(new int[] { 8, 18 }, new String[] { "result", "msg_fail" }, new Object[] { Integer.valueOf(0), "" }, structmsg$RspHead.class); + + public final PBStringField msg_fail = PBField.initString(""); + + public final PBInt32Field result = PBField.initInt32(0); +} + diff --git a/qqinterface/src/main/java/tencent/mobileim/structmsg/structmsg$RspNextSystemMsg.java b/qqinterface/src/main/java/tencent/mobileim/structmsg/structmsg$RspNextSystemMsg.java new file mode 100644 index 0000000..8913f13 --- /dev/null +++ b/qqinterface/src/main/java/tencent/mobileim/structmsg/structmsg$RspNextSystemMsg.java @@ -0,0 +1,37 @@ +package tencent.mobileim.structmsg; + +import com.tencent.mobileqq.pb.ByteStringMicro; +import com.tencent.mobileqq.pb.MessageMicro; +import com.tencent.mobileqq.pb.PBBytesField; +import com.tencent.mobileqq.pb.PBEnumField; +import com.tencent.mobileqq.pb.PBField; +import com.tencent.mobileqq.pb.PBRepeatMessageField; +import com.tencent.mobileqq.pb.PBStringField; +import com.tencent.mobileqq.pb.PBUInt32Field; +import com.tencent.mobileqq.pb.PBUInt64Field; + +public final class structmsg$RspNextSystemMsg extends MessageMicro { + static final FieldMap __fieldMap__; + + public final PBStringField bytes_game_nick = PBField.initString(""); + + public final PBBytesField bytes_undecid_for_qim = PBField.initBytes(ByteStringMicro.EMPTY); + + public final PBEnumField checktype = PBField.initEnum(1); + + public final PBUInt64Field following_friend_seq = PBField.initUInt64(0L); + + public final PBUInt64Field following_group_seq = PBField.initUInt64(0L); + + public structmsg$RspHead head = new structmsg$RspHead(); + + public final PBRepeatMessageField msgs = PBField.initRepeatMessage(structmsg$StructMsg.class); + + public final PBUInt32Field uint32_un_read_count3 = PBField.initUInt32(0); + + static { + Long long_ = Long.valueOf(0L); + ByteStringMicro byteStringMicro = ByteStringMicro.EMPTY; + __fieldMap__ = MessageMicro.initFieldMap(new int[] { 10, 18, 24, 32, 40, 802, 810, 816 }, new String[] { "head", "msgs", "following_friend_seq", "following_group_seq", "checktype", "bytes_game_nick", "bytes_undecid_for_qim", "uint32_un_read_count3" }, new Object[] { null, null, long_, long_, Integer.valueOf(1), "", byteStringMicro, Integer.valueOf(0) }, structmsg$RspNextSystemMsg.class); + } +} diff --git a/qqinterface/src/main/java/tencent/mobileim/structmsg/structmsg$RspSystemMsgAction.java b/qqinterface/src/main/java/tencent/mobileim/structmsg/structmsg$RspSystemMsgAction.java new file mode 100644 index 0000000..a32e3fc --- /dev/null +++ b/qqinterface/src/main/java/tencent/mobileim/structmsg/structmsg$RspSystemMsgAction.java @@ -0,0 +1,25 @@ +package tencent.mobileim.structmsg; + +import com.tencent.mobileqq.pb.MessageMicro; +import com.tencent.mobileqq.pb.PBField; +import com.tencent.mobileqq.pb.PBStringField; +import com.tencent.mobileqq.pb.PBUInt32Field; + +public final class structmsg$RspSystemMsgAction extends MessageMicro { + static final FieldMap __fieldMap__; + + public structmsg$RspHead head = new structmsg$RspHead(); + + public final PBStringField msg_detail = PBField.initString(""); + + public final PBStringField msg_invalid_decided = PBField.initString(""); + + public final PBUInt32Field remark_result = PBField.initUInt32(0); + + public final PBUInt32Field type = PBField.initUInt32(0); + + static { + Integer integer = Integer.valueOf(0); + __fieldMap__ = MessageMicro.initFieldMap(new int[] { 10, 18, 24, 42, 48 }, new String[] { "head", "msg_detail", "type", "msg_invalid_decided", "remark_result" }, new Object[] { null, "", integer, "", integer }, structmsg$RspSystemMsgAction.class); + } +} diff --git a/qqinterface/src/main/java/tencent/mobileim/structmsg/structmsg$RspSystemMsgNew.java b/qqinterface/src/main/java/tencent/mobileim/structmsg/structmsg$RspSystemMsgNew.java new file mode 100644 index 0000000..b192571 --- /dev/null +++ b/qqinterface/src/main/java/tencent/mobileim/structmsg/structmsg$RspSystemMsgNew.java @@ -0,0 +1,66 @@ +package tencent.mobileim.structmsg; + +import com.tencent.mobileqq.pb.ByteStringMicro; +import com.tencent.mobileqq.pb.MessageMicro; +import com.tencent.mobileqq.pb.PBBytesField; +import com.tencent.mobileqq.pb.PBEnumField; +import com.tencent.mobileqq.pb.PBField; +import com.tencent.mobileqq.pb.PBRepeatMessageField; +import com.tencent.mobileqq.pb.PBStringField; +import com.tencent.mobileqq.pb.PBUInt32Field; +import com.tencent.mobileqq.pb.PBUInt64Field; + +public final class structmsg$RspSystemMsgNew extends MessageMicro { + static final FieldMap __fieldMap__; + + public final PBStringField bytes_game_nick = PBField.initString(""); + + public final PBBytesField bytes_undecid_for_qim = PBField.initBytes(ByteStringMicro.EMPTY); + + public final PBEnumField checktype = PBField.initEnum(1); + + public final PBUInt64Field following_friend_seq = PBField.initUInt64(0L); + + public final PBUInt64Field following_group_seq = PBField.initUInt64(0L); + + public final PBRepeatMessageField friendmsgs = PBField.initRepeatMessage(structmsg$StructMsg.class); + + public final PBRepeatMessageField groupmsgs = PBField.initRepeatMessage(structmsg$StructMsg.class); + + public final PBStringField grp_msg_display = PBField.initString(""); + + public structmsg$RspHead head = new structmsg$RspHead(); + + public final PBUInt64Field latest_friend_seq = PBField.initUInt64(0L); + + public final PBUInt64Field latest_group_seq = PBField.initUInt64(0L); + + public final PBStringField msg_display = PBField.initString(""); + + public structmsg$StructMsg msg_ribbon_friend = new structmsg$StructMsg(); + + public structmsg$StructMsg msg_ribbon_group = new structmsg$StructMsg(); + + public final PBUInt32Field uint32_has_suspicious_flag = PBField.initUInt32(0); + + public final PBUInt32Field uint32_over = PBField.initUInt32(0); + + public final PBUInt32Field uint32_un_read_count3 = PBField.initUInt32(0); + + public final PBUInt32Field unread_friend_count = PBField.initUInt32(0); + + public final PBUInt32Field unread_group_count = PBField.initUInt32(0); + + static { + Integer integer = Integer.valueOf(0); + Long long_ = Long.valueOf(0L); + ByteStringMicro byteStringMicro = ByteStringMicro.EMPTY; + __fieldMap__ = MessageMicro.initFieldMap(new int[] { + 10, 16, 24, 32, 40, 48, 56, 74, 82, 90, + 98, 106, 114, 120, 160, 802, 810, 816, 824 }, new String[] { + "head", "unread_friend_count", "unread_group_count", "latest_friend_seq", "latest_group_seq", "following_friend_seq", "following_group_seq", "friendmsgs", "groupmsgs", "msg_ribbon_friend", + "msg_ribbon_group", "msg_display", "grp_msg_display", "uint32_over", "checktype", "bytes_game_nick", "bytes_undecid_for_qim", "uint32_un_read_count3", "uint32_has_suspicious_flag" }, new Object[] { + null, integer, integer, long_, long_, long_, long_, null, null, null, + null, "", "", integer, Integer.valueOf(1), "", byteStringMicro, integer, integer }, structmsg$RspSystemMsgNew.class); + } +} diff --git a/qqinterface/src/main/java/tencent/mobileim/structmsg/structmsg$RspSystemMsgRead.java b/qqinterface/src/main/java/tencent/mobileim/structmsg/structmsg$RspSystemMsgRead.java new file mode 100644 index 0000000..61e02c0 --- /dev/null +++ b/qqinterface/src/main/java/tencent/mobileim/structmsg/structmsg$RspSystemMsgRead.java @@ -0,0 +1,17 @@ +package tencent.mobileim.structmsg; + +import com.tencent.mobileqq.pb.MessageMicro; +import com.tencent.mobileqq.pb.PBEnumField; +import com.tencent.mobileqq.pb.PBField; +import com.tencent.mobileqq.pb.PBUInt32Field; + +public final class structmsg$RspSystemMsgRead extends MessageMicro { + static final FieldMap __fieldMap__ = MessageMicro.initFieldMap(new int[] { 10, 16, 24 }, new String[] { "head", "type", "checktype" }, new Object[] { null, Integer.valueOf(0), Integer.valueOf(1) }, structmsg$RspSystemMsgRead.class); + + public final PBEnumField checktype = PBField.initEnum(1); + + public structmsg$RspHead head = new structmsg$RspHead(); + + public final PBUInt32Field type = PBField.initUInt32(0); +} + diff --git a/qqinterface/src/main/java/tencent/mobileim/structmsg/structmsg$StructMsg.java b/qqinterface/src/main/java/tencent/mobileim/structmsg/structmsg$StructMsg.java new file mode 100644 index 0000000..dea91d5 --- /dev/null +++ b/qqinterface/src/main/java/tencent/mobileim/structmsg/structmsg$StructMsg.java @@ -0,0 +1,31 @@ +package tencent.mobileim.structmsg; + +import com.tencent.mobileqq.pb.MessageMicro; +import com.tencent.mobileqq.pb.PBEnumField; +import com.tencent.mobileqq.pb.PBField; +import com.tencent.mobileqq.pb.PBUInt32Field; +import com.tencent.mobileqq.pb.PBUInt64Field; + +public final class structmsg$StructMsg extends MessageMicro { + static final FieldMap __fieldMap__; + + public structmsg$SystemMsg msg = new structmsg$SystemMsg(); + + public final PBUInt64Field msg_seq = PBField.initUInt64(0L); + + public final PBUInt64Field msg_time = PBField.initUInt64(0L); + + public final PBEnumField msg_type = PBField.initEnum(1); + + public final PBUInt64Field req_uin = PBField.initUInt64(0L); + + public final PBUInt32Field uint32_unread_flag = PBField.initUInt32(0); + + public final PBUInt32Field version = PBField.initUInt32(0); + + static { + Integer integer = Integer.valueOf(0); + Long long_ = Long.valueOf(0L); + __fieldMap__ = MessageMicro.initFieldMap(new int[] { 8, 16, 24, 32, 40, 48, 402 }, new String[] { "version", "msg_type", "msg_seq", "msg_time", "req_uin", "uint32_unread_flag", "msg" }, new Object[] { integer, Integer.valueOf(1), long_, long_, long_, integer, null }, structmsg$StructMsg.class); + } +} diff --git a/qqinterface/src/main/java/tencent/mobileim/structmsg/structmsg$SystemMsg.java b/qqinterface/src/main/java/tencent/mobileim/structmsg/structmsg$SystemMsg.java new file mode 100644 index 0000000..27b1972 --- /dev/null +++ b/qqinterface/src/main/java/tencent/mobileim/structmsg/structmsg$SystemMsg.java @@ -0,0 +1,186 @@ +package tencent.mobileim.structmsg; + +import com.tencent.mobileqq.pb.ByteStringMicro; +import com.tencent.mobileqq.pb.MessageMicro; +import com.tencent.mobileqq.pb.PBBytesField; +import com.tencent.mobileqq.pb.PBField; +import com.tencent.mobileqq.pb.PBInt32Field; +import com.tencent.mobileqq.pb.PBRepeatMessageField; +import com.tencent.mobileqq.pb.PBStringField; +import com.tencent.mobileqq.pb.PBUInt32Field; +import com.tencent.mobileqq.pb.PBUInt64Field; + +public final class structmsg$SystemMsg extends MessageMicro { + static final FieldMap __fieldMap__; + + public final PBUInt64Field action_uin = PBField.initUInt64(0L); + + public final PBStringField action_uin_nick; + + public final PBBytesField action_uin_qq_nick; + + public final PBBytesField action_uin_remark; + + public final PBRepeatMessageField actions = PBField.initRepeatMessage(structmsg$SystemMsgAction.class); + + public final PBUInt64Field actor_uin = PBField.initUInt64(0L); + + public final PBStringField actor_uin_nick; + + public final PBBytesField bytes_addtion; + + public final PBBytesField bytes_game_msg; + + public final PBBytesField bytes_game_nick; + + public final PBBytesField bytes_name_more; + + public final PBBytesField bytes_source_desc; + + public final PBBytesField bytes_transparent_group_notify; + + public final PBBytesField bytes_warning_tips; + + public final PBUInt32Field card_switch; + + public final PBUInt64Field clone_uin = PBField.initUInt64(0L); + + public final PBStringField clone_uin_nick; + + public final PBBytesField eim_group_id_name; + + public structmsg$FriendInfo friend_info = new structmsg$FriendInfo(); + + public final PBUInt64Field group_code = PBField.initUInt64(0L); + + public final PBUInt32Field group_ext_flag; + + public structmsg$GroupInfo group_info = new structmsg$GroupInfo(); + + public final PBUInt32Field group_inviter_role = PBField.initUInt32(0); + + public final PBUInt32Field group_msg_type = PBField.initUInt32(0); + + public final PBStringField group_name; + + public final PBStringField msg_actor_describe = PBField.initString(""); + + public final PBStringField msg_additional = PBField.initString(""); + + public final PBStringField msg_additional_list = PBField.initString(""); + + public final PBStringField msg_decided = PBField.initString(""); + + public final PBStringField msg_describe = PBField.initString(""); + + public final PBStringField msg_detail; + + public structmsg$MsgInviteExt msg_invite_extinfo = new structmsg$MsgInviteExt(); + + public structmsg$MsgPayGroupExt msg_pay_group_extinfo = new structmsg$MsgPayGroupExt(); + + public final PBStringField msg_qna; + + public final PBStringField msg_source = PBField.initString(""); + + public final PBStringField msg_title = PBField.initString(""); + + public final PBBytesField pic_url; + + public final PBUInt32Field relation = PBField.initUInt32(0); + + public final PBUInt32Field req_uin_age; + + public final PBBytesField req_uin_business_card; + + public final PBInt32Field req_uin_faceid; + + public final PBUInt32Field req_uin_gender; + + public final PBStringField req_uin_nick; + + public final PBBytesField req_uin_pre_remark; + + public final PBUInt32Field reqsubtype = PBField.initUInt32(0); + + public final PBUInt32Field src_id = PBField.initUInt32(0); + + public final PBUInt32Field sub_src_id = PBField.initUInt32(0); + + public final PBUInt32Field sub_type = PBField.initUInt32(0); + + public final PBStringField uid; + + public final PBUInt32Field uint32_c2c_invite_join_group_flag; + + public final PBUInt32Field uint32_doubt_flag; + + public final PBUInt32Field uint32_group_flagext3; + + public final PBUInt32Field uint32_source_flag = PBField.initUInt32(0); + + public final PBUInt64Field uint64_discuss_uin = PBField.initUInt64(0L); + + public final PBUInt64Field uint64_eim_group_id = PBField.initUInt64(0L); + + public final PBUInt64Field uint64_group_owner_uin; + + static { + Integer integer = Integer.valueOf(0); + Long long_ = Long.valueOf(0L); + ByteStringMicro byteStringMicro = ByteStringMicro.EMPTY; + __fieldMap__ = MessageMicro.initFieldMap(new int[] { + 8, 18, 26, 34, 42, 50, 56, 64, 74, 80, + 88, 96, 104, 114, 122, 128, 138, 146, 152, 160, + 168, 176, 184, 194, 202, 208, 218, 226, 232, 240, + 248, 258, 266, 274, 282, 400, 410, 418, 426, 434, + 442, 456, 466, 474, 482, 490, 506, 514, 522, 530, + 536, 544, 552, 808, 866, 882 }, new String[] { + "sub_type", "msg_title", "msg_describe", "msg_additional", "msg_source", "msg_decided", "src_id", "sub_src_id", "actions", "group_code", + "action_uin", "group_msg_type", "group_inviter_role", "friend_info", "group_info", "actor_uin", "msg_actor_describe", "msg_additional_list", "relation", "reqsubtype", + "clone_uin", "uint64_discuss_uin", "uint64_eim_group_id", "msg_invite_extinfo", "msg_pay_group_extinfo", "uint32_source_flag", "bytes_game_nick", "bytes_game_msg", "uint32_group_flagext3", "uint64_group_owner_uin", + "uint32_doubt_flag", "bytes_warning_tips", "bytes_name_more", "bytes_addtion", "bytes_transparent_group_notify", "req_uin_faceid", "req_uin_nick", "group_name", "action_uin_nick", "msg_qna", + "msg_detail", "group_ext_flag", "actor_uin_nick", "pic_url", "clone_uin_nick", "req_uin_business_card", "eim_group_id_name", "req_uin_pre_remark", "action_uin_qq_nick", "action_uin_remark", + "req_uin_gender", "req_uin_age", "uint32_c2c_invite_join_group_flag", "card_switch", "bytes_source_desc", "uid" }, new Object[] { + integer, "", "", "", "", "", integer, integer, null, long_, + long_, integer, integer, null, null, long_, "", "", integer, integer, + long_, long_, long_, null, null, integer, byteStringMicro, byteStringMicro, integer, long_, + integer, byteStringMicro, byteStringMicro, byteStringMicro, byteStringMicro, integer, "", "", "", "", + "", integer, "", byteStringMicro, "", byteStringMicro, byteStringMicro, byteStringMicro, byteStringMicro, byteStringMicro, + integer, integer, integer, integer, byteStringMicro, "" }, structmsg$SystemMsg.class); + } + + public structmsg$SystemMsg() { + ByteStringMicro byteStringMicro = ByteStringMicro.EMPTY; + this.bytes_game_nick = PBField.initBytes(byteStringMicro); + this.bytes_game_msg = PBField.initBytes(byteStringMicro); + this.uint32_group_flagext3 = PBField.initUInt32(0); + this.uint64_group_owner_uin = PBField.initUInt64(0L); + this.uint32_doubt_flag = PBField.initUInt32(0); + this.bytes_warning_tips = PBField.initBytes(byteStringMicro); + this.bytes_name_more = PBField.initBytes(byteStringMicro); + this.bytes_addtion = PBField.initBytes(byteStringMicro); + this.bytes_transparent_group_notify = PBField.initBytes(byteStringMicro); + this.req_uin_faceid = PBField.initInt32(0); + this.req_uin_nick = PBField.initString(""); + this.group_name = PBField.initString(""); + this.action_uin_nick = PBField.initString(""); + this.msg_qna = PBField.initString(""); + this.msg_detail = PBField.initString(""); + this.group_ext_flag = PBField.initUInt32(0); + this.actor_uin_nick = PBField.initString(""); + this.pic_url = PBField.initBytes(byteStringMicro); + this.clone_uin_nick = PBField.initString(""); + this.req_uin_business_card = PBField.initBytes(byteStringMicro); + this.eim_group_id_name = PBField.initBytes(byteStringMicro); + this.req_uin_pre_remark = PBField.initBytes(byteStringMicro); + this.action_uin_qq_nick = PBField.initBytes(byteStringMicro); + this.action_uin_remark = PBField.initBytes(byteStringMicro); + this.req_uin_gender = PBField.initUInt32(0); + this.req_uin_age = PBField.initUInt32(0); + this.uint32_c2c_invite_join_group_flag = PBField.initUInt32(0); + this.card_switch = PBField.initUInt32(0); + this.bytes_source_desc = PBField.initBytes(byteStringMicro); + this.uid = PBField.initString(""); + } +} diff --git a/qqinterface/src/main/java/tencent/mobileim/structmsg/structmsg$SystemMsgAction.java b/qqinterface/src/main/java/tencent/mobileim/structmsg/structmsg$SystemMsgAction.java new file mode 100644 index 0000000..3f4ca07 --- /dev/null +++ b/qqinterface/src/main/java/tencent/mobileim/structmsg/structmsg$SystemMsgAction.java @@ -0,0 +1,20 @@ +package tencent.mobileim.structmsg; + +import com.tencent.mobileqq.pb.MessageMicro; +import com.tencent.mobileqq.pb.PBField; +import com.tencent.mobileqq.pb.PBStringField; +import com.tencent.mobileqq.pb.PBUInt32Field; + +public final class structmsg$SystemMsgAction extends MessageMicro { + static final FieldMap __fieldMap__ = MessageMicro.initFieldMap(new int[] { 10, 18, 24, 34, 42 }, new String[] { "name", "result", "action", "action_info", "detail_name" }, new Object[] { "", "", Integer.valueOf(0), null, "" }, structmsg$SystemMsgAction.class); + + public final PBUInt32Field action = PBField.initUInt32(0); + + public structmsg$SystemMsgActionInfo action_info = new structmsg$SystemMsgActionInfo(); + + public final PBStringField detail_name = PBField.initString(""); + + public final PBStringField name = PBField.initString(""); + + public final PBStringField result = PBField.initString(""); +} diff --git a/qqinterface/src/main/java/tencent/mobileim/structmsg/structmsg$SystemMsgActionInfo.java b/qqinterface/src/main/java/tencent/mobileim/structmsg/structmsg$SystemMsgActionInfo.java new file mode 100644 index 0000000..fa79728 --- /dev/null +++ b/qqinterface/src/main/java/tencent/mobileim/structmsg/structmsg$SystemMsgActionInfo.java @@ -0,0 +1,40 @@ +package tencent.mobileim.structmsg; + +import com.tencent.mobileqq.pb.ByteStringMicro; +import com.tencent.mobileqq.pb.MessageMicro; +import com.tencent.mobileqq.pb.PBBoolField; +import com.tencent.mobileqq.pb.PBBytesField; +import com.tencent.mobileqq.pb.PBEnumField; +import com.tencent.mobileqq.pb.PBField; +import com.tencent.mobileqq.pb.PBStringField; +import com.tencent.mobileqq.pb.PBUInt32Field; +import com.tencent.mobileqq.pb.PBUInt64Field; + +public final class structmsg$SystemMsgActionInfo extends MessageMicro { + static final FieldMap __fieldMap__; + + public structmsg$AddFrdSNInfo addFrdSNInfo = new structmsg$AddFrdSNInfo(); + + public final PBBoolField blacklist = PBField.initBool(false); + + public final PBUInt64Field group_code = PBField.initUInt64(0L); + + public final PBUInt32Field group_id = PBField.initUInt32(0); + + public final PBStringField msg = PBField.initString(""); + + public final PBStringField remark = PBField.initString(""); + + public final PBBytesField sig = PBField.initBytes(ByteStringMicro.EMPTY); + + public final PBEnumField type = PBField.initEnum(1); + + public final PBUInt32Field uint32_req_msg_type = PBField.initUInt32(0); + + static { + Integer integer = Integer.valueOf(0); + ByteStringMicro byteStringMicro = ByteStringMicro.EMPTY; + Boolean bool = Boolean.FALSE; + __fieldMap__ = MessageMicro.initFieldMap(new int[] { 8, 16, 26, 402, 408, 418, 424, 434, 440 }, new String[] { "type", "group_code", "sig", "msg", "group_id", "remark", "blacklist", "addFrdSNInfo", "uint32_req_msg_type" }, new Object[] { Integer.valueOf(1), Long.valueOf(0L), byteStringMicro, "", integer, "", bool, null, integer }, structmsg$SystemMsgActionInfo.class); + } +} diff --git a/xposed/src/main/java/moe/fuqiuluo/qqinterface/servlet/FriendSvc.kt b/xposed/src/main/java/moe/fuqiuluo/qqinterface/servlet/FriendSvc.kt index eba1f6c..2dde121 100644 --- a/xposed/src/main/java/moe/fuqiuluo/qqinterface/servlet/FriendSvc.kt +++ b/xposed/src/main/java/moe/fuqiuluo/qqinterface/servlet/FriendSvc.kt @@ -1,19 +1,30 @@ @file:OptIn(DelicateCoroutinesApi::class) +@file:Suppress("IllegalIdentifier") package moe.fuqiuluo.qqinterface.servlet +import com.tencent.common.app.AppInterface import com.tencent.mobileqq.data.Friends import com.tencent.mobileqq.friend.api.IFriendDataService import com.tencent.mobileqq.friend.api.IFriendHandlerService +import com.tencent.mobileqq.qroute.QRoute +import com.tencent.mobileqq.relation.api.IAddFriendTempApi import kotlinx.coroutines.DelicateCoroutinesApi import kotlinx.coroutines.GlobalScope import kotlinx.coroutines.delay import kotlinx.coroutines.launch import kotlinx.coroutines.suspendCancellableCoroutine import moe.fuqiuluo.qqinterface.servlet.BaseSvc +import moe.fuqiuluo.shamrock.tools.slice import moe.fuqiuluo.shamrock.xposed.helper.AppRuntimeFetcher import mqq.app.AppRuntime import mqq.app.MobileQQ +import tencent.mobileim.structmsg.`structmsg$FlagInfo` +import tencent.mobileim.structmsg.`structmsg$ReqSystemMsgNew` +import tencent.mobileim.structmsg.`structmsg$RspSystemMsgNew` import kotlin.coroutines.resume +import tencent.mobileim.structmsg.`structmsg$SystemMsgActionInfo` as ActionInfo +import tencent.mobileim.structmsg.`structmsg$AddFrdSNInfo` as AddFrdSNInfo +import tencent.mobileim.structmsg.`structmsg$StructMsg` as StructMsg internal object FriendSvc: BaseSvc() { @@ -28,6 +39,64 @@ internal object FriendSvc: BaseSvc() { return Result.success(service.allFriends) } + // ProfileService.Pb.ReqSystemMsgAction.Friend + fun requestFriendRequest(msgSeq: Long, uin: Long, remark: String = "", approve: Boolean? = true, notSee: Boolean? = false) { + val app = AppRuntimeFetcher.appRuntime + if (app !is AppInterface) + throw RuntimeException("AppRuntime cannot cast to AppInterface") + val service = QRoute.api(IAddFriendTempApi::class.java) + val action = ActionInfo() + action.type.set(if (approve != false) 2 else 3) + action.group_id.set(0) + action.remark.set(remark) + val snInfo = AddFrdSNInfo() + snInfo.uint32_not_see_dynamic.set(if (notSee != false) 1 else 0) + snInfo.uint32_set_sn.set(0) + action.addFrdSNInfo.set(snInfo) + service.sendFriendSystemMsgAction(1, msgSeq, uin, 1, 2004, 11, 0, action, 0, StructMsg(), false, + app + ) + } + + suspend fun requestFriendSystemMsgNew(msgNum: Int, latestFriendSeq: Long, latestGroupSeq: Long): List? { + val req = `structmsg$ReqSystemMsgNew`() + req.msg_num.set(msgNum) + req.latest_friend_seq.set(latestFriendSeq) + req.latest_group_seq.set(latestGroupSeq) + req.version.set(1000) + req.checktype.set(2) + val flag = `structmsg$FlagInfo`() +// flag.GrpMsg_Kick_Admin.set(1) +// flag.GrpMsg_HiddenGrp.set(1) +// flag.GrpMsg_WordingDown.set(1) + flag.FrdMsg_GetBusiCard.set(1) +// flag.GrpMsg_GetOfficialAccount.set(1) +// flag.GrpMsg_GetPayInGroup.set(1) + flag.FrdMsg_Discuss2ManyChat.set(1) +// flag.GrpMsg_NotAllowJoinGrp_InviteNotFrd.set(1) + flag.FrdMsg_NeedWaitingMsg.set(1) + flag.FrdMsg_uint32_need_all_unread_msg.set(1) +// flag.GrpMsg_NeedAutoAdminWording.set(1) +// flag.GrpMsg_get_transfer_group_msg_flag.set(1) +// flag.GrpMsg_get_quit_pay_group_msg_flag.set(1) +// flag.GrpMsg_support_invite_auto_join.set(1) +// flag.GrpMsg_mask_invite_auto_join.set(1) +// flag.GrpMsg_GetDisbandedByAdmin.set(1) + flag.GrpMsg_GetC2cInviteJoinGroup.set(1) + req.flag.set(flag) + req.is_get_frd_ribbon.set(false) + req.is_get_grp_ribbon.set(false) + req.friend_msg_type_flag.set(1) + req.uint32_req_msg_type.set(1) + req.uint32_need_uid.set(1) + val respBuffer = sendBufferAW("ProfileService.Pb.ReqSystemMsgNew.Friend", true, req.toByteArray()) + ?: return ArrayList() + val msg = `structmsg$RspSystemMsgNew`() + msg.mergeFrom(respBuffer.slice(4)) + return msg.friendmsgs.get() + } + + private suspend fun requestFriendList(runtime: AppRuntime, dataService: IFriendDataService): Boolean { val service = runtime.getRuntimeService(IFriendHandlerService::class.java, "all") service.requestFriendList(true, 0) diff --git a/xposed/src/main/java/moe/fuqiuluo/qqinterface/servlet/GroupSvc.kt b/xposed/src/main/java/moe/fuqiuluo/qqinterface/servlet/GroupSvc.kt index 4809a90..171b7fc 100644 --- a/xposed/src/main/java/moe/fuqiuluo/qqinterface/servlet/GroupSvc.kt +++ b/xposed/src/main/java/moe/fuqiuluo/qqinterface/servlet/GroupSvc.kt @@ -8,6 +8,8 @@ import com.tencent.mobileqq.app.QQAppInterface import com.tencent.mobileqq.data.troop.TroopInfo import com.tencent.mobileqq.data.troop.TroopMemberInfo import com.tencent.mobileqq.pb.ByteStringMicro +import com.tencent.mobileqq.qroute.QRoute +import com.tencent.mobileqq.relation.api.IAddFriendTempApi import com.tencent.mobileqq.troop.api.ITroopInfoService import com.tencent.mobileqq.troop.api.ITroopMemberInfoService import com.tencent.protofile.join_group_link.join_group_link @@ -23,6 +25,9 @@ import kotlinx.coroutines.sync.Mutex import kotlinx.coroutines.sync.withLock import kotlinx.coroutines.withTimeoutOrNull import moe.fuqiuluo.proto.ProtoUtils +import moe.fuqiuluo.proto.asInt +import moe.fuqiuluo.proto.asList +import moe.fuqiuluo.proto.asLong import moe.fuqiuluo.proto.asUtf8String import moe.fuqiuluo.proto.protobufOf import moe.fuqiuluo.shamrock.helper.LogCenter @@ -40,7 +45,10 @@ import java.lang.reflect.Method import java.lang.reflect.Modifier import java.nio.ByteBuffer import kotlin.coroutines.resume - +import tencent.mobileim.structmsg.`structmsg$ReqSystemMsgNew` as ReqSystemMsgNew +import tencent.mobileim.structmsg.`structmsg$FlagInfo` as FlagInfo +import tencent.mobileim.structmsg.`structmsg$RspSystemMsgNew` as RspSystemMsgNew +import tencent.mobileim.structmsg.`structmsg$StructMsg` as StructMsg internal object GroupSvc: BaseSvc() { private val RefreshTroopMemberInfoLock by lazy { Mutex() @@ -573,4 +581,88 @@ internal object GroupSvc: BaseSvc() { Result.failure(Exception("获取群成员信息失败")) } } + + // ProfileService.Pb.ReqSystemMsgAction.Group + suspend fun requestGroupRequest(msgSeq: Long, uin: Long, gid: Long, msg: String? = "", approve: Boolean? = true, notSee: Boolean? = false): Result{ +// val app = AppRuntimeFetcher.appRuntime +// if (app !is AppInterface) +// throw RuntimeException("AppRuntime cannot cast to AppInterface") +// val service = QRoute.api(IAddFriendTempApi::class.java) +// val action = `structmsg$SystemMsgActionInfo`() +// action.type.set(if (approve != false) 11 else 12) +// action.group_code.set(gid) +// action.msg.set(msg) +// val snInfo = `structmsg$AddFrdSNInfo`() +// snInfo.uint32_not_see_dynamic.set(if (notSee != false) 1 else 0) +//// snInfo.uint32_set_sn.set(0) +// action.addFrdSNInfo.set(snInfo) +// service.sendFriendSystemMsgAction(2, msgSeq * 1000, uin, 1, 2, 30024, 1, action, 0, `structmsg$StructMsg`(), false, +// app +// ) + // 实在找不到接口了 发pb吧 + val buffer = protobufOf( + 1 to 2, + 2 to msgSeq, + 3 to uin, + 4 to 1, + 5 to 2, + 6 to 30024, + 7 to 1, + 8 to mapOf( + 1 to if (approve != false) 11 else 12, + 2 to gid + ), + 9 to 1000 + ).toByteArray() + val respBuffer = sendBufferAW("ProfileService.Pb.ReqSystemMsgAction.Group", true, buffer) + ?: return Result.failure(Exception("操作失败")) + val result = ProtoUtils.decodeFromByteArray(respBuffer.slice(4)) + return if (result.has(1, 1)) { + if (result[1, 1].asInt == 0) { + Result.success(result[2].asUtf8String) + } else { + Result.failure(Exception(result[2].asUtf8String)) + } + } else { + Result.failure(Exception("操作失败")) + } + } + + suspend fun requestGroupSystemMsgNew(msgNum: Int, latestFriendSeq: Long, latestGroupSeq: Long): List? { + val req = ReqSystemMsgNew() + req.msg_num.set(msgNum) + req.latest_friend_seq.set(latestFriendSeq) + req.latest_group_seq.set(latestGroupSeq) + req.version.set(1000) + req.checktype.set(3) + val flag = FlagInfo() + flag.GrpMsg_Kick_Admin.set(1) + flag.GrpMsg_HiddenGrp.set(1) + flag.GrpMsg_WordingDown.set(1) +// flag.FrdMsg_GetBusiCard.set(1) + flag.GrpMsg_GetOfficialAccount.set(1) + flag.GrpMsg_GetPayInGroup.set(1) + flag.FrdMsg_Discuss2ManyChat.set(1) + flag.GrpMsg_NotAllowJoinGrp_InviteNotFrd.set(1) + flag.FrdMsg_NeedWaitingMsg.set(1) +// flag.FrdMsg_uint32_need_all_unread_msg.set(1) + flag.GrpMsg_NeedAutoAdminWording.set(1) + flag.GrpMsg_get_transfer_group_msg_flag.set(1) + flag.GrpMsg_get_quit_pay_group_msg_flag.set(1) + flag.GrpMsg_support_invite_auto_join.set(1) + flag.GrpMsg_mask_invite_auto_join.set(1) + flag.GrpMsg_GetDisbandedByAdmin.set(1) + flag.GrpMsg_GetC2cInviteJoinGroup.set(1) + req.flag.set(flag) + req.is_get_frd_ribbon.set(false) + req.is_get_grp_ribbon.set(false) + req.friend_msg_type_flag.set(1) + req.uint32_req_msg_type.set(1) + req.uint32_need_uid.set(1) + val respBuffer = sendBufferAW("ProfileService.Pb.ReqSystemMsgNew.Group", true, req.toByteArray()) + ?: return ArrayList() + val msg = RspSystemMsgNew() + msg.mergeFrom(respBuffer.slice(4)) + return msg.groupmsgs.get() + } } \ No newline at end of file diff --git a/xposed/src/main/java/moe/fuqiuluo/shamrock/remote/HTTPServer.kt b/xposed/src/main/java/moe/fuqiuluo/shamrock/remote/HTTPServer.kt index b8f49e7..979621e 100644 --- a/xposed/src/main/java/moe/fuqiuluo/shamrock/remote/HTTPServer.kt +++ b/xposed/src/main/java/moe/fuqiuluo/shamrock/remote/HTTPServer.kt @@ -63,6 +63,7 @@ internal object HTTPServer { otherAction() guildAction() testAction() + requestRouter() if (ShamrockConfig.isDev()) { qsign() obtainProtocolData() diff --git a/xposed/src/main/java/moe/fuqiuluo/shamrock/remote/action/ActionManager.kt b/xposed/src/main/java/moe/fuqiuluo/shamrock/remote/action/ActionManager.kt index 6af2636..a3259a8 100644 --- a/xposed/src/main/java/moe/fuqiuluo/shamrock/remote/action/ActionManager.kt +++ b/xposed/src/main/java/moe/fuqiuluo/shamrock/remote/action/ActionManager.kt @@ -40,6 +40,9 @@ internal object ActionManager { DeleteGroupFile, GetGroupFileSystemInfo, GetGroupRootFiles, GetGroupSubFiles, GetGroupFileUrl, UploadPrivateFile, + //REQUEST ACTION + SetFriendAddRequest, SetGroupAddRequest, + // GUILD GetGuildServiceProfile, diff --git a/xposed/src/main/java/moe/fuqiuluo/shamrock/remote/action/handlers/SetFriendAddRequest.kt b/xposed/src/main/java/moe/fuqiuluo/shamrock/remote/action/handlers/SetFriendAddRequest.kt new file mode 100644 index 0000000..b47c7cb --- /dev/null +++ b/xposed/src/main/java/moe/fuqiuluo/shamrock/remote/action/handlers/SetFriendAddRequest.kt @@ -0,0 +1,36 @@ +package moe.fuqiuluo.shamrock.remote.action.handlers + +import kotlinx.serialization.json.JsonElement +import moe.fuqiuluo.qqinterface.servlet.FriendSvc +import moe.fuqiuluo.qqinterface.servlet.GroupSvc +import moe.fuqiuluo.shamrock.remote.action.ActionSession +import moe.fuqiuluo.shamrock.remote.action.IActionHandler +import moe.fuqiuluo.shamrock.tools.EmptyJsonString + +internal object SetFriendAddRequest: IActionHandler() { + override suspend fun internalHandle(session: ActionSession): String { + val flag = session.getString("flag") + val approve = session.getBoolean("approve") + val remark = session.getStringOrNull("remark") + val notSeen = session.getBoolean("notSeen") + return invoke(flag, approve, remark, notSeen, session.echo) + } + + operator fun invoke(flag: String, approve: Boolean? = true, remark: String? = "", notSeen: Boolean? = false, echo: JsonElement = EmptyJsonString): String { + val flags = flag.split(";") + val ts = flags[0].toLong() +// val src = flags[1].toInt() +// val subSrc = flags[2].toInt() + val applier = flags[3].toLong() + return try { + FriendSvc.requestFriendRequest(ts, applier, remark ?: "", approve, notSeen) + ok("成功", echo) + } catch (err: Throwable) { + err.printStackTrace() + error("失败:${err.message}", echo) + } + + } + + override fun path(): String = "set_friend_add_request" +} \ No newline at end of file diff --git a/xposed/src/main/java/moe/fuqiuluo/shamrock/remote/action/handlers/SetGroupAddRequest.kt b/xposed/src/main/java/moe/fuqiuluo/shamrock/remote/action/handlers/SetGroupAddRequest.kt new file mode 100644 index 0000000..d4e99b3 --- /dev/null +++ b/xposed/src/main/java/moe/fuqiuluo/shamrock/remote/action/handlers/SetGroupAddRequest.kt @@ -0,0 +1,41 @@ +package moe.fuqiuluo.shamrock.remote.action.handlers + +import kotlinx.serialization.json.JsonElement +import moe.fuqiuluo.qqinterface.servlet.FriendSvc +import moe.fuqiuluo.qqinterface.servlet.GroupSvc +import moe.fuqiuluo.shamrock.remote.action.ActionSession +import moe.fuqiuluo.shamrock.remote.action.IActionHandler +import moe.fuqiuluo.shamrock.remote.service.data.push.NoticeSubType +import moe.fuqiuluo.shamrock.tools.EmptyJsonString + +internal object SetGroupAddRequest: IActionHandler() { + override suspend fun internalHandle(session: ActionSession): String { + val flag = session.getString("flag") + val approve = session.getBoolean("approve") + val remark = session.getStringOrNull("reason") + val notSeen = session.getBoolean("notSeen") + val subType = session.getString("sub_type") + return invoke(flag, approve, subType, remark, notSeen, session.echo) + } + + suspend operator fun invoke(flag: String, approve: Boolean? = true, subType: String, remark: String? = "", notSeen: Boolean? = false, echo: JsonElement = EmptyJsonString): String { + val flags = flag.split(";") + val ts = flags[0].toLong() + val groupCode = flags[1].toLong() + val applier = flags[2].toLong() + return try { + val result = GroupSvc.requestGroupRequest(ts, applier, groupCode, remark ?: "", approve, notSeen) + if (result.isSuccess) { + ok(result.getOrNull(), echo) + } else { + logic(result.getOrNull() ?: "", echo) + } + } catch (err: Throwable) { + err.printStackTrace() + error("失败:${err.message}", echo) + } + + } + + override fun path(): String = "set_group_add_request" +} \ No newline at end of file diff --git a/xposed/src/main/java/moe/fuqiuluo/shamrock/remote/api/RequestAction.kt b/xposed/src/main/java/moe/fuqiuluo/shamrock/remote/api/RequestAction.kt new file mode 100644 index 0000000..9bf1732 --- /dev/null +++ b/xposed/src/main/java/moe/fuqiuluo/shamrock/remote/api/RequestAction.kt @@ -0,0 +1,39 @@ +package moe.fuqiuluo.shamrock.remote.api + +import io.ktor.http.ContentType +import io.ktor.server.application.call +import io.ktor.server.response.respondText +import io.ktor.server.routing.Routing +import moe.fuqiuluo.shamrock.remote.action.handlers.SetFriendAddRequest +import moe.fuqiuluo.shamrock.remote.action.handlers.SetGroupAddRequest +import moe.fuqiuluo.shamrock.tools.fetchOrNull +import moe.fuqiuluo.shamrock.tools.fetchOrThrow +import moe.fuqiuluo.shamrock.tools.getOrPost + +fun Routing.requestRouter() { + getOrPost("/set_friend_add_request") { + val flag = fetchOrThrow("flag") + val approve = fetchOrNull("approve")?.toBooleanStrict() ?: true + val remark = fetchOrNull("remark") + val notSeen = fetchOrNull("not_seen")?.toBooleanStrict() ?: false + + call.respondText( + SetFriendAddRequest(flag, approve, remark, notSeen), + ContentType.Application.Json + ) + } + + getOrPost("/set_group_add_request") { + val flag = fetchOrThrow("flag") + val approve = fetchOrNull("approve")?.toBooleanStrict() ?: true + val remark = fetchOrNull("reason") + val subType = fetchOrNull("sub_type") + val notSeen = fetchOrNull("not_seen")?.toBooleanStrict() ?: false + + call.respondText( + SetGroupAddRequest(flag, approve, subType ?: "add", remark, notSeen), + ContentType.Application.Json + ) + } + +} \ No newline at end of file diff --git a/xposed/src/main/java/moe/fuqiuluo/shamrock/remote/config/StatusPages.kt b/xposed/src/main/java/moe/fuqiuluo/shamrock/remote/config/StatusPages.kt index 10ab1ff..923a7bc 100644 --- a/xposed/src/main/java/moe/fuqiuluo/shamrock/remote/config/StatusPages.kt +++ b/xposed/src/main/java/moe/fuqiuluo/shamrock/remote/config/StatusPages.kt @@ -10,6 +10,8 @@ import io.ktor.server.request.uri import io.ktor.server.response.respond import io.ktor.util.AttributeKey import kotlinx.serialization.json.JsonElement +import moe.fuqiuluo.shamrock.helper.Level +import moe.fuqiuluo.shamrock.helper.LogCenter import moe.fuqiuluo.shamrock.remote.entries.CommonResult import moe.fuqiuluo.shamrock.remote.entries.ErrorCatch import moe.fuqiuluo.shamrock.remote.entries.Status @@ -55,6 +57,7 @@ fun Application.statusPages() { val echo = if (call.attributes.contains(ECHO_KEY)) { call.attributes[ECHO_KEY] } else null + LogCenter.log(cause.stackTraceToString(), Level.ERROR) call.respond(CommonResult( status = "failed", retcode = Status.InternalHandlerError.code, diff --git a/xposed/src/main/java/moe/fuqiuluo/shamrock/remote/service/api/GlobalEventTransmitter.kt b/xposed/src/main/java/moe/fuqiuluo/shamrock/remote/service/api/GlobalEventTransmitter.kt index ec0ff8b..d0608a2 100644 --- a/xposed/src/main/java/moe/fuqiuluo/shamrock/remote/service/api/GlobalEventTransmitter.kt +++ b/xposed/src/main/java/moe/fuqiuluo/shamrock/remote/service/api/GlobalEventTransmitter.kt @@ -317,6 +317,7 @@ internal object GlobalEventTransmitter: BaseSvc() { operator: Long, reason: String, groupCode: Long, + flag: String, subType: NoticeSubType ): Boolean { pushNotice(NoticeEvent( @@ -327,7 +328,8 @@ internal object GlobalEventTransmitter: BaseSvc() { operatorId = operator, tip = reason, groupId = groupCode, - subType = subType + subType = subType, + flag = flag )) return true } @@ -367,7 +369,7 @@ internal object GlobalEventTransmitter: BaseSvc() { return true } - suspend fun transFriendApply(time: Long, operation: Long, tipText: String): Boolean { + suspend fun transFriendApply(time: Long, operation: Long, tipText: String, flag: String): Boolean { pushNotice(NoticeEvent( time = time, selfId = app.longAccountUin, @@ -375,7 +377,8 @@ internal object GlobalEventTransmitter: BaseSvc() { type = NoticeType.FriendApply, operatorId = operation, userId = operation, - tip = tipText + tip = tipText, + flag = flag )) return true } diff --git a/xposed/src/main/java/moe/fuqiuluo/shamrock/remote/service/data/push/NoticeEvent.kt b/xposed/src/main/java/moe/fuqiuluo/shamrock/remote/service/data/push/NoticeEvent.kt index da95bb1..c1dcdbe 100644 --- a/xposed/src/main/java/moe/fuqiuluo/shamrock/remote/service/data/push/NoticeEvent.kt +++ b/xposed/src/main/java/moe/fuqiuluo/shamrock/remote/service/data/push/NoticeEvent.kt @@ -58,6 +58,7 @@ internal data class NoticeEvent( @SerialName("target_id") val target: Long = 0, @SerialName("file") val file: GroupFileMsg? = null, @SerialName("private_file") val privateFile: PrivateFileMsg? = null, + @SerialName("flag") val flag: String? = null, ) @Serializable diff --git a/xposed/src/main/java/moe/fuqiuluo/shamrock/remote/service/listener/PrimitiveListener.kt b/xposed/src/main/java/moe/fuqiuluo/shamrock/remote/service/listener/PrimitiveListener.kt index c51257a..21226a4 100644 --- a/xposed/src/main/java/moe/fuqiuluo/shamrock/remote/service/listener/PrimitiveListener.kt +++ b/xposed/src/main/java/moe/fuqiuluo/shamrock/remote/service/listener/PrimitiveListener.kt @@ -1,6 +1,7 @@ @file:OptIn(DelicateCoroutinesApi::class) package moe.fuqiuluo.shamrock.remote.service.listener +import com.arthenica.smartexception.ThrowableWrapper import com.tencent.qqnt.kernel.nativeinterface.MsgConstant import kotlinx.coroutines.DelicateCoroutinesApi import moe.fuqiuluo.shamrock.helper.ContactHelper @@ -19,6 +20,8 @@ import moe.fuqiuluo.proto.ProtoUtils import moe.fuqiuluo.proto.asByteArray import moe.fuqiuluo.proto.asList import moe.fuqiuluo.proto.asULong +import moe.fuqiuluo.qqinterface.servlet.FriendSvc.requestFriendSystemMsgNew +import moe.fuqiuluo.qqinterface.servlet.GroupSvc.requestGroupSystemMsgNew import moe.fuqiuluo.shamrock.helper.MessageHelper import moe.fuqiuluo.shamrock.remote.service.data.push.NoticeSubType import moe.fuqiuluo.shamrock.remote.service.data.push.NoticeType @@ -114,9 +117,19 @@ internal object PrimitiveListener { if (applier == 0L) { applier = pb[4, 3, 8].asLong } + val msg_time = pb[1, 3, 2, 1, 9].asLong + val src = pb[1, 3, 2, 1, 7].asInt + val subSrc = pb[1, 3, 2, 1, 8].asInt + val reqs = requestFriendSystemMsgNew(20, 0, 0) + val req = reqs?.first { + it.msg_time.get() == msg_time + } + val seq = req?.msg_seq?.get() + val flag = "$seq;$src;$subSrc;$applier" + LogCenter.log("来自$applier 的好友申请:$msg ($source)") if(!GlobalEventTransmitter.PrivateNoticeTransmitter - .transFriendApply(msgTime, applier, msg)) { + .transFriendApply(msgTime, applier, msg, flag)) { LogCenter.log("好友申请推送失败!", Level.WARN) } } @@ -324,22 +337,51 @@ internal object PrimitiveListener { val applierUid = pb[1, 3, 2, 3].asUtf8String val reason = pb[1, 3, 2, 5].asUtf8String val applier = ContactHelper.getUinByUidAsync(applierUid).toLong() - LogCenter.log("入群申请($groupCode) $applier: \"$reason\"") + val msg_time = pb[1, 2, 6].asLong - if(!GlobalEventTransmitter.GroupNoticeTransmitter - .transGroupApply(time, applier, reason, groupCode, NoticeSubType.Add)) { + LogCenter.log("$msg_time 入群申请($groupCode) $applier: \"$reason\"") + try { + val reqs = requestGroupSystemMsgNew(20, 0, 0) + val req = reqs?.first { + it.msg_time.get() == msg_time + } + val seq = req?.msg_seq?.get() + val flag = "$seq;$groupCode;$applierUid" + if(!seq?.let { + GlobalEventTransmitter.GroupNoticeTransmitter + .transGroupApply(it, applier, reason, groupCode, flag, NoticeSubType.Add) + }!!) { + LogCenter.log("入群申请推送失败!", Level.WARN) + } + } catch (err: Throwable) { LogCenter.log("入群申请推送失败!", Level.WARN) + LogCenter.log(err.stackTraceToString(), Level.ERROR) } + } 528 -> { val groupCode = pb[1, 3, 2, 2, 3].asULong val applierUid = pb[1, 3, 2, 2, 5].asUtf8String val applier = ContactHelper.getUinByUidAsync(applierUid).toLong() + val msg_time = pb[1, 2, 6].asLong LogCenter.log("邀请入群申请($groupCode): $applier") + try { + val reqs = requestGroupSystemMsgNew(20, 0, 0) + val req = reqs?.first { + it.msg_time.get() == msg_time + } + val seq = req?.msg_seq?.get() + val flag = "$seq;$groupCode;$applierUid" + if(!seq?.let { + GlobalEventTransmitter.GroupNoticeTransmitter + .transGroupApply(it, applier, "", groupCode, flag, NoticeSubType.Invite) + }!!) { + LogCenter.log("邀请入群申请推送失败!", Level.WARN) + } - if(!GlobalEventTransmitter.GroupNoticeTransmitter - .transGroupApply(time, applier, "", groupCode, NoticeSubType.Invite)) { + } catch (err: Throwable) { LogCenter.log("邀请入群申请推送失败!", Level.WARN) + LogCenter.log(err.stackTraceToString(), Level.ERROR) } } }