Shamrock: Fix #199

This commit is contained in:
whitechi73 2024-01-25 15:13:27 +08:00
parent 64b7b00253
commit c39c2a172f
15 changed files with 616 additions and 37 deletions

View File

@ -0,0 +1,10 @@
package KQQ;
import com.qq.jce.JceStruct;
public final class BatchResponse extends JceStruct {
public byte[] buffer;
public int result;
public int seq;
public int type;
}

View File

@ -0,0 +1,9 @@
package KQQ;
import com.qq.jce.JceStruct;
import java.util.ArrayList;
public final class RespBatchProcess extends JceStruct {
public ArrayList<BatchResponse> batch_response_list;
}

View File

@ -0,0 +1,97 @@
package com.tencent.mobileqq.troop.api;
import com.tencent.mobileqq.qroute.QRouteApi;
public interface ITroopHandlerNameApi extends QRouteApi {
String getTroopAddFriendHandlerName();
String getTroopAioNotifyHandlerName();
String getTroopAnnouncementHandlerName();
String getTroopAnonymousHandlerName();
String getTroopAppHandlerName();
String getTroopAssociationHandlerName();
String getTroopAvatarHandlerName();
String getTroopBatchInfoHandlerName();
String getTroopClockInHandlerName();
String getTroopCommonlyUsedHandlerName();
String getTroopConfigHandlerName();
String getTroopEssenceHandlerName();
String getTroopFansHandlerName();
String getTroopFeeHandlerName();
String getTroopGagHandlerName();
String getTroopGameHandlerName();
String getTroopHomeworkHandlerName();
String getTroopHonorHandlerName();
String getTroopInfoExtHandlerName();
String getTroopInfoHandlerName();
String getTroopListHandlerName();
String getTroopLuckyCharacterHandlerName();
String getTroopManagerBizHandlerName();
String getTroopMemberCardHandlerName();
String getTroopMemberInfoHandlerName();
String getTroopMemberLevelHandlerName();
String getTroopMemberListHandlerName();
String getTroopMemberMngHandlerName();
String getTroopMessageHandlerName();
String getTroopMngHandlerName();
String getTroopModifyHandlerName();
String getTroopNavigateMessageHandlerName();
String getTroopNotificationHandlerName();
String getTroopOnlineMemberHandlerName();
String getTroopOnlinePushHandlerName();
String getTroopPhotoHandlerName();
String getTroopPushHandlerName();
String getTroopRecommendHandlerName();
String getTroopRedDotHandlerName();
String getTroopRoamSettingHandlerName();
String getTroopRobotHandlerName();
String getTroopSettingHandlerName();
String getTroopShowExternalHandlerName();
String getTroopSurveyHandlerName();
String getTroopTokenHandlerName();
String getTroopTrpcHandlerName();
}

View File

@ -0,0 +1,109 @@
package tencent.im.oidb.cmd0x787;
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.PBRepeatMessageField;
import com.tencent.mobileqq.pb.PBUInt32Field;
import com.tencent.mobileqq.pb.PBUInt64Field;
public class oidb_0x787 {
public static final class RspBody extends MessageMicro<RspBody> {
static final MessageMicro.FieldMap __fieldMap__;
public final PBBytesField bytes_admin_name;
public final PBBytesField bytes_owner_name;
public final PBRepeatMessageField<LevelName> rpt_msg_level_name_new;
public final PBUInt32Field uint32_level_name_seq;
public final PBUInt32Field uint32_office_mode;
public final PBUInt32Field uint32_seq;
public final PBUInt32Field uint32_user_show_flag_new;
public final PBUInt64Field uint64_group_code = PBField.initUInt64(0);
public final PBRepeatMessageField<MemberLevelInfo> rpt_msg_member_level_info = PBField.initRepeatMessage(MemberLevelInfo.class);
public final PBRepeatMessageField<LevelName> rpt_msg_level_name = PBField.initRepeatMessage(LevelName.class);
public final PBUInt64Field uint64_end_uin = PBField.initUInt64(0);
public final PBUInt64Field uint64_data_time = PBField.initUInt64(0);
public final PBUInt32Field uint32_user_show_flag = PBField.initUInt32(0);
public final PBUInt32Field uint32_sys_show_flag = PBField.initUInt32(0);
public final PBUInt32Field uint32_time_to_update = PBField.initUInt32(0);
static {
ByteStringMicro byteStringMicro = ByteStringMicro.EMPTY;
__fieldMap__ = MessageMicro.initFieldMap(new int[]{8, 18, 26, 32, 40, 48, 56, 64, 74, 82, 88, 96, 104, 112, 122}, new String[]{"uint64_group_code", "rpt_msg_member_level_info", "rpt_msg_level_name", "uint64_end_uin", "uint64_data_time", "uint32_user_show_flag", "uint32_sys_show_flag", "uint32_time_to_update", "bytes_owner_name", "bytes_admin_name", "uint32_seq", "uint32_office_mode", "uint32_level_name_seq", "uint32_user_show_flag_new", "rpt_msg_level_name_new"}, new Object[]{0L, null, null, 0L, 0L, 0, 0, 0, byteStringMicro, byteStringMicro, 0, 0, 0, 0, null}, RspBody.class);
}
public RspBody() {
ByteStringMicro byteStringMicro = ByteStringMicro.EMPTY;
this.bytes_owner_name = PBField.initBytes(byteStringMicro);
this.bytes_admin_name = PBField.initBytes(byteStringMicro);
this.uint32_seq = PBField.initUInt32(0);
this.uint32_office_mode = PBField.initUInt32(0);
this.uint32_level_name_seq = PBField.initUInt32(0);
this.uint32_user_show_flag_new = PBField.initUInt32(0);
this.rpt_msg_level_name_new = PBField.initRepeatMessage(LevelName.class);
}
}
public static final class LevelName extends MessageMicro<LevelName> {
static final MessageMicro.FieldMap __fieldMap__ = MessageMicro.initFieldMap(new int[]{8, 18}, new String[]{"uint32_level", "str_name"}, new Object[]{0, ByteStringMicro.EMPTY}, LevelName.class);
public final PBUInt32Field uint32_level = PBField.initUInt32(0);
public final PBBytesField str_name = PBField.initBytes(ByteStringMicro.EMPTY);
}
public static final class MemberLevelInfo extends MessageMicro<MemberLevelInfo> {
static final MessageMicro.FieldMap __fieldMap__;
public final PBBytesField bytes_email;
public final PBBytesField bytes_group_honor;
public final PBBytesField bytes_job;
public final PBBytesField bytes_msg_need_field;
public final PBBytesField bytes_nick_name;
public final PBBytesField bytes_phone;
public final PBBytesField bytes_remark;
public final PBBytesField bytes_special_title;
public final PBBytesField str_name;
public final PBUInt32Field uint32_cmduin_flagex3_grocery;
public final PBUInt32Field uint32_gender;
public final PBUInt32Field uint32_glamour_level;
public final PBUInt32Field uint32_global_group_level;
public final PBUInt32Field uint32_global_group_point;
public final PBUInt32Field uint32_membership;
public final PBUInt32Field uint32_rich_card_name_ver;
public final PBUInt32Field uint32_ringtone_id;
public final PBUInt32Field uint32_special_title_expire_time;
public final PBUInt32Field uint32_title_id;
public final PBUInt32Field uint32_torchbearer_flag;
public final PBUInt64Field uint64_uin = PBField.initUInt64(0);
public final PBUInt32Field uint32_point = PBField.initUInt32(0);
public final PBUInt32Field uint32_active_day = PBField.initUInt32(0);
public final PBUInt32Field uint32_level = PBField.initUInt32(0);
static {
ByteStringMicro byteStringMicro = ByteStringMicro.EMPTY;
__fieldMap__ = MessageMicro.initFieldMap(new int[]{8, 16, 24, 32, 42, 50, 58, 64, 74, 82, 90, 96, 106, 112, 120, 128, 136, 144, 152, 160, 170, 176, 186, 192}, new String[]{"uint64_uin", "uint32_point", "uint32_active_day", "uint32_level", "str_name", "bytes_nick_name", "bytes_special_title", "uint32_special_title_expire_time", "bytes_phone", "bytes_email", "bytes_remark", "uint32_gender", "bytes_job", "uint32_glamour_level", "uint32_torchbearer_flag", "uint32_global_group_level", "uint32_title_id", "uint32_global_group_point", "uint32_rich_card_name_ver", "uint32_ringtone_id", "bytes_group_honor", "uint32_membership", "bytes_msg_need_field", "uint32_cmduin_flagex3_grocery"}, new Object[]{0L, 0, 0, 0, byteStringMicro, byteStringMicro, byteStringMicro, 0, byteStringMicro, byteStringMicro, byteStringMicro, 0, byteStringMicro, 0, 0, 0, 0, 0, 0, 0, byteStringMicro, 0, byteStringMicro, 0}, MemberLevelInfo.class);
}
public MemberLevelInfo() {
ByteStringMicro byteStringMicro = ByteStringMicro.EMPTY;
this.str_name = PBField.initBytes(byteStringMicro);
this.bytes_nick_name = PBField.initBytes(byteStringMicro);
this.bytes_special_title = PBField.initBytes(byteStringMicro);
this.uint32_special_title_expire_time = PBField.initUInt32(0);
this.bytes_phone = PBField.initBytes(byteStringMicro);
this.bytes_email = PBField.initBytes(byteStringMicro);
this.bytes_remark = PBField.initBytes(byteStringMicro);
this.uint32_gender = PBField.initUInt32(0);
this.bytes_job = PBField.initBytes(byteStringMicro);
this.uint32_glamour_level = PBField.initUInt32(0);
this.uint32_torchbearer_flag = PBField.initUInt32(0);
this.uint32_global_group_level = PBField.initUInt32(0);
this.uint32_title_id = PBField.initUInt32(0);
this.uint32_global_group_point = PBField.initUInt32(0);
this.uint32_rich_card_name_ver = PBField.initUInt32(0);
this.uint32_ringtone_id = PBField.initUInt32(0);
this.bytes_group_honor = PBField.initBytes(byteStringMicro);
this.uint32_membership = PBField.initUInt32(0);
this.bytes_msg_need_field = PBField.initBytes(byteStringMicro);
this.uint32_cmduin_flagex3_grocery = PBField.initUInt32(0);
}
}
}

View File

@ -0,0 +1,269 @@
package tencent.im.oidb.cmd0x88d;
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.PBInt64Field;
import com.tencent.mobileqq.pb.PBRepeatField;
import com.tencent.mobileqq.pb.PBRepeatMessageField;
import com.tencent.mobileqq.pb.PBUInt32Field;
import com.tencent.mobileqq.pb.PBUInt64Field;
public class oidb_0x88d {
public static class RspBody extends MessageMicro<RspBody> {
static final MessageMicro.FieldMap __fieldMap__ = MessageMicro.initFieldMap(new int[]{10, 18}, new String[]{"stzrspgroupinfo", "str_errorinfo"}, new Object[]{null, ByteStringMicro.EMPTY}, RspBody.class);
public final PBRepeatMessageField<RspGroupInfo> stzrspgroupinfo = PBField.initRepeatMessage(RspGroupInfo.class);
public final PBBytesField str_errorinfo = PBField.initBytes(ByteStringMicro.EMPTY);
}
public static class RspGroupInfo extends MessageMicro<RspGroupInfo> {
static final MessageMicro.FieldMap __fieldMap__ = MessageMicro.initFieldMap(new int[]{8, 16, 26}, new String[]{"uint64_group_code", "uint32_result", "stgroupinfo"}, new Object[]{0L, 0, null}, RspGroupInfo.class);
public final PBUInt64Field uint64_group_code = PBField.initUInt64(0);
public final PBUInt32Field uint32_result = PBField.initUInt32(0);
public GroupInfo stgroupinfo = new GroupInfo();
}
public static final class GroupGeoInfo extends MessageMicro<GroupGeoInfo> {
static final MessageMicro.FieldMap __fieldMap__ = MessageMicro.initFieldMap(new int[]{8, 16, 24, 32, 40, 50, 56}, new String[]{"uint64_owneruin", "uint32_settime", "uint32_cityid", "int64_longitude", "int64_latitude", "bytes_geocontent", "uint64_poi_id"}, new Object[]{0L, 0, 0, 0L, 0L, ByteStringMicro.EMPTY, 0L}, GroupGeoInfo.class);
public final PBUInt64Field uint64_owneruin = PBField.initUInt64(0);
public final PBUInt32Field uint32_settime = PBField.initUInt32(0);
public final PBUInt32Field uint32_cityid = PBField.initUInt32(0);
public final PBInt64Field int64_longitude = PBField.initInt64(0);
public final PBInt64Field int64_latitude = PBField.initInt64(0);
public final PBBytesField bytes_geocontent = PBField.initBytes(ByteStringMicro.EMPTY);
public final PBUInt64Field uint64_poi_id = PBField.initUInt64(0);
}
public static final class GroupHeadPortrait extends MessageMicro<GroupHeadPortrait> {
static final MessageMicro.FieldMap __fieldMap__ = MessageMicro.initFieldMap(new int[]{8, 18, 24, 32, 42}, new String[]{"uint32_pic_cnt", "rpt_msg_info", "uint32_default_id", "uint32_verifying_pic_cnt", "rpt_msg_verifyingpic_info"}, new Object[]{0, null, 0, 0, null}, GroupHeadPortrait.class);
public final PBUInt32Field uint32_pic_cnt = PBField.initUInt32(0);
// public final PBRepeatMessageField<oidb_0x88d$GroupHeadPortraitInfo> rpt_msg_info = PBField.initRepeatMessage(oidb_0x88d$GroupHeadPortraitInfo.class);
public final PBUInt32Field uint32_default_id = PBField.initUInt32(0);
public final PBUInt32Field uint32_verifying_pic_cnt = PBField.initUInt32(0);
//public final PBRepeatMessageField<oidb_0x88d$GroupHeadPortraitInfo> rpt_msg_verifyingpic_info = PBField.initRepeatMessage(oidb_0x88d$GroupHeadPortraitInfo.class);
}
public static final class GroupInfo extends MessageMicro<GroupInfo> {
//static final MessageMicro.FieldMap __fieldMap__;
public final PBBytesField bytes_cmduin_group_remark_name;
public final PBBytesField bytes_group_school_info;
public final PBBytesField bytes_join_group_auth;
public GroupGeoInfo group_geo_info;
public GroupHeadPortrait msg_head_portrait;
//public final PBRepeatMessageField<oidb_0x88d$TagRecord> rpt_tag_record;
//public oidb_0x88d$GroupCardPrefix st_group_card_prefix;
//public oidb_0x88d$GroupExInfoOnly st_group_ex_info;
// public oidb_0xef0$GroupInfoExt st_group_info_ext;
public final PBBytesField string_certification_text;
public final PBBytesField string_group_aio_skin_url;
public final PBBytesField string_group_answer;
public final PBBytesField string_group_board_skin_url;
public final PBBytesField string_group_class_text;
public final PBBytesField string_group_cover_skin_url;
public final PBBytesField string_group_finger_memo;
public final PBBytesField string_group_memo;
public final PBBytesField string_group_name;
public final PBBytesField string_group_question;
public final PBBytesField string_group_rich_finger_memo;
public final PBBytesField string_long_group_name;
public final PBBytesField string_poid_info;
public final PBUInt32Field uint32_active_member_num;
public final PBUInt32Field uint32_app_privilege_flag;
public final PBUInt32Field uint32_appeal_deadline;
public final PBUInt32Field uint32_auto_agree_join_group_user_num_for_conf_group;
public final PBUInt32Field uint32_auto_agree_join_group_user_num_for_normal_group;
public final PBUInt32Field uint32_certification_type;
public final PBUInt32Field uint32_cmduin_flag_ex;
public final PBUInt32Field uint32_cmduin_flag_ex2;
public final PBUInt32Field uint32_cmduin_flag_ex3_grocery;
public final PBUInt32Field uint32_cmduin_history_msg_seq;
public final PBUInt32Field uint32_cmduin_join_msg_seq;
public final PBUInt32Field uint32_cmduin_join_real_msg_seq;
public final PBUInt32Field uint32_cmduin_join_time;
public final PBUInt32Field uint32_cmduin_last_msg_time;
public final PBUInt32Field uint32_cmduin_msg_seq;
public final PBUInt32Field uint32_cmduin_new_mobile_flag;
public final PBUInt32Field uint32_cmduin_privilege;
public final PBUInt32Field uint32_cmduin_read_msg_seq;
public final PBUInt32Field uint32_cmduin_ringtone_id;
public final PBUInt32Field uint32_cmduin_uin_flag;
public final PBUInt32Field uint32_conf_max_msg_seq;
public final PBUInt32Field uint32_conf_to_group_time;
public final PBUInt32Field uint32_create_source_flag;
public final PBUInt32Field uint32_group_admin_max_num;
public final PBUInt32Field uint32_group_aio_skin_timestamp;
public final PBRepeatField<Integer> uint32_group_alliance_code;
public final PBUInt32Field uint32_group_board_skin_timestamp;
public final PBUInt32Field uint32_group_cover_skin_timestamp;
public final PBUInt32Field uint32_group_cur_msg_seq;
public final PBUInt32Field uint32_group_extra_adm_num;
public final PBUInt32Field uint32_group_flagext3;
public final PBUInt32Field uint32_group_flagext4;
public final PBUInt32Field uint32_group_freeze_reason;
public final PBUInt32Field uint32_group_grade;
public final PBUInt32Field uint32_group_info_ext_seq;
public final PBUInt32Field uint32_group_last_msg_time;
public final PBUInt32Field uint32_group_open_appid;
public final PBUInt32Field uint32_group_sec_level;
public final PBUInt32Field uint32_group_sec_level_info;
public final PBUInt32Field uint32_group_type_flag;
public final PBUInt32Field uint32_group_visitor_cur_num;
public final PBUInt32Field uint32_group_visitor_max_num;
public final PBUInt32Field uint32_head_portrait_seq;
public final PBUInt32Field uint32_hl_guild_appid;
public final PBUInt32Field uint32_hl_guild_orgid;
public final PBUInt32Field uint32_hl_guild_sub_type;
public final PBUInt32Field uint32_important_msg_latest_seq;
public final PBUInt32Field uint32_is_allow_conf_group_member_at_all;
public final PBUInt32Field uint32_is_allow_conf_group_member_modify_group_name;
public final PBUInt32Field uint32_is_allow_conf_group_member_nick;
public final PBUInt32Field uint32_is_allow_hl_guild_binary;
public final PBUInt32Field uint32_is_allow_recall_msg;
public final PBUInt32Field uint32_is_conf_group;
public final PBUInt32Field uint32_is_group_freeze;
public final PBUInt32Field uint32_is_modify_conf_group_face;
public final PBUInt32Field uint32_is_modify_conf_group_name;
public final PBUInt32Field uint32_level_name_seq;
public final PBUInt32Field uint32_member_list_change_seq;
public final PBUInt32Field uint32_membercard_seq;
public final PBUInt32Field uint32_msg_limit_frequency;
public final PBUInt32Field uint32_no_code_finger_open_flag;
public final PBUInt32Field uint32_no_finger_open_flag;
public final PBUInt32Field uint32_password_redbag_time;
public final PBUInt32Field uint32_shutup_timestamp_me;
public final PBUInt32Field uint32_team_seq;
public final PBUInt64Field uint64_alliance_id;
public final PBUInt64Field uint64_conf_uin;
public final PBUInt64Field uint64_group_uin;
public final PBUInt64Field uint64_history_msg_begin_time;
public final PBUInt64Field uint64_invite_no_auth_num_limit;
public final PBUInt64Field uint64_parent_id;
public final PBUInt64Field uint64_root_id;
public final PBUInt64Field uint64_shutup_timestamp;
public final PBUInt64Field uint64_subscription_uin;
public final PBUInt64Field uint64_group_owner = PBField.initUInt64(0);
public final PBUInt32Field uint32_group_create_time = PBField.initUInt32(0);
public final PBUInt32Field uint32_group_flag = PBField.initUInt32(0);
public final PBUInt32Field uint32_group_flag_ext = PBField.initUInt32(0);
public final PBUInt32Field uint32_group_member_max_num = PBField.initUInt32(0);
public final PBUInt32Field uint32_group_member_num = PBField.initUInt32(0);
public final PBUInt32Field uint32_group_option = PBField.initUInt32(0);
public final PBUInt32Field uint32_group_class_ext = PBField.initUInt32(0);
public final PBUInt32Field uint32_group_special_class = PBField.initUInt32(0);
public final PBUInt32Field uint32_group_level = PBField.initUInt32(0);
public final PBUInt32Field uint32_group_face = PBField.initUInt32(0);
public final PBUInt32Field uint32_group_default_page = PBField.initUInt32(0);
public final PBUInt32Field uint32_group_info_seq = PBField.initUInt32(0);
public final PBUInt32Field uint32_group_roaming_time = PBField.initUInt32(0);
static {
//ByteStringMicro byteStringMicro = ByteStringMicro.EMPTY;
//__fieldMap__ = MessageMicro.initFieldMap(
// new int[]{8, 16, 24, 32, 40, 48, 56, 64, 72, 80, 88, 96, 104, 112, 122, 130, 138, 146, 152, 160, 168, 176, 184, 194, 202, 208, 216, 224, 232, 240, 248, 258, 266, 272,
// FilterEnum.MIC_PTU_BAIXI, FilterEnum.MIC_PTU_YOUJIALI, 296, 304, 314, 322, MapItemKt.ITEM_AVATAR_MIN_WIDTH, 338, 344, g.CTRL_INDEX, 360, 368, 376, MsgConstant.KRMFILETHUMBSIZE384, QFSBottomDynamicGuideEvent.DYNAMIC_GUIDE_BUTTON_TYPE, 400, 408, 416, 424, 432, 440, TroopInfo.PAY_PRIVILEGE_ALL, 458, 464, e.CTRL_INDEX, 480, P2VGlobalConfig.WATER_MARKER_WIDTH, w.CTRL_INDEX, 504, 512, TVKPlayerWrapperMsg.PLAYER_INFO_CGI_REQUEST, 528, 536, 544, 552, PlayerResources.ViewId.GET_MORE_TOGGLE_AREA, PlayerResources.ViewId.EXTENDED_VIEW_BTN_NORMAL_BUTTON, PlayerResources.ViewId.CANVAS_VIDEO_TOTAL_TRAFFIC_TEXT, 584, d.CTRL_INDEX, 600, 608, 616, 624, 632, 640, 648, 656, LpReportInfoConfig.ACTION_VIDEO_EDITOR, 672, 680, 688, 696, 704, 714, 720, 728, b.CTRL_INDEX, 746, com.tencent.luggage.wxa.sa.e.N, 760, 768, 776, 784, l.CTRL_INDEX, 800, SharedExtProcessor.CONFIG_ID, 816, BusinessInfoCheckUpdateItem.UIAPPID_XINGQU_BULUO, 832, h.CTRL_INDEX, TVKCodecUtils.HD_WIDTH, 856, 864, 874, 882}, new String[]{
//
// "uint64_group_owner", "uint32_group_create_time", "uint32_group_flag", "uint32_group_flag_ext", "uint32_group_member_max_num", "uint32_group_member_num", "uint32_group_option", "uint32_group_class_ext", "uint32_group_special_class", "uint32_group_level", "uint32_group_face", "uint32_group_default_page", "uint32_group_info_seq", "uint32_group_roaming_time", "string_group_name", "string_group_memo", "string_group_finger_memo", "string_group_class_text", "uint32_group_alliance_code", "uint32_group_extra_adm_num", "uint64_group_uin", "uint32_group_cur_msg_seq", "uint32_group_last_msg_time", "string_group_question", "string_group_answer", "uint32_group_visitor_max_num", "uint32_group_visitor_cur_num", "uint32_level_name_seq", "uint32_group_admin_max_num", "uint32_group_aio_skin_timestamp", "uint32_group_board_skin_timestamp", "string_group_aio_skin_url", "string_group_board_skin_url", "uint32_group_cover_skin_timestamp", "string_group_cover_skin_url", "uint32_group_grade", "uint32_active_member_num", "uint32_certification_type", "string_certification_text", "string_group_rich_finger_memo", "rpt_tag_record", "group_geo_info", "uint32_head_portrait_seq", "msg_head_portrait", "uint64_shutup_timestamp", "uint32_shutup_timestamp_me", "uint32_create_source_flag", "uint32_cmduin_msg_seq", "uint32_cmduin_join_time", "uint32_cmduin_uin_flag", "uint32_cmduin_flag_ex", "uint32_cmduin_new_mobile_flag", "uint32_cmduin_read_msg_seq", "uint32_cmduin_last_msg_time", "uint32_group_type_flag", "uint32_app_privilege_flag", "st_group_ex_info", "uint32_group_sec_level", "uint32_group_sec_level_info", "uint32_cmduin_privilege", "string_poid_info", "uint32_cmduin_flag_ex2", "uint64_conf_uin", "uint32_conf_max_msg_seq", "uint32_conf_to_group_time", "uint32_password_redbag_time", "uint64_subscription_uin", "uint32_member_list_change_seq", "uint32_membercard_seq", "uint64_root_id", "uint64_parent_id", "uint32_team_seq", "uint64_history_msg_begin_time", "uint64_invite_no_auth_num_limit", "uint32_cmduin_history_msg_seq", "uint32_cmduin_join_msg_seq", "uint32_group_flagext3", "uint32_group_open_appid", "uint32_is_conf_group", "uint32_is_modify_conf_group_face", "uint32_is_modify_conf_group_name", "uint32_no_finger_open_flag", "uint32_no_code_finger_open_flag", "uint32_auto_agree_join_group_user_num_for_normal_group", "uint32_auto_agree_join_group_user_num_for_conf_group", "uint32_is_allow_conf_group_member_nick", "uint32_is_allow_conf_group_member_at_all", "uint32_is_allow_conf_group_member_modify_group_name", "string_long_group_name", "uint32_cmduin_join_real_msg_seq", "uint32_is_group_freeze", "uint32_msg_limit_frequency", "bytes_join_group_auth", "uint32_hl_guild_appid", "uint32_hl_guild_sub_type", "uint32_hl_guild_orgid", "uint32_is_allow_hl_guild_binary", "uint32_cmduin_ringtone_id", "uint32_group_flagext4", "uint32_group_freeze_reason", "uint32_is_allow_recall_msg", "uint32_important_msg_latest_seq", "bytes_group_school_info", "uint32_appeal_deadline", "st_group_card_prefix", "uint64_alliance_id", "uint32_cmduin_flag_ex3_grocery", "uint32_group_info_ext_seq", "st_group_info_ext", "bytes_cmduin_group_remark_name"}, new Object[]{0L, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, byteStringMicro, byteStringMicro, byteStringMicro, byteStringMicro, 0, 0, 0L, 0, 0, byteStringMicro, byteStringMicro, 0, 0, 0, 0, 0, 0, byteStringMicro, byteStringMicro, 0, byteStringMicro, 0, 0, 0, byteStringMicro, byteStringMicro, null, null, 0, null, 0L, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, null, 0, 0, 0, byteStringMicro, 0, 0L, 0, 0, 0, 0L, 0, 0, 0L, 0L, 0, 0L, 0L, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, byteStringMicro, 0, 0, 0, byteStringMicro, 0, 0, 0, 0, 0, 0, 0, 0, 0, byteStringMicro, 0, null, 0L, 0, 0, null, byteStringMicro}, oidb_0x88d$GroupInfo.class);
}
public GroupInfo() {
ByteStringMicro byteStringMicro = ByteStringMicro.EMPTY;
this.string_group_name = PBField.initBytes(byteStringMicro);
this.string_group_memo = PBField.initBytes(byteStringMicro);
this.string_group_finger_memo = PBField.initBytes(byteStringMicro);
this.string_group_class_text = PBField.initBytes(byteStringMicro);
this.uint32_group_alliance_code = PBField.initRepeat(PBUInt32Field.__repeatHelper__);
this.uint32_group_extra_adm_num = PBField.initUInt32(0);
this.uint64_group_uin = PBField.initUInt64(0L);
this.uint32_group_cur_msg_seq = PBField.initUInt32(0);
this.uint32_group_last_msg_time = PBField.initUInt32(0);
this.string_group_question = PBField.initBytes(byteStringMicro);
this.string_group_answer = PBField.initBytes(byteStringMicro);
this.uint32_group_visitor_max_num = PBField.initUInt32(0);
this.uint32_group_visitor_cur_num = PBField.initUInt32(0);
this.uint32_level_name_seq = PBField.initUInt32(0);
this.uint32_group_admin_max_num = PBField.initUInt32(0);
this.uint32_group_aio_skin_timestamp = PBField.initUInt32(0);
this.uint32_group_board_skin_timestamp = PBField.initUInt32(0);
this.string_group_aio_skin_url = PBField.initBytes(byteStringMicro);
this.string_group_board_skin_url = PBField.initBytes(byteStringMicro);
this.uint32_group_cover_skin_timestamp = PBField.initUInt32(0);
this.string_group_cover_skin_url = PBField.initBytes(byteStringMicro);
this.uint32_group_grade = PBField.initUInt32(0);
this.uint32_active_member_num = PBField.initUInt32(0);
this.uint32_certification_type = PBField.initUInt32(0);
this.string_certification_text = PBField.initBytes(byteStringMicro);
this.string_group_rich_finger_memo = PBField.initBytes(byteStringMicro);
// this.rpt_tag_record = PBField.initRepeatMessage(oidb_0x88d$TagRecord.class);
this.group_geo_info = new GroupGeoInfo();
this.uint32_head_portrait_seq = PBField.initUInt32(0);
this.msg_head_portrait = new GroupHeadPortrait();
this.uint64_shutup_timestamp = PBField.initUInt64(0L);
this.uint32_shutup_timestamp_me = PBField.initUInt32(0);
this.uint32_create_source_flag = PBField.initUInt32(0);
this.uint32_cmduin_msg_seq = PBField.initUInt32(0);
this.uint32_cmduin_join_time = PBField.initUInt32(0);
this.uint32_cmduin_uin_flag = PBField.initUInt32(0);
this.uint32_cmduin_flag_ex = PBField.initUInt32(0);
this.uint32_cmduin_new_mobile_flag = PBField.initUInt32(0);
this.uint32_cmduin_read_msg_seq = PBField.initUInt32(0);
this.uint32_cmduin_last_msg_time = PBField.initUInt32(0);
this.uint32_group_type_flag = PBField.initUInt32(0);
this.uint32_app_privilege_flag = PBField.initUInt32(0);
// this.st_group_ex_info = new oidb_0x88d$GroupExInfoOnly();
this.uint32_group_sec_level = PBField.initUInt32(0);
this.uint32_group_sec_level_info = PBField.initUInt32(0);
this.uint32_cmduin_privilege = PBField.initUInt32(0);
this.string_poid_info = PBField.initBytes(byteStringMicro);
this.uint32_cmduin_flag_ex2 = PBField.initUInt32(0);
this.uint64_conf_uin = PBField.initUInt64(0L);
this.uint32_conf_max_msg_seq = PBField.initUInt32(0);
this.uint32_conf_to_group_time = PBField.initUInt32(0);
this.uint32_password_redbag_time = PBField.initUInt32(0);
this.uint64_subscription_uin = PBField.initUInt64(0L);
this.uint32_member_list_change_seq = PBField.initUInt32(0);
this.uint32_membercard_seq = PBField.initUInt32(0);
this.uint64_root_id = PBField.initUInt64(0L);
this.uint64_parent_id = PBField.initUInt64(0L);
this.uint32_team_seq = PBField.initUInt32(0);
this.uint64_history_msg_begin_time = PBField.initUInt64(0L);
this.uint64_invite_no_auth_num_limit = PBField.initUInt64(0L);
this.uint32_cmduin_history_msg_seq = PBField.initUInt32(0);
this.uint32_cmduin_join_msg_seq = PBField.initUInt32(0);
this.uint32_group_flagext3 = PBField.initUInt32(0);
this.uint32_group_open_appid = PBField.initUInt32(0);
this.uint32_is_conf_group = PBField.initUInt32(0);
this.uint32_is_modify_conf_group_face = PBField.initUInt32(0);
this.uint32_is_modify_conf_group_name = PBField.initUInt32(0);
this.uint32_no_finger_open_flag = PBField.initUInt32(0);
this.uint32_no_code_finger_open_flag = PBField.initUInt32(0);
this.uint32_auto_agree_join_group_user_num_for_normal_group = PBField.initUInt32(0);
this.uint32_auto_agree_join_group_user_num_for_conf_group = PBField.initUInt32(0);
this.uint32_is_allow_conf_group_member_nick = PBField.initUInt32(0);
this.uint32_is_allow_conf_group_member_at_all = PBField.initUInt32(0);
this.uint32_is_allow_conf_group_member_modify_group_name = PBField.initUInt32(0);
this.string_long_group_name = PBField.initBytes(byteStringMicro);
this.uint32_cmduin_join_real_msg_seq = PBField.initUInt32(0);
this.uint32_is_group_freeze = PBField.initUInt32(0);
this.uint32_msg_limit_frequency = PBField.initUInt32(0);
this.bytes_join_group_auth = PBField.initBytes(byteStringMicro);
this.uint32_hl_guild_appid = PBField.initUInt32(0);
this.uint32_hl_guild_sub_type = PBField.initUInt32(0);
this.uint32_hl_guild_orgid = PBField.initUInt32(0);
this.uint32_is_allow_hl_guild_binary = PBField.initUInt32(0);
this.uint32_cmduin_ringtone_id = PBField.initUInt32(0);
this.uint32_group_flagext4 = PBField.initUInt32(0);
this.uint32_group_freeze_reason = PBField.initUInt32(0);
this.uint32_is_allow_recall_msg = PBField.initUInt32(0);
this.uint32_important_msg_latest_seq = PBField.initUInt32(0);
this.bytes_group_school_info = PBField.initBytes(byteStringMicro);
this.uint32_appeal_deadline = PBField.initUInt32(0);
// this.st_group_card_prefix = new oidb_0x88d$GroupCardPrefix();
this.uint64_alliance_id = PBField.initUInt64(0L);
this.uint32_cmduin_flag_ex3_grocery = PBField.initUInt32(0);
this.uint32_group_info_ext_seq = PBField.initUInt32(0);
// this.st_group_info_ext = new oidb_0xef0$GroupInfoExt();
this.bytes_cmduin_group_remark_name = PBField.initBytes(byteStringMicro);
}
}
}

View File

@ -138,12 +138,6 @@ char * __cdecl my_strstr(const char *lhs, const char *rhs) {
}
int fake_memcmp(const void* __lhs, const void* __rhs, size_t __n) {
//if (my_strstr((const char*) __rhs, "lsposed")) {
//return -1;
//}
//if (my_strstr((const char*) __rhs, "xposed")) {
// return -1;
//}
if (my_strstr((const char*) __rhs, "shamrock")) {
if (backup_memcmp(__lhs, __rhs, __n) == 0) {
// 底层广播判断
@ -151,13 +145,7 @@ int fake_memcmp(const void* __lhs, const void* __rhs, size_t __n) {
}
return -1;
}
if (my_strstr((const char*) __rhs, "riru")) {
return -1;
}
//if (my_strstr((const char*) __rhs, "zygisk")) {
// return -1;
//}
//if (my_strstr((const char*) __rhs, "magisk")) {
//if (my_strstr((const char*) __rhs, "riru") && my_strstr((const char*) __lhs, "riru")) {
// return -1;
//}
return backup_memcmp(__lhs, __rhs, __n);

View File

@ -121,6 +121,24 @@ internal abstract class BaseSvc {
app.sendToService(toServiceMsg)
}
protected suspend fun sendAW(toServiceMsg: ToServiceMsg, timeout: Long = 5000L): ByteArray? {
val seq = MsfCore.getNextSeq()
return withTimeoutOrNull<ByteArray?>(timeout) {
suspendCancellableCoroutine { continuation ->
GlobalScope.launch(Dispatchers.Default) {
DynamicReceiver.register(IPCRequest(toServiceMsg.serviceCmd, seq) {
val buffer = it.getByteArrayExtra("buffer")!!
continuation.resume(buffer)
})
toServiceMsg.addAttribute("shamrock_seq", seq)
send(toServiceMsg)
}
}
}.also {
if (it == null) DynamicReceiver.unregister(seq)
}?.copyOf()
}
protected fun sendExtra(cmd: String, builder: (Bundle) -> Unit) {
val toServiceMsg = createToServiceMsg(cmd)
builder(toServiceMsg.extraData)

View File

@ -2,7 +2,7 @@ package moe.fuqiuluo.qqinterface.servlet
import com.tencent.mobileqq.pb.ByteStringMicro
import moe.fuqiuluo.proto.protobufOf
import moe.fuqiuluo.qqinterface.servlet.entries.*
import moe.fuqiuluo.qqinterface.servlet.structures.*
import moe.fuqiuluo.qqinterface.servlet.transfile.RichProtoSvc
import moe.fuqiuluo.shamrock.helper.Level
import moe.fuqiuluo.shamrock.helper.LogCenter

View File

@ -2,7 +2,9 @@
package moe.fuqiuluo.qqinterface.servlet
import KQQ.RespBatchProcess
import androidx.core.text.HtmlCompat
import com.qq.jce.wup.UniPacket
import com.tencent.common.app.AppInterface
import com.tencent.mobileqq.app.BusinessHandlerFactory
import com.tencent.mobileqq.app.QQAppInterface
@ -12,6 +14,7 @@ import com.tencent.mobileqq.pb.ByteStringMicro
import com.tencent.mobileqq.troop.api.ITroopInfoService
import com.tencent.mobileqq.troop.api.ITroopMemberInfoService
import com.tencent.protofile.join_group_link.join_group_link
import com.tencent.qphone.base.remote.FromServiceMsg
import com.tencent.qphone.base.remote.ToServiceMsg
import com.tencent.qqnt.kernel.nativeinterface.MemberInfo
import com.tencent.qqnt.kernel.nativeinterface.MsgConstant
@ -49,8 +52,9 @@ import moe.fuqiuluo.proto.asUtf8String
import moe.fuqiuluo.proto.protobufOf
import moe.fuqiuluo.qqinterface.servlet.TicketSvc.getLongUin
import moe.fuqiuluo.qqinterface.servlet.TicketSvc.getUin
import moe.fuqiuluo.qqinterface.servlet.entries.GroupAtAllRemainInfo
import moe.fuqiuluo.qqinterface.servlet.entries.ProhibitedMemberInfo
import moe.fuqiuluo.qqinterface.servlet.structures.GroupAtAllRemainInfo
import moe.fuqiuluo.qqinterface.servlet.structures.NotJoinedGroupInfo
import moe.fuqiuluo.qqinterface.servlet.structures.ProhibitedMemberInfo
import moe.fuqiuluo.shamrock.helper.Level
import moe.fuqiuluo.shamrock.helper.LogCenter
import moe.fuqiuluo.shamrock.helper.MessageHelper
@ -75,6 +79,7 @@ import moe.fuqiuluo.shamrock.xposed.helper.AppRuntimeFetcher
import moe.fuqiuluo.shamrock.xposed.helper.NTServiceFetcher
import mqq.app.MobileQQ
import tencent.im.group.group_member_info
import tencent.im.oidb.cmd0x88d.oidb_0x88d
import tencent.im.oidb.cmd0x899.oidb_0x899
import tencent.im.oidb.cmd0x89a.oidb_0x89a
import tencent.im.oidb.cmd0x8a0.oidb_0x8a0
@ -87,10 +92,11 @@ 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$ReqSystemMsgNew` as ReqSystemMsgNew
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()
@ -188,6 +194,36 @@ internal object GroupSvc: BaseSvc() {
return Result.success(troopList)
}
suspend fun getNotJoinedGroupInfo(groupId: Long): Result<NotJoinedGroupInfo> {
return withTimeoutOrNull(5000) timeout@{
val toServiceMsg = createToServiceMsg("ProfileService.ReqBatchProcess")
toServiceMsg.extraData.putLong("troop_code", groupId)
toServiceMsg.extraData.putBoolean("is_admin", false)
toServiceMsg.extraData.putInt("from", 0)
val buffer = sendAW(toServiceMsg)
val uniPacket = UniPacket(true)
uniPacket.encodeName = "utf-8"
uniPacket.decode(buffer)
val respBatchProcess = uniPacket.getByClass("RespBatchProcess", RespBatchProcess())
val batchRespInfo = oidb_0x88d.RspBody().mergeFrom(oidb_sso.OIDBSSOPkg()
.mergeFrom(respBatchProcess.batch_response_list.first().buffer)
.bytes_bodybuffer.get().toByteArray()).stzrspgroupinfo.get().firstOrNull()
?: return@timeout Result.failure(Exception("获取群信息失败"))
val info = batchRespInfo.stgroupinfo
Result.success(NotJoinedGroupInfo(
groupId = batchRespInfo.uint64_group_code.get(),
maxMember = info.uint32_group_member_max_num.get(),
memberCount = info.uint32_group_member_num.get(),
groupName = info.string_group_name.get().toStringUtf8(),
groupDesc = info.string_group_finger_memo.get().toStringUtf8(),
owner = info.uint64_group_owner.get(),
createTime = info.uint32_group_create_time.get().toLong(),
groupFlag = info.uint32_group_flag.get(),
groupFlagExt = info.uint32_group_flag_ext.get()
))
} ?: Result.failure(Exception("获取群信息超时"))
}
suspend fun getGroupInfo(groupId: String, refresh: Boolean): Result<TroopInfo> {
val service = app
.getRuntimeService(ITroopInfoService::class.java, "all")
@ -655,7 +691,7 @@ internal object GroupSvc: BaseSvc() {
private suspend fun requestGroupInfo(dataService: ITroopInfoService, uin: Long): Result<TroopInfo> {
val strUin = uin.toString()
val info = withTimeoutOrNull(5000) {
val info = withTimeoutOrNull(1000) {
var troopInfo: TroopInfo?
do {
troopInfo = dataService.getTroopInfo(strUin)

View File

@ -1,17 +0,0 @@
package moe.fuqiuluo.qqinterface.servlet.entries
import kotlinx.serialization.SerialName
import kotlinx.serialization.Serializable
@Serializable
internal data class ProhibitedMemberInfo(
@SerialName("user_id") val memberUin: Long,
@SerialName("time") val shutuptimestap: Int
)
@Serializable
internal data class GroupAtAllRemainInfo(
@SerialName("can_at_all") val canAtAll: Boolean,
@SerialName("remain_at_all_count_for_group") val remainAtAllCountForGroup: Int,
@SerialName("remain_at_all_count_for_uin") val remainAtAllCountForUin: Int
)

View File

@ -1,4 +1,4 @@
package moe.fuqiuluo.qqinterface.servlet.entries
package moe.fuqiuluo.qqinterface.servlet.structures
import kotlinx.serialization.SerialName
import kotlinx.serialization.Serializable

View File

@ -0,0 +1,30 @@
package moe.fuqiuluo.qqinterface.servlet.structures
import kotlinx.serialization.SerialName
import kotlinx.serialization.Serializable
@Serializable
internal data class ProhibitedMemberInfo(
@SerialName("user_id") val memberUin: Long,
@SerialName("time") val shutuptimestap: Int
)
@Serializable
internal data class GroupAtAllRemainInfo(
@SerialName("can_at_all") val canAtAll: Boolean,
@SerialName("remain_at_all_count_for_group") val remainAtAllCountForGroup: Int,
@SerialName("remain_at_all_count_for_uin") val remainAtAllCountForUin: Int
)
@Serializable
internal data class NotJoinedGroupInfo(
@SerialName("group_id") val groupId: Long,
@SerialName("max_member_cnt") val maxMember: Int,
@SerialName("member_count") val memberCount: Int,
@SerialName("group_name") val groupName: String,
@SerialName("group_desc") val groupDesc: String,
@SerialName("owner") val owner: Long,
@SerialName("create_time") val createTime: Long,
@SerialName("group_flag") val groupFlag: Int,
@SerialName("group_flag_ext") val groupFlagExt: Int,
)

View File

@ -26,7 +26,7 @@ internal object ActionManager {
GetModelShowList, GetOnlineClients, GetStrangerInfo, IsBlackListUin, GetHttpCookies, GetFriendSystemMsg,
// GroupInfo
GetTroopList, GetTroopInfo, GetTroopList, GetTroopMemberInfo, GetTroopMemberList,
GetTroopList, GetTroopInfo, GetTroopList, GetTroopMemberInfo, GetTroopMemberList, GetNotJoinedGroupInfo,
// GroupActions
ModifyTroopName, LeaveTroop, KickTroopMember, BanTroopMember, SetGroupWholeBan, SetGroupAdmin,

View File

@ -0,0 +1,25 @@
package moe.fuqiuluo.shamrock.remote.action.handlers
import kotlinx.serialization.json.JsonElement
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 GetNotJoinedGroupInfo: IActionHandler() {
override suspend fun internalHandle(session: ActionSession): String {
val groupId = session.getString("group_id")
return invoke(groupId, session.echo)
}
suspend operator fun invoke(groupId: String, echo: JsonElement = EmptyJsonString): String {
GroupSvc.getNotJoinedGroupInfo(groupId = groupId.toLong()).onSuccess {
return ok(it, echo = echo)
}.exceptionOrNull()?.let {
return error(it.message ?: "无法获取群信息", echo = echo)
}
return logic("Unable to obtain group information", echo)
}
override fun path(): String = "get_not_joined_group_info"
}

View File

@ -14,6 +14,11 @@ import moe.fuqiuluo.shamrock.tools.fetchOrThrow
import moe.fuqiuluo.shamrock.tools.getOrPost
fun Routing.troopAction() {
getOrPost("/get_not_joined_group_info") {
val groupId = fetchOrThrow("group_id")
call.respondText(GetNotJoinedGroupInfo(groupId), ContentType.Application.Json)
}
getOrPost("/get_prohibited_member_list") {
val groupId = fetchOrThrow("group_id").toLong()
call.respondText(GetProhibitedMemberList(groupId), ContentType.Application.Json)