diff --git a/CHANGELOG.md b/CHANGELOG.md index 95b7347..b8fb22c 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,4 +1,13 @@ # DKWechatHelper ChangeLog +[v1.0.5](https://github.com/DKWechatHelper/DKWechatHelper/releases/tag/1.0.4) / 2020-09-29 +what's new +* 新增好友关系检测 +* 新增自动收取个人红包 +* 修复集赞助手自定义评论时可能会发生闪退的BUG +* 支持7.0.15 +* 更新越狱包7.0.15 +* 更新已注入助手的7.0.15未签名包 +* 更新越狱源安装包 [v1.0.4](https://github.com/DKWechatHelper/DKWechatHelper/releases/tag/1.0.4) / 2020-07-07 what's new * 新增集赞助手 diff --git a/IMG_0223.png b/IMG_0223.png index c438779..ac191a2 100644 Binary files a/IMG_0223.png and b/IMG_0223.png differ diff --git a/README.md b/README.md index c93dcfb..1ac21e5 100644 --- a/README.md +++ b/README.md @@ -2,6 +2,7 @@ 不止于抢红包,功能丰富的微信插件。本软件已成功运行在(iphone7-iphone11、iPad) 给个⭐️不迷路↗️ +[v1.0.5](https://github.com/DKWechatHelper/DKWechatHelper/releases/tag/1.0.5)适用微信7.0.14~7.0.15 [v1.0.4](https://github.com/DKWechatHelper/DKWechatHelper/releases/tag/1.0.4)适用微信7.0.14 [v1.0.3](https://github.com/DKWechatHelper/DKWechatHelper/releases/tag/1.0.3)适用微信7.0.13 [v1.0.2](https://github.com/DKWechatHelper/DKWechatHelper/releases/tag/1.0.2)适用微信7.0.11 @@ -26,6 +27,7 @@ * [x] 小游戏作弊(剪刀石头布和掷骰子) * [x] CallKit锁屏接视频语音 * [x] 集赞助手 +* [x] 好友关系检测 安装后在微信设置中点击“微信小助手” 更多请查看下图: @@ -41,6 +43,8 @@ * [7.0.11-*提取码: 2igg*](https://pan.baidu.com/s/1mU_mezsWhqL2-AY0PB-vVg) * [7.0.13-*提取码: nx4m*](https://pan.baidu.com/s/1rqB0pV4zMEB6Z3VJTsTa8Q) * [7.0.14](https://n802.com/file/24576815-452231690) +* [7.0.15](https://n802.com/file/24576815-463029595) + 将下载的微信放到'/dkhelper/dkhelper/TargetApp/'目录下该目录下有一个空白文件’put ipa or app here‘,和它放在同一文件夹下即可,修改项目BundleId及签名信息,选择真机设备运行即可 @@ -49,7 +53,8 @@ * [未签名版7.0.0](https://pan.baidu.com/s/1-zEUQRGn3H4bZVqHpyffzQ) * [未签名版7.0.11-*提取码: fe9f*](https://pan.baidu.com/s/1sOPCqnCPxSdIKq7TKuHK9g) * [未签名版7.0.13-*提取码: fhes*](https://pan.baidu.com/s/1DgSl5u0Gip3cNdqZmRFEWw) -* [未签名版7.0.14](https://n802.com/file/24576815-452232682) +* [未签名版7.0.14](https://n802.com/file/24576815-452232682) +* [未签名版7.0.15](https://n802.com/file/24576815-463034104) 注:推荐使用[ios-app-signer](https://github.com/DanTheMan827/ios-app-signer)签名,使用方法自行百度 3.普通用户: @@ -57,8 +62,7 @@ 下载后使用 [Cydia Impactor](http://www.cydiaimpactor.com/)安装 4.越狱用户: -[deb安装包地址 ](https://n802.com/file/24576815-452232684) -或添加源`https://dkjone.github.io/`下载 +添加源`https://dkjone.github.io/`下载 ### 请我喝杯☕️ diff --git a/dkhelper/dkhelper.xcodeproj/project.pbxproj b/dkhelper/dkhelper.xcodeproj/project.pbxproj index 2391474..cd99b32 100644 --- a/dkhelper/dkhelper.xcodeproj/project.pbxproj +++ b/dkhelper/dkhelper.xcodeproj/project.pbxproj @@ -7,6 +7,8 @@ objects = { /* Begin PBXBuildFile section */ + 1138B1C7251D9049008A6629 /* DKCleanFriendsController.h in Headers */ = {isa = PBXBuildFile; fileRef = 1138B1C5251D9049008A6629 /* DKCleanFriendsController.h */; }; + 1138B1C8251D9049008A6629 /* DKCleanFriendsController.m in Sources */ = {isa = PBXBuildFile; fileRef = 1138B1C6251D9049008A6629 /* DKCleanFriendsController.m */; }; 114CCC2F21F817D500A4646E /* MDConfig.plist in Resources */ = {isa = PBXBuildFile; fileRef = 114CCC2E21F817D500A4646E /* MDConfig.plist */; }; 114CCC3921F817D500A4646E /* libdkhelperDylib.dylib in CopyFiles */ = {isa = PBXBuildFile; fileRef = 114CCC3821F817D500A4646E /* libdkhelperDylib.dylib */; settings = {ATTRIBUTES = (CodeSignOnCopy, ); }; }; 114CCC3E21F817D500A4646E /* JavaScriptCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 114CCC3D21F817D500A4646E /* JavaScriptCore.framework */; }; @@ -49,6 +51,8 @@ 114CCC9D21F831EB00A4646E /* DKHelperSettingController.h in Headers */ = {isa = PBXBuildFile; fileRef = 114CCC9B21F831EA00A4646E /* DKHelperSettingController.h */; }; 114CCCA021F8323E00A4646E /* DKGroupFilterController.h in Headers */ = {isa = PBXBuildFile; fileRef = 114CCC9E21F8323D00A4646E /* DKGroupFilterController.h */; }; 114CCCA121F8323E00A4646E /* DKGroupFilterController.m in Sources */ = {isa = PBXBuildFile; fileRef = 114CCC9F21F8323D00A4646E /* DKGroupFilterController.m */; }; + 11D27C9E25208FC800AE6337 /* NSArray+Utils.h in Headers */ = {isa = PBXBuildFile; fileRef = 11D27C9C25208FC800AE6337 /* NSArray+Utils.h */; }; + 11D27C9F25208FC800AE6337 /* NSArray+Utils.m in Sources */ = {isa = PBXBuildFile; fileRef = 11D27C9D25208FC800AE6337 /* NSArray+Utils.m */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -75,12 +79,13 @@ /* End PBXCopyFilesBuildPhase section */ /* Begin PBXFileReference section */ + 1138B1C5251D9049008A6629 /* DKCleanFriendsController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = DKCleanFriendsController.h; sourceTree = ""; }; + 1138B1C6251D9049008A6629 /* DKCleanFriendsController.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = DKCleanFriendsController.m; sourceTree = ""; }; 114CCC2721F817D500A4646E /* dkhelper.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = dkhelper.app; sourceTree = BUILT_PRODUCTS_DIR; }; 114CCC2A21F817D500A4646E /* icon.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = icon.png; sourceTree = ""; }; 114CCC2C21F817D500A4646E /* quick-resign.sh */ = {isa = PBXFileReference; lastKnownFileType = text.script.sh; name = "quick-resign.sh"; path = "Scripts/quick-resign.sh"; sourceTree = ""; }; 114CCC2E21F817D500A4646E /* MDConfig.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; name = MDConfig.plist; path = Config/MDConfig.plist; sourceTree = ""; }; 114CCC3121F817D500A4646E /* put ipa or app here */ = {isa = PBXFileReference; lastKnownFileType = text; name = "put ipa or app here"; path = "TargetApp/put ipa or app here"; sourceTree = ""; }; - 114CCC3221F817D500A4646E /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; 114CCC3821F817D500A4646E /* libdkhelperDylib.dylib */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.dylib"; includeInIndex = 0; path = libdkhelperDylib.dylib; sourceTree = BUILT_PRODUCTS_DIR; }; 114CCC3D21F817D500A4646E /* JavaScriptCore.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = JavaScriptCore.framework; path = System/Library/Frameworks/JavaScriptCore.framework; sourceTree = SDKROOT; }; 114CCC3F21F817D500A4646E /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = System/Library/Frameworks/Foundation.framework; sourceTree = SDKROOT; }; @@ -125,6 +130,8 @@ 114CCC9B21F831EA00A4646E /* DKHelperSettingController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DKHelperSettingController.h; sourceTree = ""; }; 114CCC9E21F8323D00A4646E /* DKGroupFilterController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DKGroupFilterController.h; sourceTree = ""; }; 114CCC9F21F8323D00A4646E /* DKGroupFilterController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = DKGroupFilterController.m; sourceTree = ""; }; + 11D27C9C25208FC800AE6337 /* NSArray+Utils.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "NSArray+Utils.h"; sourceTree = ""; }; + 11D27C9D25208FC800AE6337 /* NSArray+Utils.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = "NSArray+Utils.m"; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -171,7 +178,6 @@ isa = PBXGroup; children = ( 114CCC2A21F817D500A4646E /* icon.png */, - 114CCC3221F817D500A4646E /* Info.plist */, 114CCC2B21F817D500A4646E /* Scripts */, 114CCC2D21F817D500A4646E /* Config */, 114CCC3021F817D500A4646E /* TargetApp */, @@ -224,6 +230,8 @@ 114CCC9A21F831EA00A4646E /* DKHelperSettingController.m */, 114CCC9E21F8323D00A4646E /* DKGroupFilterController.h */, 114CCC9F21F8323D00A4646E /* DKGroupFilterController.m */, + 1138B1C5251D9049008A6629 /* DKCleanFriendsController.h */, + 1138B1C6251D9049008A6629 /* DKCleanFriendsController.m */, 114CCC4421F817D500A4646E /* Logos */, 114CCC4821F817D500A4646E /* Config */, 114CCC5521F817D500A4646E /* Trace */, @@ -317,6 +325,8 @@ 114CCC9721F831D400A4646E /* DKHelperConfig.m */, 114CCC9221F831C200A4646E /* DKHelper.h */, 114CCC9321F831C200A4646E /* DKHelper.m */, + 11D27C9C25208FC800AE6337 /* NSArray+Utils.h */, + 11D27C9D25208FC800AE6337 /* NSArray+Utils.m */, ); path = MyUtils; sourceTree = ""; @@ -348,12 +358,14 @@ 114CCC9421F831C200A4646E /* DKHelper.h in Headers */, 114CCC9021F830D200A4646E /* WechatHeaders.h in Headers */, 114CCC9D21F831EB00A4646E /* DKHelperSettingController.h in Headers */, + 11D27C9E25208FC800AE6337 /* NSArray+Utils.h in Headers */, 114CCC8F21F830D200A4646E /* WCUIAlertView.h in Headers */, 114CCC7B21F817D500A4646E /* fishhook.h in Headers */, 114CCC6F21F817D500A4646E /* LLDBTools.h in Headers */, 114CCC4A21F817D500A4646E /* MDConfigManager.h in Headers */, 114CCC6921F817D500A4646E /* OCSelectorTrampolines.h in Headers */, 114CCC9121F830D200A4646E /* UiUtil.h in Headers */, + 1138B1C7251D9049008A6629 /* DKCleanFriendsController.h in Headers */, 114CCC6521F817D500A4646E /* OCMethodTrace.h in Headers */, ); runOnlyForDeploymentPostprocessing = 0; @@ -516,10 +528,12 @@ 114CCC5921F817D500A4646E /* a1a2-selectortramps-arm64.s in Sources */, 114CCC5721F817D500A4646E /* a1a2-selectortramps-arm.s in Sources */, 114CCC5D21F817D500A4646E /* a1a2-selectortramps-x86_64.s in Sources */, + 11D27C9F25208FC800AE6337 /* NSArray+Utils.m in Sources */, 114CCC6721F817D500A4646E /* OCMethodTrace.m in Sources */, 114CCC9921F831D400A4646E /* DKHelperConfig.m in Sources */, 114CCC4C21F817D500A4646E /* MDConfigManager.m in Sources */, 114CCC9C21F831EB00A4646E /* DKHelperSettingController.m in Sources */, + 1138B1C8251D9049008A6629 /* DKCleanFriendsController.m in Sources */, 114CCC7921F817D500A4646E /* fishhook.c in Sources */, 114CCC7621F817D500A4646E /* AntiAntiDebug.m in Sources */, 114CCC6B21F817D500A4646E /* OCSelectorTrampolines.mm in Sources */, @@ -790,11 +804,12 @@ DEVELOPMENT_TEAM = NL54V6A3P5; ENABLE_BITCODE = NO; INFOPLIST_FILE = dkhelper/Info.plist; + MARKETING_VERSION = 7.0.14; MONKEYDEV_ADD_SUBSTRATE = YES; MONKEYDEV_CLASS_DUMP = NO; MONKEYDEV_DEFAULT_BUNDLEID = YES; MONKEYDEV_INSERT_DYLIB = YES; - MONKEYDEV_RESTORE_SYMBOL = NO; + MONKEYDEV_RESTORE_SYMBOL = YES; MONKEYDEV_TARGET_APP = Optional; PODS_CONFIGURATION_BUILD_DIR = "$BUILD_DIR/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)"; PODS_ROOT = "${SRCROOT}/Pods"; @@ -811,11 +826,12 @@ DEVELOPMENT_TEAM = NL54V6A3P5; ENABLE_BITCODE = NO; INFOPLIST_FILE = dkhelper/Info.plist; + MARKETING_VERSION = 7.0.14; MONKEYDEV_ADD_SUBSTRATE = YES; MONKEYDEV_CLASS_DUMP = NO; MONKEYDEV_DEFAULT_BUNDLEID = YES; MONKEYDEV_INSERT_DYLIB = YES; - MONKEYDEV_RESTORE_SYMBOL = NO; + MONKEYDEV_RESTORE_SYMBOL = YES; MONKEYDEV_TARGET_APP = Optional; PODS_CONFIGURATION_BUILD_DIR = "$BUILD_DIR/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)"; PODS_ROOT = "${SRCROOT}/Pods"; diff --git a/dkhelper/dkhelper.xcodeproj/project.xcworkspace/xcuserdata/zhudekun.xcuserdatad/UserInterfaceState.xcuserstate b/dkhelper/dkhelper.xcodeproj/project.xcworkspace/xcuserdata/zhudekun.xcuserdatad/UserInterfaceState.xcuserstate index 93521c3..877bc26 100644 Binary files a/dkhelper/dkhelper.xcodeproj/project.xcworkspace/xcuserdata/zhudekun.xcuserdatad/UserInterfaceState.xcuserstate and b/dkhelper/dkhelper.xcodeproj/project.xcworkspace/xcuserdata/zhudekun.xcuserdatad/UserInterfaceState.xcuserstate differ diff --git a/dkhelper/dkhelper.xcodeproj/project.xcworkspace/xcuserdata/zhudekun.xcuserdatad/xcdebugger/Expressions.xcexplist b/dkhelper/dkhelper.xcodeproj/project.xcworkspace/xcuserdata/zhudekun.xcuserdatad/xcdebugger/Expressions.xcexplist new file mode 100644 index 0000000..991e630 --- /dev/null +++ b/dkhelper/dkhelper.xcodeproj/project.xcworkspace/xcuserdata/zhudekun.xcuserdatad/xcdebugger/Expressions.xcexplist @@ -0,0 +1,47 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/dkhelper/dkhelper/Config/MDConfig.plist b/dkhelper/dkhelper/Config/MDConfig.plist index ecfd8f8..df39fdd 100644 --- a/dkhelper/dkhelper/Config/MDConfig.plist +++ b/dkhelper/dkhelper/Config/MDConfig.plist @@ -130,28 +130,28 @@ USER_CLASS_LIST - ScanQRCodeLogicController1 + CContactMgr1 TraceMode 1 TraceFlag 1 - CMessageMgr + ContactSelectView1 TraceMode 1 TraceFlag 1 - PhotoViewController + CMessageMgr1 TraceMode 1 TraceFlag 1 - NewQRCodeScanner1 + CGroupMgr1 TraceFlag 1 diff --git a/dkhelper/dkhelper/Info.plist b/dkhelper/dkhelper/Info.plist index 6d2c74b..a8a4ff3 100644 --- a/dkhelper/dkhelper/Info.plist +++ b/dkhelper/dkhelper/Info.plist @@ -3,7 +3,7 @@ BuildMachineOSBuild - 18E226 + 19F101 CFBundleDevelopmentRegion zh_CN CFBundleDisplayName @@ -152,7 +152,7 @@ CFBundlePackageType APPL CFBundleShortVersionString - 7.0.14 + 7.0.15 CFBundleSignature ???? CFBundleSupportedPlatforms @@ -177,29 +177,30 @@ prefs wx703 weixinULAPI + wx7015 CFBundleVersion - 7.0.14.32 + 7.0.15.33 DTAppStoreToolsBuild - 11E608a + 11E707 DTCompiler com.apple.compilers.llvm.clang.1_0 DTPlatformBuild - 17B102 + 17F65 DTPlatformName iphoneos DTPlatformVersion - 13.2 + 13.5 DTSDKBuild - 17B102 + 17F65 DTSDKName - iphoneos13.2 + iphoneos13.5 DTXcode - 1130 + 1150 DTXcodeBuild - 11C29 + 11E608c FacebookAppID 290293790992170 FacebookAutoInitEnabled @@ -347,14 +348,6 @@ UIStatusBarStyle UIStatusBarStyleBlackOpaque - UISupportedDevices - - iPhone10,1 - iPhone10,4 - iPhone12,8 - iPhone9,1 - iPhone9,3 - UISupportedInterfaceOrientations UIInterfaceOrientationPortrait @@ -373,22 +366,22 @@ UIViewControllerBasedStatusBarAppearance WeChatBundleVersion - 7.0.14.32 + 7.0.15.33 WeChatFeatureIdentifier - release_appstore_7.0.14 + release_appstore_7.0.15 build_time - 2020-06-25 03:12:11 + 2020-08-03 23:07:27 by wx_ios_code_helper path - release_appstore_7.0.14_2020_6_16_19_17_20 + release_appstore_7.0.15_2020_7_30_23_1_0 rev - 485ff919d927a0ca67ac8c4b324f1de02ae0283b + 8a2d4b8b37a11de738ace1ec126991085c057907 tag - release_appstore_7.0.14 #28 + release_appstore_7.0.15 #29 uuid - 3a1d03886bdb350c870680e3d15aa7c7 + 2ccd1b78fb963cb1af6f0e1ec2864066 ver - 0x17000e20 + 0x17000f21 diff --git a/dkhelper/dkhelperDylib/DKCleanFriendsController.h b/dkhelper/dkhelperDylib/DKCleanFriendsController.h new file mode 100644 index 0000000..a951249 --- /dev/null +++ b/dkhelper/dkhelperDylib/DKCleanFriendsController.h @@ -0,0 +1,25 @@ +// DKCleanFriendsController.h +// dkhelperDylib +// Created by DKJone on 2020/9/25 +// Copyright © 2020 DKJone. All rights reserved. +// +// +// ██████╗ ██╗ ██╗ ██╗ ██████╗ ███╗ ██╗███████╗ +// ██╔══██╗██║ ██╔╝ ██║██╔═══██╗████╗ ██║██╔════╝ +// ██║ ██║█████╔╝ ██║██║ ██║██╔██╗ ██║█████╗ +// ██║ ██║██╔═██╗ ██ ██║██║ ██║██║╚██╗██║██╔══╝ +// ██████╔╝██║ ██╗╚█████╔╝╚██████╔╝██║ ╚████║███████╗ +// ╚═════╝ ╚═╝ ╚═╝ ╚════╝ ╚═════╝ ╚═╝ ╚═══╝╚══════╝ +// +// + +#import +#import "DKHelper.h" + +@interface DKCleanFriendsController : UIViewController +- (instancetype)initWithContactList:(NSArray *)contactList contactDesc:(NSString *)contactDesc; + +@end + + + diff --git a/dkhelper/dkhelperDylib/DKCleanFriendsController.m b/dkhelper/dkhelperDylib/DKCleanFriendsController.m new file mode 100644 index 0000000..627fc06 --- /dev/null +++ b/dkhelper/dkhelperDylib/DKCleanFriendsController.m @@ -0,0 +1,182 @@ +// DKCleanFriendsController.m +// dkhelperDylib +// Created by DKJone on 2020/9/25 +// Copyright © 2020 DKJone. All rights reserved. +// +// +// ██████╗ ██╗ ██╗ ██╗ ██████╗ ███╗ ██╗███████╗ +// ██╔══██╗██║ ██╔╝ ██║██╔═══██╗████╗ ██║██╔════╝ +// ██║ ██║█████╔╝ ██║██║ ██║██╔██╗ ██║█████╗ +// ██║ ██║██╔═██╗ ██ ██║██║ ██║██║╚██╗██║██╔══╝ +// ██████╔╝██║ ██╗╚█████╔╝╚██████╔╝██║ ╚████║███████╗ +// ╚═════╝ ╚═╝ ╚═╝ ╚════╝ ╚═════╝ ╚═╝ ╚═══╝╚══════╝ +// +// + +#import "DKCleanFriendsController.h" +#import +#import "MMUICommonUtil.h" +#import "DKHelperSettingController.h" +@interface DKCleanFriendsController(){ + MMUIViewController *helper; +} + +@property (strong, nonatomic) ContactSelectView *selectView; +@property (nonatomic,copy)NSString * contactDesc; +@property (strong, nonatomic) NSArray *contactList; +@end + +@implementation DKCleanFriendsController + +- (instancetype)initWithContactList:(NSArray *)contactList contactDesc:(NSString *)contactDesc{ + if (self = [super initWithNibName:nil bundle:nil]) { + _contactList = contactList; + _contactDesc = contactDesc; + helper = [[objc_getClass("MMUIViewController") alloc] init]; + } + return self; +} + +- (void)viewDidLoad { + [super viewDidLoad]; + self.view.backgroundColor = [DKHelper backgroundColor]; + [self initTitleArea]; + [self initSelectView]; +} + +- (void)viewWillAppear:(BOOL)animated { + [super viewWillAppear:animated]; + + for (CContact *contact in self.contactList) { + [self.selectView addSelect:contact]; + } + for (CContact *contact in DKHelper.shared.validFriends) { + [self.selectView removeSelect:contact]; + } + [self onSelectContact: nil]; +} +- (void)viewDidAppear:(BOOL)animated{ + [super viewDidAppear:animated]; + NSString *alertTitle = [NSString stringWithFormat:@"已帮您自动选择(%@)的好友",self.contactDesc]; + [DKHelper showAlertWithTitle:alertTitle + message:@"双向好友已自动设为不可编辑,您无法取消双向好友的选中状态,删除时也不会删除双向好友!" + btnTitle:@"我知道了" handler:^(UIButton *sender) {}]; +} + +- (void)initTitleArea { + self.navigationItem.leftBarButtonItem = [objc_getClass("MMUICommonUtil") getBarButtonWithTitle:@"取消" target:self action:@selector(onCancel:) style:0]; + self.navigationItem.rightBarButtonItem = [self rightBarButtonWithSelectCount:self.contactList.count]; + self.title = @"选择需要删除的好友"; + [self.navigationController.navigationBar setTitleTextAttributes:@{NSFontAttributeName: [UIFont boldSystemFontOfSize:18.0]}]; +} + +- (UIBarButtonItem *)rightBarButtonWithSelectCount:(unsigned long)selectCount { + + UIBarButtonItem *barButtonItem; + if (selectCount == 0) { + barButtonItem = [objc_getClass("MMUICommonUtil") getBarButtonWithTitle:@"确定" target:self action:@selector(onDone:) style:1]; + } else { + NSString *title = [NSString stringWithFormat:@"删除(%lu)", selectCount]; + barButtonItem = [objc_getClass("MMUICommonUtil") getBarButtonWithTitle:title target:self action:@selector(onDone:) style:4]; + } + return barButtonItem; +} + +- (void)onCancel:(UIBarButtonItem *)item { + [self.navigationController popViewControllerAnimated:true]; +} + +- (void)onDone:(UIBarButtonItem *)item { + NSArray *contactNameList = [[self.selectView.m_dicMultiSelect allKeys] copy]; + NSArray *contactList = [[DKHelper allFriends] _filter:^BOOL(CContact* obj) { + return [contactNameList containsObject: obj.m_nsUsrName]; + }]; + NSArray *nikNames = [contactList _map:^id(CContact* obj) { + return obj.m_nsRemark.length ? obj.m_nsRemark : obj.m_nsNickName; + }]; + WS(weakSelf) + [DKHelper showAlertWithTitle:@"删除以下好友" message:[nikNames componentsJoinedByString:@"\n"] btnTitle:@"确定" handler:^(UIButton *sender) { + [weakSelf deleteFriends:contactList]; + } btnTitle:@"我再想想" handler:^(UIButton *sender) {}]; +} + + +-(void)deleteFriends:(NSArray *)contactList { + CContactMgr * contactMgr =[[objc_getClass("MMServiceCenter") defaultCenter] getService:[objc_getClass("CContactMgr") class]]; + MMNewSessionMgr * sm =[[objc_getClass("MMServiceCenter") defaultCenter] getService:[objc_getClass("MMNewSessionMgr") class]]; + for (CContact *contact in contactList) { + [contactMgr deleteContact:contact listType:2]; + [contactMgr deleteContactLocal:contact listType:1]; + [contactMgr getContactList:1 contactType:0]; + unsigned int idx = [sm getSessionIndexOfUser:contact.m_nsUsrName]; + if (idx != (unsigned int)(NSNotFound)){ + [sm deleteSessionAtIndex:idx forceDelete:false]; + } + NSLog(@"删除成功"); + } + + NSInteger notFriendCount = DKHelper.shared.notFriends.count; + NSInteger invalidFriendCount = DKHelper.shared.invalidFriends.count; + if (notFriendCount != contactList.count && + invalidFriendCount != contactList.count && + notFriendCount + invalidFriendCount != contactList.count){ + [self.navigationController popViewControllerAnimated:true]; + dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(1 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{ + [DKHelper showAlertWithTitle:@"删除成功" message:@"有些人,\n就算分隔千里,\n就算不再联系,\n就算岁月流逝他们渐渐遗忘在我们记忆深处,\n就算不能陪我们走完人生旅途的那些人,\n他们不是过客。\n他们是\n我们最美好的曾经..." btnTitle:@"说的好!领赏去吧" handler:^(UIButton *sender) { + UIViewController *vc = [DKHelper.navigationContrioller topViewController]; + if ([vc isKindOfClass:DKHelperSettingController.class]){ + [(DKHelperSettingController *)vc payForMe]; + } + } btnTitle:@"跟鬼屎一样,不存在的!" handler:^(UIButton *sender) { }]; + }); + }else{ + [DKHelper showAlertWithTitle:@"删除成功" + message:[NSString stringWithFormat: @"已成功删除%d名好友",contactList.count] + btnTitle:@"确定" handler:^(UIButton *sender) { }]; + } +} + +- (void)initSelectView { + self.selectView = [[objc_getClass("ContactSelectView") alloc] initWithFrame:[DKHelper viewFrame] delegate:self]; + + NSMutableArray *dic = @{}.mutableCopy; + for (CContact *contact in DKHelper.shared.validFriends) { + [dic setValue:contact forKey:contact.m_nsUsrName]; + } + [self.selectView setM_dicExistContact:dic]; + + + self.selectView.m_uiGroupScene = 14; + self.selectView.m_bMultiSelect = YES; + [self.selectView initData:2]; + self.selectView.m_bShowHistoryGroup = false; + self.selectView.m_bShowRadarCreateRoom = false; + + [self.selectView initView]; + + [self.view addSubview:self.selectView]; +} + +#pragma mark - ContactSelectViewDelegate +- (void)onSelectContact:(CContact *)arg1 { + self.navigationItem.rightBarButtonItem = [self rightBarButtonWithSelectCount:[self getTotalSelectCount]]; +} + +- (unsigned long)getTotalSelectCount { + return (unsigned long)[self.selectView.m_dicMultiSelect count]; + +} + +- (UIViewController *)getViewController{ + return self; +} + +// 没法设置父类,设置消息转发已调用相关类方法 +- (MMUIViewController *) forwardingTargetForSelector:(SEL)aSelector { + if ([helper respondsToSelector:aSelector]) { + return helper; + } + return nil; +} + +@end diff --git a/dkhelper/dkhelperDylib/DKHelperSettingController.h b/dkhelper/dkhelperDylib/DKHelperSettingController.h index 38d56b0..7d339c0 100644 --- a/dkhelper/dkhelperDylib/DKHelperSettingController.h +++ b/dkhelper/dkhelperDylib/DKHelperSettingController.h @@ -10,7 +10,7 @@ NS_ASSUME_NONNULL_BEGIN @interface DKHelperSettingController : UIViewController - +- (void)payForMe; @end NS_ASSUME_NONNULL_END diff --git a/dkhelper/dkhelperDylib/DKHelperSettingController.m b/dkhelper/dkhelperDylib/DKHelperSettingController.m index 2fb9bf7..b1343a0 100644 --- a/dkhelper/dkhelperDylib/DKHelperSettingController.m +++ b/dkhelper/dkhelperDylib/DKHelperSettingController.m @@ -10,10 +10,12 @@ #import #import "DKHelper.h" #import "DKGroupFilterController.h" - +#import "DKCleanFriendsController.h" +#import @interface DKHelperSettingController (){ WCTableViewManager * manager; MMUIViewController *helper; + MMLoadingView *m_MMLoadingView; } @end @@ -24,8 +26,27 @@ if (self = [super init]) { helper = [[objc_getClass("MMUIViewController") alloc] init]; } + [NSNotificationCenter.defaultCenter addObserver:self selector:@selector(checkFriendsEnd:) name:@"checkFriendsEnd" object:nil]; + m_MMLoadingView = [[NSClassFromString(@"MMLoadingView") alloc] init]; return self; } +- (void)dealloc +{ + [NSNotificationCenter.defaultCenter removeObserver:self]; +} + +- (void)checkFriendsEnd:(NSNotification *)notify{ + + Boolean isSuccess = notify.userInfo[@"success"]; + if (isSuccess){ + [m_MMLoadingView stopLoadingAndShowOK]; + [self reloadTableData]; + CGPoint bottomOffset = CGPointMake(0, manager.tableView.contentSize.height - manager.tableView.bounds.size.height + manager.tableView.contentInset.bottom); + [manager.tableView setContentOffset:bottomOffset animated:YES]; + }else{ + [m_MMLoadingView stopLoadingAndShowError:@"检测失败"]; + } +} - (void)viewDidLoad { [super viewDidLoad]; @@ -35,6 +56,8 @@ [manager addTableViewToSuperView:self.view]; manager.tableView.frame = tableFrame; self.view.backgroundColor = [DKHelper backgroundColor]; + [m_MMLoadingView setLabelText:@"正在检测..."]; + [self.view addSubview:m_MMLoadingView]; [self reloadTableData]; self.navigationItem.leftBarButtonItem = [DKHelper leftNavigationItem]; @@ -66,6 +89,8 @@ //后台抢红包 WCTableViewCellManager *redEnvelopBackGroundCell = [DKHelper switchCellWithSel:@selector(autoEnveloBackGround:) target:self title:@"锁屏及后台抢红包" switchOn:[DKHelperConfig redEnvelopBackGround]]; [redEnvelopSection addCell:redEnvelopBackGroundCell]; + WCTableViewCellManager *personalRedEnvelopEnableCell = [DKHelper switchCellWithSel:@selector(personalRedEnvelopEnableChange:) target:self title:@"接收个人红包" switchOn:[DKHelperConfig personalRedEnvelopEnable]]; + [redEnvelopSection addCell:personalRedEnvelopEnableCell]; //延迟抢红包 NSString *delay = @"不延迟"; if ([DKHelperConfig redEnvelopDelay] > 0){ @@ -153,9 +178,37 @@ [commentsCell addUserInfoValue:@2 forKey:@"type"]; } + //MARK: 好友检测 + WCTableViewSectionManager *clearFriendsSection = [DKHelper sectionManage]; + clearFriendsSection.headerTitle = @"好友关系检测"; + [manager addSection:clearFriendsSection]; + DKHelperConfig.cleanFriendsEnable = DKHelper.shared.validFriends.count + DKHelper.shared.notFriends.count > 0; + WCTableViewCellManager *cleanFriendCell = [DKHelper switchCellWithSel:@selector(cleanFriends:) target:self title:@"检测好友关系" switchOn:[DKHelperConfig cleanFriendsEnable]]; + [clearFriendsSection addCell:cleanFriendCell]; + if (DKHelperConfig.cleanFriendsEnable){ + NSString * notFriendCount = [NSString stringWithFormat:@"共%lu人",(unsigned long)DKHelper.shared.notFriends.count]; + WCTableViewNormalCellManager *notFriendCountCell = [DKHelper cellWithSel:@selector(showSelectContactVC:) target:self title:@"已将你删除" rightValue:notFriendCount accessoryType:1]; + [notFriendCountCell addUserInfoValue:@0 forKey:@"type"]; + [clearFriendsSection addCell:notFriendCountCell]; + + NSString * invalidFriendsCount = [NSString stringWithFormat:@"共%lu人",(unsigned long)DKHelper.shared.invalidFriends.count]; + WCTableViewNormalCellManager *invalidFriendsCell = [DKHelper cellWithSel:@selector(showSelectContactVC:) target:self title:@"账号被封禁" rightValue:invalidFriendsCount accessoryType:1]; + [invalidFriendsCell addUserInfoValue:@1 forKey:@"type"]; + [clearFriendsSection addCell:invalidFriendsCell]; + } [manager.tableView reloadData]; + +} + +- (void)showSelectContactVC:(WCTableViewNormalCellManager *)sender{ + NSNumber * type = [sender getUserInfoValueForKey:@"type"]; + //1:被封账号 , 0:已将你删除 + NSArray *contactList = [type isEqual:@1] ? DKHelper.shared.invalidFriends : DKHelper.shared.notFriends; + NSString *contactDesc = [type isEqual:@1] ? @"账号被封" :@"已将你删除"; + DKCleanFriendsController *vc = [[DKCleanFriendsController alloc] initWithContactList:contactList contactDesc:contactDesc]; + [self.navigationController pushViewController:vc animated:true ]; } - (void)likeCommentEnable:(UISwitch *)sender{ @@ -168,6 +221,7 @@ handler:^(UIButton *sender) { }]; } [self reloadTableData]; + } @@ -176,6 +230,27 @@ [self reloadTableData]; } +- (void)personalRedEnvelopEnableChange:(UISwitch *)sender{ + DKHelperConfig.personalRedEnvelopEnable = sender.isOn; + [self reloadTableData]; +} + +- (void)cleanFriends:(UISwitch *)sender{ + if (!sender.isOn){ + DKHelperConfig.cleanFriendsEnable = false; + return; + } + __block UISwitch *s = sender; + WS(weakSelf) + [DKHelper showAlertWithTitle:@"重要提示" message:@"好友关系检测会新建一个包含您所有好友的群组,检测完成后会帮您自动删除,正常情况下您的好友不会收到任何消息。部分好友可能会收到进群邀请!(会自动帮您撤回该邀请信息)如果你想排除某些好友不做检测,请先将其添加到黑名单,待检测完成再将其从黑名单的移除!" btnTitle:@"开始检测" handler:^(UIButton *sender) { + DKHelperConfig.cleanFriendsEnable = true; + [weakSelf createCheckGroupe]; + } btnTitle:@"取消" handler:^(UIButton *sender) { + s.on = false; + }]; +} + + - (void)revokeIntercept:(UISwitch *)sender{ DKHelperConfig.preventRevoke = sender.isOn; } @@ -202,7 +277,7 @@ - (void)showLikeCommentInput:(WCTableViewNormalCellManager *)sender{ NSNumber * type = [sender getUserInfoValueForKey:@"type"]; NSString * str = @[[NSString stringWithFormat:@"%d",DKHelperConfig.likeCount.intValue], - [NSString stringWithFormat:@"%d",DKHelperConfig.comments.intValue], + [NSString stringWithFormat:@"%d",DKHelperConfig.commentCount.intValue], [NSString stringWithFormat:@"%@",DKHelperConfig.comments]][type.intValue]; NSString * title = @[@"输入点赞数",@"输入评论数",@"输入评论"][type.intValue]; NSString * msg = @[@"实际点赞数最大为您的好友个数", @@ -351,4 +426,37 @@ } return nil; } + +- (void)createCheckGroupe{ + [m_MMLoadingView startLoading]; + BOOL canCreateGroup = [objc_getClass("CGroupMgr") isSupportOpenIMGroup]; + if (!canCreateGroup) { + [DKHelper showAlertWithTitle:@"检测失败" message:@"您当前无法创建群聊!" btnTitle:@"确定" handler:^(UIButton *sender) { + NSLog(@"检测失败 - 无法创建群聊"); + }]; + }else{ + CGroupMgr *groupMgr = [[objc_getClass("MMServiceCenter") defaultCenter] getService:[objc_getClass("CGroupMgr") class]]; + DKHelper.shared.checkFriendsEnd = false; + NSMutableArray * groupMembers = @[].mutableCopy; + [DKHelper.allFriends enumerateObjectsUsingBlock:^(CContact *obj, NSUInteger idx, BOOL *stop) { + if ([obj.m_nsUsrName containsString:@"@openim"] ){ + + }else{ + GroupMember *gm = [[objc_getClass("GroupMember") alloc] init]; + gm.m_nsMemberName = obj.m_nsUsrName; + [groupMembers addObject:gm]; + } + }]; + [DKHelper.shared setCheckNotify]; + [groupMgr CreateGroup:@"DKWechatHelper-friendsCheck" withMemberList:groupMembers]; + + // 设置超时时间,超过10秒,不在检测 + dispatch_after(dispatch_time(DISPATCH_TIME_NOW , 10 * NSEC_PER_SEC), dispatch_get_main_queue(), ^{ + if (!DKHelper.shared.checkFriendsEnd) { + [DKHelper endCheck]; + } + }); + } +} + @end diff --git a/dkhelper/dkhelperDylib/Logos/dkhelperDylib.mm b/dkhelper/dkhelperDylib/Logos/dkhelperDylib.mm index e0bfe3b..2496a51 100644 --- a/dkhelper/dkhelperDylib/Logos/dkhelperDylib.mm +++ b/dkhelper/dkhelperDylib/Logos/dkhelperDylib.mm @@ -1,4 +1,15 @@ #line 1 "/Users/zhudekun/mycode/github/DKWechatHelper/dkhelper/dkhelperDylib/Logos/dkhelperDylib.xm" + + + + + + + + + + + #import #import "DKHelper.h" #import "DKHelperSettingController.h" @@ -24,10 +35,10 @@ #define _LOGOS_RETURN_RETAINED #endif -@class CContactMgr; @class MicroMessengerAppDelegate; @class WCTimelineMgr; @class UIViewController; @class WCRedEnvelopesLogicMgr; @class NewSettingViewController; @class CMessageMgr; @class VoipCXMgr; @class WCDeviceStepObject; @class MMServiceCenter; @class WCTableViewNormalCellManager; @class MMContext; @class CMessageWrap; @class MMTipsViewController; @class WCBizUtil; -static id _logos_meta_method$_ungrouped$MMServiceCenter$defaultCenter(_LOGOS_SELF_TYPE_NORMAL Class _LOGOS_SELF_CONST, SEL); static void (*_logos_orig$_ungrouped$MicroMessengerAppDelegate$applicationDidEnterBackground$)(_LOGOS_SELF_TYPE_NORMAL MicroMessengerAppDelegate* _LOGOS_SELF_CONST, SEL, UIApplication *); static void _logos_method$_ungrouped$MicroMessengerAppDelegate$applicationDidEnterBackground$(_LOGOS_SELF_TYPE_NORMAL MicroMessengerAppDelegate* _LOGOS_SELF_CONST, SEL, UIApplication *); static void (*_logos_orig$_ungrouped$MicroMessengerAppDelegate$applicationDidBecomeActive$)(_LOGOS_SELF_TYPE_NORMAL MicroMessengerAppDelegate* _LOGOS_SELF_CONST, SEL, UIApplication *); static void _logos_method$_ungrouped$MicroMessengerAppDelegate$applicationDidBecomeActive$(_LOGOS_SELF_TYPE_NORMAL MicroMessengerAppDelegate* _LOGOS_SELF_CONST, SEL, UIApplication *); static void (*_logos_orig$_ungrouped$NewSettingViewController$reloadTableData)(_LOGOS_SELF_TYPE_NORMAL NewSettingViewController* _LOGOS_SELF_CONST, SEL); static void _logos_method$_ungrouped$NewSettingViewController$reloadTableData(_LOGOS_SELF_TYPE_NORMAL NewSettingViewController* _LOGOS_SELF_CONST, SEL); static void _logos_method$_ungrouped$NewSettingViewController$setting(_LOGOS_SELF_TYPE_NORMAL NewSettingViewController* _LOGOS_SELF_CONST, SEL); static void (*_logos_orig$_ungrouped$CMessageMgr$AddEmoticonMsg$MsgWrap$)(_LOGOS_SELF_TYPE_NORMAL CMessageMgr* _LOGOS_SELF_CONST, SEL, NSString *, CMessageWrap *); static void _logos_method$_ungrouped$CMessageMgr$AddEmoticonMsg$MsgWrap$(_LOGOS_SELF_TYPE_NORMAL CMessageMgr* _LOGOS_SELF_CONST, SEL, NSString *, CMessageWrap *); static void (*_logos_orig$_ungrouped$CMessageMgr$onRevokeMsg$)(_LOGOS_SELF_TYPE_NORMAL CMessageMgr* _LOGOS_SELF_CONST, SEL, CMessageWrap *); static void _logos_method$_ungrouped$CMessageMgr$onRevokeMsg$(_LOGOS_SELF_TYPE_NORMAL CMessageMgr* _LOGOS_SELF_CONST, SEL, CMessageWrap *); static void (*_logos_orig$_ungrouped$CMessageMgr$AsyncOnAddMsg$MsgWrap$)(_LOGOS_SELF_TYPE_NORMAL CMessageMgr* _LOGOS_SELF_CONST, SEL, NSString *, CMessageWrap *); static void _logos_method$_ungrouped$CMessageMgr$AsyncOnAddMsg$MsgWrap$(_LOGOS_SELF_TYPE_NORMAL CMessageMgr* _LOGOS_SELF_CONST, SEL, NSString *, CMessageWrap *); static NSInteger (*_logos_orig$_ungrouped$WCDeviceStepObject$m7StepCount)(_LOGOS_SELF_TYPE_NORMAL WCDeviceStepObject* _LOGOS_SELF_CONST, SEL); static NSInteger _logos_method$_ungrouped$WCDeviceStepObject$m7StepCount(_LOGOS_SELF_TYPE_NORMAL WCDeviceStepObject* _LOGOS_SELF_CONST, SEL); static NSInteger (*_logos_orig$_ungrouped$WCDeviceStepObject$hkStepCount)(_LOGOS_SELF_TYPE_NORMAL WCDeviceStepObject* _LOGOS_SELF_CONST, SEL); static NSInteger _logos_method$_ungrouped$WCDeviceStepObject$hkStepCount(_LOGOS_SELF_TYPE_NORMAL WCDeviceStepObject* _LOGOS_SELF_CONST, SEL); static void (*_logos_orig$_ungrouped$WCRedEnvelopesLogicMgr$OnWCToHongbaoCommonResponse$Request$)(_LOGOS_SELF_TYPE_NORMAL WCRedEnvelopesLogicMgr* _LOGOS_SELF_CONST, SEL, HongBaoRes *, HongBaoReq *); static void _logos_method$_ungrouped$WCRedEnvelopesLogicMgr$OnWCToHongbaoCommonResponse$Request$(_LOGOS_SELF_TYPE_NORMAL WCRedEnvelopesLogicMgr* _LOGOS_SELF_CONST, SEL, HongBaoRes *, HongBaoReq *); static unsigned int _logos_method$_ungrouped$WCRedEnvelopesLogicMgr$calculateDelaySeconds(_LOGOS_SELF_TYPE_NORMAL WCRedEnvelopesLogicMgr* _LOGOS_SELF_CONST, SEL); static BOOL (*_logos_meta_orig$_ungrouped$VoipCXMgr$isCallkitAvailable)(_LOGOS_SELF_TYPE_NORMAL Class _LOGOS_SELF_CONST, SEL); static BOOL _logos_meta_method$_ungrouped$VoipCXMgr$isCallkitAvailable(_LOGOS_SELF_TYPE_NORMAL Class _LOGOS_SELF_CONST, SEL); static BOOL (*_logos_meta_orig$_ungrouped$VoipCXMgr$isDeviceCallkitAvailable)(_LOGOS_SELF_TYPE_NORMAL Class _LOGOS_SELF_CONST, SEL); static BOOL _logos_meta_method$_ungrouped$VoipCXMgr$isDeviceCallkitAvailable(_LOGOS_SELF_TYPE_NORMAL Class _LOGOS_SELF_CONST, SEL); static void (*_logos_orig$_ungrouped$UIViewController$viewWillAppear$)(_LOGOS_SELF_TYPE_NORMAL UIViewController* _LOGOS_SELF_CONST, SEL, BOOL); static void _logos_method$_ungrouped$UIViewController$viewWillAppear$(_LOGOS_SELF_TYPE_NORMAL UIViewController* _LOGOS_SELF_CONST, SEL, BOOL); static NSString * _logos_method$_ungrouped$MMTipsViewController$text(_LOGOS_SELF_TYPE_NORMAL MMTipsViewController* _LOGOS_SELF_CONST, SEL); static void (*_logos_orig$_ungrouped$WCTimelineMgr$modifyDataItem$notify$)(_LOGOS_SELF_TYPE_NORMAL WCTimelineMgr* _LOGOS_SELF_CONST, SEL, WCDataItem *, BOOL); static void _logos_method$_ungrouped$WCTimelineMgr$modifyDataItem$notify$(_LOGOS_SELF_TYPE_NORMAL WCTimelineMgr* _LOGOS_SELF_CONST, SEL, WCDataItem *, BOOL); -static __inline__ __attribute__((always_inline)) __attribute__((unused)) Class _logos_static_class_lookup$WCTableViewNormalCellManager(void) { static Class _klass; if(!_klass) { _klass = objc_getClass("WCTableViewNormalCellManager"); } return _klass; }static __inline__ __attribute__((always_inline)) __attribute__((unused)) Class _logos_static_class_lookup$MMServiceCenter(void) { static Class _klass; if(!_klass) { _klass = objc_getClass("MMServiceCenter"); } return _klass; }static __inline__ __attribute__((always_inline)) __attribute__((unused)) Class _logos_static_class_lookup$CContactMgr(void) { static Class _klass; if(!_klass) { _klass = objc_getClass("CContactMgr"); } return _klass; }static __inline__ __attribute__((always_inline)) __attribute__((unused)) Class _logos_static_class_lookup$WCBizUtil(void) { static Class _klass; if(!_klass) { _klass = objc_getClass("WCBizUtil"); } return _klass; }static __inline__ __attribute__((always_inline)) __attribute__((unused)) Class _logos_static_class_lookup$CMessageWrap(void) { static Class _klass; if(!_klass) { _klass = objc_getClass("CMessageWrap"); } return _klass; }static __inline__ __attribute__((always_inline)) __attribute__((unused)) Class _logos_static_class_lookup$MMContext(void) { static Class _klass; if(!_klass) { _klass = objc_getClass("MMContext"); } return _klass; } -#line 5 "/Users/zhudekun/mycode/github/DKWechatHelper/dkhelper/dkhelperDylib/Logos/dkhelperDylib.xm" +@class CContactMgr; @class CContact; @class MMServiceCenter; @class WCTimelineMgr; @class VoipCXMgr; @class MicroMessengerAppDelegate; @class CMessageWrap; @class CMessageMgr; @class NewSettingViewController; @class WCTableViewNormalCellManager; @class CGroupMgr; @class WCBizUtil; @class MMContext; @class MMTipsViewController; @class WCRedEnvelopesLogicMgr; @class WCDeviceStepObject; @class UIViewController; +static id _logos_meta_method$_ungrouped$MMServiceCenter$defaultCenter(_LOGOS_SELF_TYPE_NORMAL Class _LOGOS_SELF_CONST, SEL); static void (*_logos_orig$_ungrouped$MicroMessengerAppDelegate$applicationDidEnterBackground$)(_LOGOS_SELF_TYPE_NORMAL MicroMessengerAppDelegate* _LOGOS_SELF_CONST, SEL, UIApplication *); static void _logos_method$_ungrouped$MicroMessengerAppDelegate$applicationDidEnterBackground$(_LOGOS_SELF_TYPE_NORMAL MicroMessengerAppDelegate* _LOGOS_SELF_CONST, SEL, UIApplication *); static void (*_logos_orig$_ungrouped$MicroMessengerAppDelegate$applicationDidBecomeActive$)(_LOGOS_SELF_TYPE_NORMAL MicroMessengerAppDelegate* _LOGOS_SELF_CONST, SEL, UIApplication *); static void _logos_method$_ungrouped$MicroMessengerAppDelegate$applicationDidBecomeActive$(_LOGOS_SELF_TYPE_NORMAL MicroMessengerAppDelegate* _LOGOS_SELF_CONST, SEL, UIApplication *); static void (*_logos_orig$_ungrouped$NewSettingViewController$reloadTableData)(_LOGOS_SELF_TYPE_NORMAL NewSettingViewController* _LOGOS_SELF_CONST, SEL); static void _logos_method$_ungrouped$NewSettingViewController$reloadTableData(_LOGOS_SELF_TYPE_NORMAL NewSettingViewController* _LOGOS_SELF_CONST, SEL); static void _logos_method$_ungrouped$NewSettingViewController$setting(_LOGOS_SELF_TYPE_NORMAL NewSettingViewController* _LOGOS_SELF_CONST, SEL); static void (*_logos_orig$_ungrouped$CMessageMgr$AddEmoticonMsg$MsgWrap$)(_LOGOS_SELF_TYPE_NORMAL CMessageMgr* _LOGOS_SELF_CONST, SEL, NSString *, CMessageWrap *); static void _logos_method$_ungrouped$CMessageMgr$AddEmoticonMsg$MsgWrap$(_LOGOS_SELF_TYPE_NORMAL CMessageMgr* _LOGOS_SELF_CONST, SEL, NSString *, CMessageWrap *); static void (*_logos_orig$_ungrouped$CMessageMgr$onRevokeMsg$)(_LOGOS_SELF_TYPE_NORMAL CMessageMgr* _LOGOS_SELF_CONST, SEL, CMessageWrap *); static void _logos_method$_ungrouped$CMessageMgr$onRevokeMsg$(_LOGOS_SELF_TYPE_NORMAL CMessageMgr* _LOGOS_SELF_CONST, SEL, CMessageWrap *); static void (*_logos_orig$_ungrouped$CMessageMgr$AsyncOnAddMsg$MsgWrap$)(_LOGOS_SELF_TYPE_NORMAL CMessageMgr* _LOGOS_SELF_CONST, SEL, NSString *, CMessageWrap *); static void _logos_method$_ungrouped$CMessageMgr$AsyncOnAddMsg$MsgWrap$(_LOGOS_SELF_TYPE_NORMAL CMessageMgr* _LOGOS_SELF_CONST, SEL, NSString *, CMessageWrap *); static NSInteger (*_logos_orig$_ungrouped$WCDeviceStepObject$m7StepCount)(_LOGOS_SELF_TYPE_NORMAL WCDeviceStepObject* _LOGOS_SELF_CONST, SEL); static NSInteger _logos_method$_ungrouped$WCDeviceStepObject$m7StepCount(_LOGOS_SELF_TYPE_NORMAL WCDeviceStepObject* _LOGOS_SELF_CONST, SEL); static NSInteger (*_logos_orig$_ungrouped$WCDeviceStepObject$hkStepCount)(_LOGOS_SELF_TYPE_NORMAL WCDeviceStepObject* _LOGOS_SELF_CONST, SEL); static NSInteger _logos_method$_ungrouped$WCDeviceStepObject$hkStepCount(_LOGOS_SELF_TYPE_NORMAL WCDeviceStepObject* _LOGOS_SELF_CONST, SEL); static void (*_logos_orig$_ungrouped$WCRedEnvelopesLogicMgr$OnWCToHongbaoCommonResponse$Request$)(_LOGOS_SELF_TYPE_NORMAL WCRedEnvelopesLogicMgr* _LOGOS_SELF_CONST, SEL, HongBaoRes *, HongBaoReq *); static void _logos_method$_ungrouped$WCRedEnvelopesLogicMgr$OnWCToHongbaoCommonResponse$Request$(_LOGOS_SELF_TYPE_NORMAL WCRedEnvelopesLogicMgr* _LOGOS_SELF_CONST, SEL, HongBaoRes *, HongBaoReq *); static unsigned int _logos_method$_ungrouped$WCRedEnvelopesLogicMgr$calculateDelaySeconds(_LOGOS_SELF_TYPE_NORMAL WCRedEnvelopesLogicMgr* _LOGOS_SELF_CONST, SEL); static BOOL (*_logos_meta_orig$_ungrouped$VoipCXMgr$isCallkitAvailable)(_LOGOS_SELF_TYPE_NORMAL Class _LOGOS_SELF_CONST, SEL); static BOOL _logos_meta_method$_ungrouped$VoipCXMgr$isCallkitAvailable(_LOGOS_SELF_TYPE_NORMAL Class _LOGOS_SELF_CONST, SEL); static BOOL (*_logos_meta_orig$_ungrouped$VoipCXMgr$isDeviceCallkitAvailable)(_LOGOS_SELF_TYPE_NORMAL Class _LOGOS_SELF_CONST, SEL); static BOOL _logos_meta_method$_ungrouped$VoipCXMgr$isDeviceCallkitAvailable(_LOGOS_SELF_TYPE_NORMAL Class _LOGOS_SELF_CONST, SEL); static void (*_logos_orig$_ungrouped$UIViewController$viewWillAppear$)(_LOGOS_SELF_TYPE_NORMAL UIViewController* _LOGOS_SELF_CONST, SEL, BOOL); static void _logos_method$_ungrouped$UIViewController$viewWillAppear$(_LOGOS_SELF_TYPE_NORMAL UIViewController* _LOGOS_SELF_CONST, SEL, BOOL); static NSString * _logos_method$_ungrouped$MMTipsViewController$text(_LOGOS_SELF_TYPE_NORMAL MMTipsViewController* _LOGOS_SELF_CONST, SEL); static void (*_logos_orig$_ungrouped$WCTimelineMgr$modifyDataItem$notify$)(_LOGOS_SELF_TYPE_NORMAL WCTimelineMgr* _LOGOS_SELF_CONST, SEL, WCDataItem *, BOOL); static void _logos_method$_ungrouped$WCTimelineMgr$modifyDataItem$notify$(_LOGOS_SELF_TYPE_NORMAL WCTimelineMgr* _LOGOS_SELF_CONST, SEL, WCDataItem *, BOOL); static void (*_logos_orig$_ungrouped$CGroupMgr$addChatMemberNeedVerifyMsg$ContactList$)(_LOGOS_SELF_TYPE_NORMAL CGroupMgr* _LOGOS_SELF_CONST, SEL, id, id); static void _logos_method$_ungrouped$CGroupMgr$addChatMemberNeedVerifyMsg$ContactList$(_LOGOS_SELF_TYPE_NORMAL CGroupMgr* _LOGOS_SELF_CONST, SEL, id, id); static void (*_logos_orig$_ungrouped$CGroupMgr$addCreateMsg$ContactList$)(_LOGOS_SELF_TYPE_NORMAL CGroupMgr* _LOGOS_SELF_CONST, SEL, id, id); static void _logos_method$_ungrouped$CGroupMgr$addCreateMsg$ContactList$(_LOGOS_SELF_TYPE_NORMAL CGroupMgr* _LOGOS_SELF_CONST, SEL, id, id); static BOOL (*_logos_orig$_ungrouped$CContact$isEqual$)(_LOGOS_SELF_TYPE_NORMAL CContact* _LOGOS_SELF_CONST, SEL, CContact *); static BOOL _logos_method$_ungrouped$CContact$isEqual$(_LOGOS_SELF_TYPE_NORMAL CContact* _LOGOS_SELF_CONST, SEL, CContact *); +static __inline__ __attribute__((always_inline)) __attribute__((unused)) Class _logos_static_class_lookup$WCTableViewNormalCellManager(void) { static Class _klass; if(!_klass) { _klass = objc_getClass("WCTableViewNormalCellManager"); } return _klass; }static __inline__ __attribute__((always_inline)) __attribute__((unused)) Class _logos_static_class_lookup$MMServiceCenter(void) { static Class _klass; if(!_klass) { _klass = objc_getClass("MMServiceCenter"); } return _klass; }static __inline__ __attribute__((always_inline)) __attribute__((unused)) Class _logos_static_class_lookup$WCBizUtil(void) { static Class _klass; if(!_klass) { _klass = objc_getClass("WCBizUtil"); } return _klass; }static __inline__ __attribute__((always_inline)) __attribute__((unused)) Class _logos_static_class_lookup$MMContext(void) { static Class _klass; if(!_klass) { _klass = objc_getClass("MMContext"); } return _klass; }static __inline__ __attribute__((always_inline)) __attribute__((unused)) Class _logos_static_class_lookup$CContactMgr(void) { static Class _klass; if(!_klass) { _klass = objc_getClass("CContactMgr"); } return _klass; }static __inline__ __attribute__((always_inline)) __attribute__((unused)) Class _logos_static_class_lookup$CMessageWrap(void) { static Class _klass; if(!_klass) { _klass = objc_getClass("CMessageWrap"); } return _klass; } +#line 16 "/Users/zhudekun/mycode/github/DKWechatHelper/dkhelper/dkhelperDylib/Logos/dkhelperDylib.xm" static id _logos_meta_method$_ungrouped$MMServiceCenter$defaultCenter(_LOGOS_SELF_TYPE_NORMAL Class _LOGOS_SELF_CONST __unused self, SEL __unused _cmd){ @@ -157,6 +168,18 @@ static void _logos_method$_ungrouped$CMessageMgr$AsyncOnAddMsg$MsgWrap$(_LOGOS_S switch(wrap.m_uiMessageType) { case 49: { + CContactMgr *contactManager = [[_logos_static_class_lookup$MMServiceCenter() defaultCenter] getService:[_logos_static_class_lookup$CContactMgr() class]]; + CContact *selfContact = [contactManager getSelfContact]; + BOOL (^isSender)() = ^BOOL() { + return [wrap.m_nsFromUsr isEqualToString:selfContact.m_nsUsrName]; + }; + + if (!DKHelper.shared.checkFriendsEnd && isSender()){ + [self RevokeMsg:wrap.m_nsToUsr MsgWrap:wrap Counter:0]; + NSMutableArray *validArr = DKHelper.shared.validFriends.mutableCopy; + [validArr addObject:[contactManager getContactByName:wrap.m_nsToUsr]]; + DKHelper.shared.validFriends = validArr.copy; + } BOOL (^isRedEnvelopMessage)() = ^BOOL() { @@ -164,13 +187,6 @@ static void _logos_method$_ungrouped$CMessageMgr$AsyncOnAddMsg$MsgWrap$(_LOGOS_S }; if (isRedEnvelopMessage()) { - CContactMgr *contactManager = [[_logos_static_class_lookup$MMServiceCenter() defaultCenter] getService:[_logos_static_class_lookup$CContactMgr() class]]; - CContact *selfContact = [contactManager getSelfContact]; - - BOOL (^isSender)() = ^BOOL() { - return [wrap.m_nsFromUsr isEqualToString:selfContact.m_nsUsrName]; - }; - BOOL (^isGroupReceiver)() = ^BOOL() { return [wrap.m_nsFromUsr rangeOfString:@"@chatroom"].location != NSNotFound; @@ -212,8 +228,9 @@ static void _logos_method$_ungrouped$CMessageMgr$AsyncOnAddMsg$MsgWrap$(_LOGOS_S if (!DKHelperConfig.autoRedEnvelop) { return NO; } if (isGroupInBlackList()) { return NO; } if (isContaintKeyWords()) { return NO; } - - return isGroupReceiver() || (isGroupSender() && isReceiveSelfRedEnvelop()); + return isGroupReceiver() || + (isGroupSender() && isReceiveSelfRedEnvelop()) || + (!isGroupReceiver() && DKHelperConfig.personalRedEnvelopEnable); }; NSDictionary *(^parseNativeUrl)(NSString *nativeUrl) = ^(NSString *nativeUrl) { @@ -413,6 +430,40 @@ static void _logos_method$_ungrouped$WCTimelineMgr$modifyDataItem$notify$(_LOGOS + +static void _logos_method$_ungrouped$CGroupMgr$addChatMemberNeedVerifyMsg$ContactList$(_LOGOS_SELF_TYPE_NORMAL CGroupMgr* _LOGOS_SELF_CONST __unused self, SEL __unused _cmd, id arg1, id arg2){ + _logos_orig$_ungrouped$CGroupMgr$addChatMemberNeedVerifyMsg$ContactList$(self, _cmd, arg1,arg2); + if (!DKHelper.shared.checkFriendsEnd){ + DKHelper.shared.groupContact = arg1; + DKHelper.shared.notFriends = [arg2 allValues]; + dispatch_group_leave(DKHelper.shared.checkFriendGroup); + } +} + +static void _logos_method$_ungrouped$CGroupMgr$addCreateMsg$ContactList$(_LOGOS_SELF_TYPE_NORMAL CGroupMgr* _LOGOS_SELF_CONST __unused self, SEL __unused _cmd, id arg1, id arg2){ + _logos_orig$_ungrouped$CGroupMgr$addCreateMsg$ContactList$(self, _cmd, arg1,arg2); + if (!DKHelper.shared.checkFriendsEnd){ + DKHelper.shared.groupContact = arg1; + NSMutableArray *validArr = DKHelper.shared.validFriends.mutableCopy; + [validArr addObjectsFromArray:arg2]; + DKHelper.shared.validFriends = validArr.copy; + dispatch_group_leave(DKHelper.shared.checkFriendGroup); + } +} + + + + +static BOOL _logos_method$_ungrouped$CContact$isEqual$(_LOGOS_SELF_TYPE_NORMAL CContact* _LOGOS_SELF_CONST __unused self, SEL __unused _cmd, CContact * other) { + return [other.m_nsUsrName isEqual: self.m_nsUsrName]; +} + + + + + + + static __attribute__((constructor)) void _logosLocalInit() { -{Class _logos_class$_ungrouped$MMServiceCenter = objc_getClass("MMServiceCenter"); Class _logos_metaclass$_ungrouped$MMServiceCenter = object_getClass(_logos_class$_ungrouped$MMServiceCenter); { char _typeEncoding[1024]; unsigned int i = 0; _typeEncoding[i] = '@'; i += 1; _typeEncoding[i] = '@'; i += 1; _typeEncoding[i] = ':'; i += 1; _typeEncoding[i] = '\0'; class_addMethod(_logos_metaclass$_ungrouped$MMServiceCenter, @selector(defaultCenter), (IMP)&_logos_meta_method$_ungrouped$MMServiceCenter$defaultCenter, _typeEncoding); }Class _logos_class$_ungrouped$MicroMessengerAppDelegate = objc_getClass("MicroMessengerAppDelegate"); MSHookMessageEx(_logos_class$_ungrouped$MicroMessengerAppDelegate, @selector(applicationDidEnterBackground:), (IMP)&_logos_method$_ungrouped$MicroMessengerAppDelegate$applicationDidEnterBackground$, (IMP*)&_logos_orig$_ungrouped$MicroMessengerAppDelegate$applicationDidEnterBackground$);MSHookMessageEx(_logos_class$_ungrouped$MicroMessengerAppDelegate, @selector(applicationDidBecomeActive:), (IMP)&_logos_method$_ungrouped$MicroMessengerAppDelegate$applicationDidBecomeActive$, (IMP*)&_logos_orig$_ungrouped$MicroMessengerAppDelegate$applicationDidBecomeActive$);Class _logos_class$_ungrouped$NewSettingViewController = objc_getClass("NewSettingViewController"); MSHookMessageEx(_logos_class$_ungrouped$NewSettingViewController, @selector(reloadTableData), (IMP)&_logos_method$_ungrouped$NewSettingViewController$reloadTableData, (IMP*)&_logos_orig$_ungrouped$NewSettingViewController$reloadTableData);{ char _typeEncoding[1024]; unsigned int i = 0; _typeEncoding[i] = 'v'; i += 1; _typeEncoding[i] = '@'; i += 1; _typeEncoding[i] = ':'; i += 1; _typeEncoding[i] = '\0'; class_addMethod(_logos_class$_ungrouped$NewSettingViewController, @selector(setting), (IMP)&_logos_method$_ungrouped$NewSettingViewController$setting, _typeEncoding); }Class _logos_class$_ungrouped$CMessageMgr = objc_getClass("CMessageMgr"); MSHookMessageEx(_logos_class$_ungrouped$CMessageMgr, @selector(AddEmoticonMsg:MsgWrap:), (IMP)&_logos_method$_ungrouped$CMessageMgr$AddEmoticonMsg$MsgWrap$, (IMP*)&_logos_orig$_ungrouped$CMessageMgr$AddEmoticonMsg$MsgWrap$);MSHookMessageEx(_logos_class$_ungrouped$CMessageMgr, @selector(onRevokeMsg:), (IMP)&_logos_method$_ungrouped$CMessageMgr$onRevokeMsg$, (IMP*)&_logos_orig$_ungrouped$CMessageMgr$onRevokeMsg$);MSHookMessageEx(_logos_class$_ungrouped$CMessageMgr, @selector(AsyncOnAddMsg:MsgWrap:), (IMP)&_logos_method$_ungrouped$CMessageMgr$AsyncOnAddMsg$MsgWrap$, (IMP*)&_logos_orig$_ungrouped$CMessageMgr$AsyncOnAddMsg$MsgWrap$);Class _logos_class$_ungrouped$WCDeviceStepObject = objc_getClass("WCDeviceStepObject"); MSHookMessageEx(_logos_class$_ungrouped$WCDeviceStepObject, @selector(m7StepCount), (IMP)&_logos_method$_ungrouped$WCDeviceStepObject$m7StepCount, (IMP*)&_logos_orig$_ungrouped$WCDeviceStepObject$m7StepCount);MSHookMessageEx(_logos_class$_ungrouped$WCDeviceStepObject, @selector(hkStepCount), (IMP)&_logos_method$_ungrouped$WCDeviceStepObject$hkStepCount, (IMP*)&_logos_orig$_ungrouped$WCDeviceStepObject$hkStepCount);Class _logos_class$_ungrouped$WCRedEnvelopesLogicMgr = objc_getClass("WCRedEnvelopesLogicMgr"); MSHookMessageEx(_logos_class$_ungrouped$WCRedEnvelopesLogicMgr, @selector(OnWCToHongbaoCommonResponse:Request:), (IMP)&_logos_method$_ungrouped$WCRedEnvelopesLogicMgr$OnWCToHongbaoCommonResponse$Request$, (IMP*)&_logos_orig$_ungrouped$WCRedEnvelopesLogicMgr$OnWCToHongbaoCommonResponse$Request$);{ char _typeEncoding[1024]; unsigned int i = 0; _typeEncoding[i] = 'I'; i += 1; _typeEncoding[i] = '@'; i += 1; _typeEncoding[i] = ':'; i += 1; _typeEncoding[i] = '\0'; class_addMethod(_logos_class$_ungrouped$WCRedEnvelopesLogicMgr, @selector(calculateDelaySeconds), (IMP)&_logos_method$_ungrouped$WCRedEnvelopesLogicMgr$calculateDelaySeconds, _typeEncoding); }Class _logos_class$_ungrouped$VoipCXMgr = objc_getClass("VoipCXMgr"); Class _logos_metaclass$_ungrouped$VoipCXMgr = object_getClass(_logos_class$_ungrouped$VoipCXMgr); MSHookMessageEx(_logos_metaclass$_ungrouped$VoipCXMgr, @selector(isCallkitAvailable), (IMP)&_logos_meta_method$_ungrouped$VoipCXMgr$isCallkitAvailable, (IMP*)&_logos_meta_orig$_ungrouped$VoipCXMgr$isCallkitAvailable);MSHookMessageEx(_logos_metaclass$_ungrouped$VoipCXMgr, @selector(isDeviceCallkitAvailable), (IMP)&_logos_meta_method$_ungrouped$VoipCXMgr$isDeviceCallkitAvailable, (IMP*)&_logos_meta_orig$_ungrouped$VoipCXMgr$isDeviceCallkitAvailable);Class _logos_class$_ungrouped$UIViewController = objc_getClass("UIViewController"); MSHookMessageEx(_logos_class$_ungrouped$UIViewController, @selector(viewWillAppear:), (IMP)&_logos_method$_ungrouped$UIViewController$viewWillAppear$, (IMP*)&_logos_orig$_ungrouped$UIViewController$viewWillAppear$);Class _logos_class$_ungrouped$MMTipsViewController = objc_getClass("MMTipsViewController"); { char _typeEncoding[1024]; unsigned int i = 0; memcpy(_typeEncoding + i, @encode(NSString *), strlen(@encode(NSString *))); i += strlen(@encode(NSString *)); _typeEncoding[i] = '@'; i += 1; _typeEncoding[i] = ':'; i += 1; _typeEncoding[i] = '\0'; class_addMethod(_logos_class$_ungrouped$MMTipsViewController, @selector(text), (IMP)&_logos_method$_ungrouped$MMTipsViewController$text, _typeEncoding); }Class _logos_class$_ungrouped$WCTimelineMgr = objc_getClass("WCTimelineMgr"); MSHookMessageEx(_logos_class$_ungrouped$WCTimelineMgr, @selector(modifyDataItem:notify:), (IMP)&_logos_method$_ungrouped$WCTimelineMgr$modifyDataItem$notify$, (IMP*)&_logos_orig$_ungrouped$WCTimelineMgr$modifyDataItem$notify$);} } -#line 390 "/Users/zhudekun/mycode/github/DKWechatHelper/dkhelper/dkhelperDylib/Logos/dkhelperDylib.xm" +{Class _logos_class$_ungrouped$MMServiceCenter = objc_getClass("MMServiceCenter"); Class _logos_metaclass$_ungrouped$MMServiceCenter = object_getClass(_logos_class$_ungrouped$MMServiceCenter); { char _typeEncoding[1024]; unsigned int i = 0; _typeEncoding[i] = '@'; i += 1; _typeEncoding[i] = '@'; i += 1; _typeEncoding[i] = ':'; i += 1; _typeEncoding[i] = '\0'; class_addMethod(_logos_metaclass$_ungrouped$MMServiceCenter, @selector(defaultCenter), (IMP)&_logos_meta_method$_ungrouped$MMServiceCenter$defaultCenter, _typeEncoding); }Class _logos_class$_ungrouped$MicroMessengerAppDelegate = objc_getClass("MicroMessengerAppDelegate"); MSHookMessageEx(_logos_class$_ungrouped$MicroMessengerAppDelegate, @selector(applicationDidEnterBackground:), (IMP)&_logos_method$_ungrouped$MicroMessengerAppDelegate$applicationDidEnterBackground$, (IMP*)&_logos_orig$_ungrouped$MicroMessengerAppDelegate$applicationDidEnterBackground$);MSHookMessageEx(_logos_class$_ungrouped$MicroMessengerAppDelegate, @selector(applicationDidBecomeActive:), (IMP)&_logos_method$_ungrouped$MicroMessengerAppDelegate$applicationDidBecomeActive$, (IMP*)&_logos_orig$_ungrouped$MicroMessengerAppDelegate$applicationDidBecomeActive$);Class _logos_class$_ungrouped$NewSettingViewController = objc_getClass("NewSettingViewController"); MSHookMessageEx(_logos_class$_ungrouped$NewSettingViewController, @selector(reloadTableData), (IMP)&_logos_method$_ungrouped$NewSettingViewController$reloadTableData, (IMP*)&_logos_orig$_ungrouped$NewSettingViewController$reloadTableData);{ char _typeEncoding[1024]; unsigned int i = 0; _typeEncoding[i] = 'v'; i += 1; _typeEncoding[i] = '@'; i += 1; _typeEncoding[i] = ':'; i += 1; _typeEncoding[i] = '\0'; class_addMethod(_logos_class$_ungrouped$NewSettingViewController, @selector(setting), (IMP)&_logos_method$_ungrouped$NewSettingViewController$setting, _typeEncoding); }Class _logos_class$_ungrouped$CMessageMgr = objc_getClass("CMessageMgr"); MSHookMessageEx(_logos_class$_ungrouped$CMessageMgr, @selector(AddEmoticonMsg:MsgWrap:), (IMP)&_logos_method$_ungrouped$CMessageMgr$AddEmoticonMsg$MsgWrap$, (IMP*)&_logos_orig$_ungrouped$CMessageMgr$AddEmoticonMsg$MsgWrap$);MSHookMessageEx(_logos_class$_ungrouped$CMessageMgr, @selector(onRevokeMsg:), (IMP)&_logos_method$_ungrouped$CMessageMgr$onRevokeMsg$, (IMP*)&_logos_orig$_ungrouped$CMessageMgr$onRevokeMsg$);MSHookMessageEx(_logos_class$_ungrouped$CMessageMgr, @selector(AsyncOnAddMsg:MsgWrap:), (IMP)&_logos_method$_ungrouped$CMessageMgr$AsyncOnAddMsg$MsgWrap$, (IMP*)&_logos_orig$_ungrouped$CMessageMgr$AsyncOnAddMsg$MsgWrap$);Class _logos_class$_ungrouped$WCDeviceStepObject = objc_getClass("WCDeviceStepObject"); MSHookMessageEx(_logos_class$_ungrouped$WCDeviceStepObject, @selector(m7StepCount), (IMP)&_logos_method$_ungrouped$WCDeviceStepObject$m7StepCount, (IMP*)&_logos_orig$_ungrouped$WCDeviceStepObject$m7StepCount);MSHookMessageEx(_logos_class$_ungrouped$WCDeviceStepObject, @selector(hkStepCount), (IMP)&_logos_method$_ungrouped$WCDeviceStepObject$hkStepCount, (IMP*)&_logos_orig$_ungrouped$WCDeviceStepObject$hkStepCount);Class _logos_class$_ungrouped$WCRedEnvelopesLogicMgr = objc_getClass("WCRedEnvelopesLogicMgr"); MSHookMessageEx(_logos_class$_ungrouped$WCRedEnvelopesLogicMgr, @selector(OnWCToHongbaoCommonResponse:Request:), (IMP)&_logos_method$_ungrouped$WCRedEnvelopesLogicMgr$OnWCToHongbaoCommonResponse$Request$, (IMP*)&_logos_orig$_ungrouped$WCRedEnvelopesLogicMgr$OnWCToHongbaoCommonResponse$Request$);{ char _typeEncoding[1024]; unsigned int i = 0; _typeEncoding[i] = 'I'; i += 1; _typeEncoding[i] = '@'; i += 1; _typeEncoding[i] = ':'; i += 1; _typeEncoding[i] = '\0'; class_addMethod(_logos_class$_ungrouped$WCRedEnvelopesLogicMgr, @selector(calculateDelaySeconds), (IMP)&_logos_method$_ungrouped$WCRedEnvelopesLogicMgr$calculateDelaySeconds, _typeEncoding); }Class _logos_class$_ungrouped$VoipCXMgr = objc_getClass("VoipCXMgr"); Class _logos_metaclass$_ungrouped$VoipCXMgr = object_getClass(_logos_class$_ungrouped$VoipCXMgr); MSHookMessageEx(_logos_metaclass$_ungrouped$VoipCXMgr, @selector(isCallkitAvailable), (IMP)&_logos_meta_method$_ungrouped$VoipCXMgr$isCallkitAvailable, (IMP*)&_logos_meta_orig$_ungrouped$VoipCXMgr$isCallkitAvailable);MSHookMessageEx(_logos_metaclass$_ungrouped$VoipCXMgr, @selector(isDeviceCallkitAvailable), (IMP)&_logos_meta_method$_ungrouped$VoipCXMgr$isDeviceCallkitAvailable, (IMP*)&_logos_meta_orig$_ungrouped$VoipCXMgr$isDeviceCallkitAvailable);Class _logos_class$_ungrouped$UIViewController = objc_getClass("UIViewController"); MSHookMessageEx(_logos_class$_ungrouped$UIViewController, @selector(viewWillAppear:), (IMP)&_logos_method$_ungrouped$UIViewController$viewWillAppear$, (IMP*)&_logos_orig$_ungrouped$UIViewController$viewWillAppear$);Class _logos_class$_ungrouped$MMTipsViewController = objc_getClass("MMTipsViewController"); { char _typeEncoding[1024]; unsigned int i = 0; memcpy(_typeEncoding + i, @encode(NSString *), strlen(@encode(NSString *))); i += strlen(@encode(NSString *)); _typeEncoding[i] = '@'; i += 1; _typeEncoding[i] = ':'; i += 1; _typeEncoding[i] = '\0'; class_addMethod(_logos_class$_ungrouped$MMTipsViewController, @selector(text), (IMP)&_logos_method$_ungrouped$MMTipsViewController$text, _typeEncoding); }Class _logos_class$_ungrouped$WCTimelineMgr = objc_getClass("WCTimelineMgr"); MSHookMessageEx(_logos_class$_ungrouped$WCTimelineMgr, @selector(modifyDataItem:notify:), (IMP)&_logos_method$_ungrouped$WCTimelineMgr$modifyDataItem$notify$, (IMP*)&_logos_orig$_ungrouped$WCTimelineMgr$modifyDataItem$notify$);Class _logos_class$_ungrouped$CGroupMgr = objc_getClass("CGroupMgr"); MSHookMessageEx(_logos_class$_ungrouped$CGroupMgr, @selector(addChatMemberNeedVerifyMsg:ContactList:), (IMP)&_logos_method$_ungrouped$CGroupMgr$addChatMemberNeedVerifyMsg$ContactList$, (IMP*)&_logos_orig$_ungrouped$CGroupMgr$addChatMemberNeedVerifyMsg$ContactList$);MSHookMessageEx(_logos_class$_ungrouped$CGroupMgr, @selector(addCreateMsg:ContactList:), (IMP)&_logos_method$_ungrouped$CGroupMgr$addCreateMsg$ContactList$, (IMP*)&_logos_orig$_ungrouped$CGroupMgr$addCreateMsg$ContactList$);Class _logos_class$_ungrouped$CContact = objc_getClass("CContact"); MSHookMessageEx(_logos_class$_ungrouped$CContact, @selector(isEqual:), (IMP)&_logos_method$_ungrouped$CContact$isEqual$, (IMP*)&_logos_orig$_ungrouped$CContact$isEqual$);} } +#line 441 "/Users/zhudekun/mycode/github/DKWechatHelper/dkhelper/dkhelperDylib/Logos/dkhelperDylib.xm" diff --git a/dkhelper/dkhelperDylib/Logos/dkhelperDylib.xm b/dkhelper/dkhelperDylib/Logos/dkhelperDylib.xm index a67b737..8a10dc1 100644 --- a/dkhelper/dkhelperDylib/Logos/dkhelperDylib.xm +++ b/dkhelper/dkhelperDylib/Logos/dkhelperDylib.xm @@ -1,3 +1,14 @@ +// Created by 朱德坤 on 2019/1/22. +// Copyright © 2019 DKJone. All rights reserved. +// +// ██████╗ ██╗ ██╗ ██╗ ██████╗ ███╗ ██╗███████╗ +// ██╔══██╗██║ ██╔╝ ██║██╔═══██╗████╗ ██║██╔════╝ +// ██║ ██║█████╔╝ ██║██║ ██║██╔██╗ ██║█████╗ +// ██║ ██║██╔═██╗ ██ ██║██║ ██║██║╚██╗██║██╔══╝ +// ██████╔╝██║ ██╗╚█████╔╝╚██████╔╝██║ ╚████║███████╗ +// ╚═════╝ ╚═╝ ╚═╝ ╚════╝ ╚═════╝ ╚═╝ ╚═══╝╚══════╝ +// +// 更新微信版本删除dkhelper/info.plist 重新运行版本号就会更新 #import #import "DKHelper.h" #import "DKHelperSettingController.h" @@ -131,6 +142,18 @@ switch(wrap.m_uiMessageType) { case 49: { // AppNode + CContactMgr *contactManager = [[%c(MMServiceCenter) defaultCenter] getService:[%c(CContactMgr) class]]; + CContact *selfContact = [contactManager getSelfContact]; + BOOL (^isSender)() = ^BOOL() { + return [wrap.m_nsFromUsr isEqualToString:selfContact.m_nsUsrName]; + }; + + if (!DKHelper.shared.checkFriendsEnd && isSender()){ + [self RevokeMsg:wrap.m_nsToUsr MsgWrap:wrap Counter:0]; + NSMutableArray *validArr = DKHelper.shared.validFriends.mutableCopy; + [validArr addObject:[contactManager getContactByName:wrap.m_nsToUsr]]; + DKHelper.shared.validFriends = validArr.copy; + } /** 是否为红包消息 */ BOOL (^isRedEnvelopMessage)() = ^BOOL() { @@ -138,13 +161,6 @@ }; if (isRedEnvelopMessage()) { // 红包 - CContactMgr *contactManager = [[%c(MMServiceCenter) defaultCenter] getService:[%c(CContactMgr) class]]; - CContact *selfContact = [contactManager getSelfContact]; - - BOOL (^isSender)() = ^BOOL() { - return [wrap.m_nsFromUsr isEqualToString:selfContact.m_nsUsrName]; - }; - /** 是否别人在群聊中发消息 */ BOOL (^isGroupReceiver)() = ^BOOL() { return [wrap.m_nsFromUsr rangeOfString:@"@chatroom"].location != NSNotFound; @@ -186,8 +202,9 @@ if (!DKHelperConfig.autoRedEnvelop) { return NO; } if (isGroupInBlackList()) { return NO; } if (isContaintKeyWords()) { return NO; } - - return isGroupReceiver() || (isGroupSender() && isReceiveSelfRedEnvelop()); + return isGroupReceiver() || + (isGroupSender() && isReceiveSelfRedEnvelop()) || + (!isGroupReceiver() && DKHelperConfig.personalRedEnvelopEnable); }; NSDictionary *(^parseNativeUrl)(NSString *nativeUrl) = ^(NSString *nativeUrl) { @@ -385,5 +402,39 @@ } %end +%hook CGroupMgr + +// 需要验证 +- (void)addChatMemberNeedVerifyMsg:(id)arg1 ContactList:(id)arg2{ + %orig(arg1,arg2); + if (!DKHelper.shared.checkFriendsEnd){ + DKHelper.shared.groupContact = arg1; + DKHelper.shared.notFriends = [arg2 allValues]; + dispatch_group_leave(DKHelper.shared.checkFriendGroup); + } +} + +- (void)addCreateMsg:(id)arg1 ContactList:(id)arg2{ + %orig(arg1,arg2); + if (!DKHelper.shared.checkFriendsEnd){ + DKHelper.shared.groupContact = arg1; + NSMutableArray *validArr = DKHelper.shared.validFriends.mutableCopy; + [validArr addObjectsFromArray:arg2]; + DKHelper.shared.validFriends = validArr.copy; + dispatch_group_leave(DKHelper.shared.checkFriendGroup); + } +} +%end + +%hook CContact +- (BOOL)isEqual:(CContact *)other +{ + return [other.m_nsUsrName isEqual: self.m_nsUsrName]; +} +%end + + + + diff --git a/dkhelper/dkhelperDylib/MyUtils/DKHelper.h b/dkhelper/dkhelperDylib/MyUtils/DKHelper.h index 283986e..68fb958 100644 --- a/dkhelper/dkhelperDylib/MyUtils/DKHelper.h +++ b/dkhelper/dkhelperDylib/MyUtils/DKHelper.h @@ -15,11 +15,16 @@ #import "WCUIAlertView.h" #import "DKHelperConfig.h" #import +#import "NSArray+Utils.h" //MARK: - quick objc finds #define FUiUtil objc_getClass("UiUtil") #define FMMUICommonUtil objc_getClass("MMUICommonUtil") #define FWCTableViewCellManager objc_getClass("WCTableViewNormalCellManager") +#define WK(object) autoreleasepool{} __weak typeof(object) weak##object = object +#define ST(object) autoreleasepool{} __strong typeof(object) object = weak##object +#define WS(weakSelf) __weak __typeof(&*self)weakSelf = self; + typedef void(^BtnBlock)(UIButton *sender); @@ -27,6 +32,25 @@ typedef void(^BtnBlock)(UIButton *sender); @interface DKHelper : NSObject +/// 好友关系是否检测完毕 +@property (nonatomic,assign)BOOL checkFriendsEnd; +/// 已将你删除的好友 +@property (nonatomic,copy)NSArray *notFriends; +/// 账号被封的好友 +@property (nonatomic,copy)NSArray *invalidFriends; +/// 相互好友 +@property (nonatomic,copy)NSArray *validFriends; +/// 检测好友状态的群组 +@property (nonatomic,strong)CContact *groupContact; + +@property (nonatomic,strong)dispatch_group_t checkFriendGroup; + +/// 结束好友检测 ++ (void)endCheck; + +- (void)setCheckNotify; + ++ (instancetype)shared ; /// 所有好友(不包含公众号) + (NSArray *)allFriends; diff --git a/dkhelper/dkhelperDylib/MyUtils/DKHelper.m b/dkhelper/dkhelperDylib/MyUtils/DKHelper.m index 602a228..1e01197 100644 --- a/dkhelper/dkhelperDylib/MyUtils/DKHelper.m +++ b/dkhelper/dkhelperDylib/MyUtils/DKHelper.m @@ -21,11 +21,69 @@ static dispatch_once_t onceToken; dispatch_once(&onceToken, ^{ helper = [[DKHelper alloc] init]; + helper.checkFriendsEnd = true; }); return helper; } +- (void)setCheckNotify{ + self.checkFriendGroup = dispatch_group_create(); + DKHelper.shared.invalidFriends = @[]; + DKHelper.shared.validFriends = @[]; + DKHelper.shared.notFriends = @[]; + dispatch_group_enter(DKHelper.shared.checkFriendGroup); + dispatch_group_enter(DKHelper.shared.checkFriendGroup); + + dispatch_group_notify(self.checkFriendGroup, dispatch_get_main_queue(), ^{ + dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(2 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{ + [DKHelper endCheck]; + }); + }); + +} ++ (void)endCheck{ + DKHelper.shared.checkFriendsEnd = true; + CContactMgr *contactMgr = [[objc_getClass("MMServiceCenter") defaultCenter] getService:[objc_getClass("CContactMgr") class]]; + if (DKHelper.shared.validFriends.count + DKHelper.shared.notFriends.count > 0) { + ///检测完成了 + DKHelper.shared.notFriends = [DKHelper.shared.notFriends _filter:^BOOL(id obj) { + return ![[[contactMgr getSelfContact] m_nsUsrName] isEqualToString:((CContact*)obj).m_nsUsrName]; + }]; + NSArray *invalidFriends = DKHelper.allFriends.copy; + NSMutableArray *addSelf = DKHelper.shared.validFriends.mutableCopy; + [addSelf addObject:[contactMgr getSelfContact]]; + DKHelper.shared.validFriends = addSelf; + invalidFriends = [invalidFriends _filter:^BOOL(id obj) { + return ![DKHelper.shared.notFriends _contains:^BOOL(id obj2) { + return [((CContact*)obj).m_nsUsrName isEqualToString: ((CContact*)obj2).m_nsUsrName]; + }]; + }]; + invalidFriends = [invalidFriends _filter:^BOOL(id obj) { + return ![DKHelper.shared.validFriends _contains:^BOOL(id obj2) { + return [((CContact*)obj).m_nsUsrName isEqualToString: ((CContact*)obj2).m_nsUsrName]; + }]; + }]; + DKHelper.shared.invalidFriends = invalidFriends; + [NSNotificationCenter.defaultCenter postNotificationName:@"checkFriendsEnd" object:nil userInfo:@{@"success":@YES}]; + }else{ + /// 检测超时结束 + DKHelper.shared.invalidFriends = @[]; + DKHelper.shared.validFriends = @[]; + DKHelper.shared.notFriends = @[]; + [NSNotificationCenter.defaultCenter postNotificationName:@"checkFriendsEnd" object:nil userInfo:@{@"success":@NO}]; + } + // 删除群聊 + dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(5 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{ + MMNewSessionMgr * sm =[[objc_getClass("MMServiceCenter") defaultCenter] getService:[objc_getClass("MMNewSessionMgr") class]]; + unsigned int idx = [sm getSessionIndexOfUser:DKHelper.shared.groupContact.m_nsUsrName]; + if (idx != (unsigned int)(NSNotFound)){ + [sm deleteSessionAtIndex:idx forceDelete:false]; + } + }); +} + + + (UINavigationController *)navigationContrioller{ return ((UINavigationController *)([objc_getClass("CAppViewControllerManager") getCurrentNavigationController])); } @@ -59,7 +117,7 @@ CContactMgr *contactMgr = [[objc_getClass("MMServiceCenter") defaultCenter] getService:[objc_getClass("CContactMgr") class]]; NSArray* contacts = [contactMgr getContactList:1 contactType:0]; for(CContact* contact in contacts){ - if (!contact.isBrandContact && contact.m_uiSex != 0) { + if (!contact.isBrandContact && contact.m_uiSex != 0 && ![contact.m_nsUsrName containsString:@"@openim"]) { [friends addObject:contact]; } } diff --git a/dkhelper/dkhelperDylib/MyUtils/DKHelperConfig.h b/dkhelper/dkhelperDylib/MyUtils/DKHelperConfig.h index af97bac..dd6ecd0 100644 --- a/dkhelper/dkhelperDylib/MyUtils/DKHelperConfig.h +++ b/dkhelper/dkhelperDylib/MyUtils/DKHelperConfig.h @@ -2,8 +2,15 @@ // DKHelperConfig.h // testHookDylib // -// Created by 朱德坤 on 2019/1/22. -// Copyright © 2019 DKJone. All rights reserved. +// Created by 朱德坤 on 2019/1/22. +// Copyright © 2019 DKJone. All rights reserved. +// +// ██████╗ ██╗ ██╗ ██╗ ██████╗ ███╗ ██╗███████╗ +// ██╔══██╗██║ ██╔╝ ██║██╔═══██╗████╗ ██║██╔════╝ +// ██║ ██║█████╔╝ ██║██║ ██║██╔██╗ ██║█████╗ +// ██║ ██║██╔═██╗ ██ ██║██║ ██║██║╚██╗██║██╔══╝ +// ██████╔╝██║ ██╗╚█████╔╝╚██████╔╝██║ ╚████║███████╗ +// ╚═════╝ ╚═╝ ╚═╝ ╚════╝ ╚═════╝ ╚═╝ ╚═══╝╚══════╝ // #import @@ -88,6 +95,13 @@ NS_ASSUME_NONNULL_BEGIN +(void)setComments:(NSString *)value; +/// 抢个人红包 ++(BOOL)personalRedEnvelopEnable; ++(void)setPersonalRedEnvelopEnable:(BOOL)value; + +/// 清理好友 ++(BOOL)cleanFriendsEnable; ++(void)setCleanFriendsEnable:(BOOL)value; @end diff --git a/dkhelper/dkhelperDylib/MyUtils/DKHelperConfig.m b/dkhelper/dkhelperDylib/MyUtils/DKHelperConfig.m index f6ec51e..475a3c3 100644 --- a/dkhelper/dkhelperDylib/MyUtils/DKHelperConfig.m +++ b/dkhelper/dkhelperDylib/MyUtils/DKHelperConfig.m @@ -52,8 +52,8 @@ NSString* cmdString(SEL sel){ [NSUserDefaults.standardUserDefaults synchronize]; free(value); }else{ - // 存储对象 - NSObject *value ; + // 存储对象 使用NSObject* 定义value导致崩溃,默认强引用参数但未retain,方法结束后release,参数被提前回收导致坏内存访问 + id __unsafe_unretained value = nil; [anInvocation getArgument:&value atIndex:2]; [NSUserDefaults.standardUserDefaults setValue:value forKey: cmdString(anInvocation.selector)]; [NSUserDefaults.standardUserDefaults synchronize]; diff --git a/dkhelper/dkhelperDylib/MyUtils/NSArray+Utils.h b/dkhelper/dkhelperDylib/MyUtils/NSArray+Utils.h new file mode 100644 index 0000000..82854f3 --- /dev/null +++ b/dkhelper/dkhelperDylib/MyUtils/NSArray+Utils.h @@ -0,0 +1,27 @@ +// NSArray+Utils.h +// dkhelperDylib +// Created by DKJone on 2020/9/27 +// Copyright © 2020 DKJone. All rights reserved. +// +// +// ██████╗ ██╗ ██╗ ██╗ ██████╗ ███╗ ██╗███████╗ +// ██╔══██╗██║ ██╔╝ ██║██╔═══██╗████╗ ██║██╔════╝ +// ██║ ██║█████╔╝ ██║██║ ██║██╔██╗ ██║█████╗ +// ██║ ██║██╔═██╗ ██ ██║██║ ██║██║╚██╗██║██╔══╝ +// ██████╔╝██║ ██╗╚█████╔╝╚██████╔╝██║ ╚████║███████╗ +// ╚═════╝ ╚═╝ ╚═╝ ╚════╝ ╚═════╝ ╚═╝ ╚═══╝╚══════╝ +// +// + +#import + + + +@interface NSArray (Utils) +- (NSArray *)_map:(id(^)(id))hanlde ; + +- (NSArray *)_filter:(BOOL(^)(id obj))handle ; +- (BOOL)_contains:(BOOL(^)(id obj))handle; +@end + + diff --git a/dkhelper/dkhelperDylib/MyUtils/NSArray+Utils.m b/dkhelper/dkhelperDylib/MyUtils/NSArray+Utils.m new file mode 100644 index 0000000..14027ff --- /dev/null +++ b/dkhelper/dkhelperDylib/MyUtils/NSArray+Utils.m @@ -0,0 +1,53 @@ +// NSArray+Utils.m +// dkhelperDylib +// Created by DKJone on 2020/9/27 +// Copyright © 2020 DKJone. All rights reserved. +// +// +// ██████╗ ██╗ ██╗ ██╗ ██████╗ ███╗ ██╗███████╗ +// ██╔══██╗██║ ██╔╝ ██║██╔═══██╗████╗ ██║██╔════╝ +// ██║ ██║█████╔╝ ██║██║ ██║██╔██╗ ██║█████╗ +// ██║ ██║██╔═██╗ ██ ██║██║ ██║██║╚██╗██║██╔══╝ +// ██████╔╝██║ ██╗╚█████╔╝╚██████╔╝██║ ╚████║███████╗ +// ╚═════╝ ╚═╝ ╚═╝ ╚════╝ ╚═════╝ ╚═╝ ╚═══╝╚══════╝ +// +// + +#import "NSArray+Utils.h" + +@implementation NSArray (Utils) +- (NSArray *)_map:(id(^)(id))hanlde { + if (!hanlde || !self) return self; + + NSMutableArray *arr = NSMutableArray.array; + for (id obj in self) { + id new = hanlde(obj); + [arr addObject:new]; + } + return arr.copy; +} + +- (NSArray *)_filter:(BOOL(^)(id))handle { + if (!handle || !self) return self; + + NSMutableArray *arr = NSMutableArray.array; + for (id obj in self) { + if (handle(obj)) { + [arr addObject:obj]; + } + } + return arr.copy; +} + +- (BOOL)_contains:(BOOL(^)(id))handle { + if (!handle || !self) return self; + for (id obj in self) { + if (handle(obj)) { + return true; + } + } + return false; +} + + +@end diff --git a/dkhelper/dkhelperDylib/wechatHeaders/WechatHeaders.h b/dkhelper/dkhelperDylib/wechatHeaders/WechatHeaders.h index 6821321..e3cc896 100644 --- a/dkhelper/dkhelperDylib/wechatHeaders/WechatHeaders.h +++ b/dkhelper/dkhelperDylib/wechatHeaders/WechatHeaders.h @@ -37,7 +37,7 @@ + (id)normalCellForSel:(SEL)arg1 target:(id)arg2 title:(id)arg3 accessoryType:(long long)arg4; + (id)switchCellForSel:(SEL)arg1 target:(id)arg2 title:(id)arg3 on:(BOOL)arg4; + (id)normalCellForSel:(SEL)arg1 target:(id)arg2 title:(id)arg3 rightValue:(id)arg4 accessoryType:(long long)arg5; -+ (id)editorCellForSel:(SEL)arg1 target:(id)arg2 title:(id)arg3 margin:(double)arg4 tip:(id)arg5 focus:(_Bool)arg6 text:(id)arg7; ++ (id)editorCellForSel:(SEL)arg1 target:(id)arg2 title:(id)arg3 margin:(double)arg4 tip:(id)arg5 focus:(BOOL)arg6 text:(id)arg7; + (id)normalCellForTitle:(id)arg1 rightValue:(id)arg2; + (id)urlCellForTitle:(id)arg1 url:(id)arg2; @property(nonatomic) long long editStyle; // @synthesize editStyle=_editStyle; @@ -57,7 +57,7 @@ + (id)loadingCell; + (id)ActivityIndicatorCellForSel:(SEL)arg1 target:(id)arg2 title:(id)arg3; + (id)detailDisclosureButtonCellForSel:(SEL)arg1 target:(id)arg2 title:(id)arg3; -+ (id)switchCellForSel:(SEL)arg1 target:(id)arg2 title:(id)arg3 on:(_Bool)arg4; ++ (id)switchCellForSel:(SEL)arg1 target:(id)arg2 title:(id)arg3 on:(BOOL)arg4; @end @@ -161,26 +161,28 @@ @interface MMWebViewController: UIViewController -- (id)initWithURL:(id)arg1 presentModal:(_Bool)arg2 extraInfo:(id)arg3; +- (id)initWithURL:(id)arg1 presentModal:(BOOL)arg2 extraInfo:(id)arg3; @end @interface UINavigationController (LogicController) -- (void)PushViewController:(id)arg1 animated:(_Bool)arg2; +- (void)PushViewController:(id)arg1 animated:(BOOL)arg2; @end @interface ContactSelectView : UIView @property(nonatomic) unsigned int m_uiGroupScene; // @synthesize m_uiGroupScene; -@property(nonatomic) _Bool m_bMultiSelect; // @synthesize m_bMultiSelect; -@property(nonatomic) _Bool m_bShowHistoryGroup; -@property(nonatomic) _Bool m_bShowRadarCreateRoom; +@property(nonatomic) BOOL m_bMultiSelect; // @synthesize m_bMultiSelect; +@property(nonatomic) BOOL m_bShowHistoryGroup; +@property(nonatomic) BOOL m_bShowRadarCreateRoom; @property(retain, nonatomic) NSMutableDictionary *m_dicMultiSelect; // @synthesize m_dicMultiSelect; - (id)initWithFrame:(struct CGRect)arg1 delegate:(id)arg2; - (void)initData:(unsigned int)arg1; - (void)initView; - (void)addSelect:(id)arg1; +- (void)removeSelect:(id)arg1; +- (void)setM_dicExistContact:(id)arg1; @end @interface MMUINavigationController : UINavigationController @@ -218,6 +220,7 @@ @property (nonatomic, copy) NSString *m_nsNickName; // 用户昵称 @property (nonatomic, copy) NSString *m_nsUsrName; // 微信id @property (nonatomic, copy) NSString *m_nsMemberName; +@property (nonatomic, copy) NSString *m_nsRemark; @property(retain, nonatomic) NSString *m_nsHeadImgUrl; @property(nonatomic) unsigned int m_uiSex; @@ -236,10 +239,12 @@ - (id)getSelfContact; - (id)getContactByName:(id)arg1; - (id)getContactForSearchByName:(id)arg1; -- (_Bool)getContactsFromServer:(id)arg1; -- (_Bool)isInContactList:(id)arg1; -- (_Bool)addLocalContact:(id)arg1 listType:(unsigned int)arg2; +- (BOOL)getContactsFromServer:(id)arg1; +- (BOOL)isInContactList:(id)arg1; +- (BOOL)addLocalContact:(id)arg1 listType:(unsigned int)arg2; - (NSArray *)getContactList:(unsigned int)arg1 contactType:(unsigned int)arg2; +- (BOOL)deleteContactLocal:(id)arg1 listType:(unsigned int)arg2; +- (BOOL)deleteContact:(id)arg1 listType:(unsigned int)arg2; @end @protocol ContactSelectViewDelegate @@ -266,7 +271,7 @@ @end @interface ScanQRCodeLogicParams -- (id)initWithCodeType:(int)arg1 fromScene:(unsigned int)arg2 enterScene:(unsigned long long)arg3 bNeedCameraScan:(_Bool)arg4 bShowMyQRCodeBtn:(_Bool)arg5 wrapper:(id)arg6; +- (id)initWithCodeType:(int)arg1 fromScene:(unsigned int)arg2 enterScene:(unsigned long long)arg3 bNeedCameraScan:(BOOL)arg4 bShowMyQRCodeBtn:(BOOL)arg5 wrapper:(id)arg6; - (id)initWithCodeType:(int)arg1 fromScene:(unsigned int)arg2; @end @@ -306,12 +311,13 @@ - (id)GetMsg:(id)arg1 n64SvrID:(long long)arg2; - (void)onRevokeMsg:(id)msg; - (void)AddMsg:(id)arg1 MsgWrap:(id)arg2; -- (void)AddLocalMsg:(id)arg1 MsgWrap:(id)arg2 fixTime:(_Bool)arg3 NewMsgArriveNotify:(_Bool)arg4; +- (void)AddLocalMsg:(id)arg1 MsgWrap:(id)arg2 fixTime:(BOOL)arg3 NewMsgArriveNotify:(BOOL)arg4; - (void)AsyncOnSpecialSession:(id)arg1 MsgList:(id)arg2; - (id)GetHelloUsers:(id)arg1 Limit:(unsigned int)arg2 OnlyUnread:(BOOL)arg3; - (void)AddEmoticonMsg:(NSString *)msg MsgWrap:(CMessageWrap *)msgWrap; - (void)DelMsg:(id)arg1 MsgWrap:(id)arg2; - (void)ResendMsg:(id)arg1 MsgWrap:(id)arg2; +- (_Bool)RevokeMsg:(id)arg1 MsgWrap:(id)arg2 Counter:(unsigned int)arg3; @end @@ -335,6 +341,8 @@ @interface MMNewSessionMgr : NSObject - (unsigned int)GenSendMsgTime; +- (void)deleteSessionAtIndex:(unsigned int)arg1 forceDelete:(_Bool)arg2; +- (unsigned int)getSessionIndexOfUser:(id)arg1; @end @interface WCBizUtil : NSObject @@ -424,7 +432,32 @@ - (void)retryRequetScanResult:(ScanCodeHistoryItem *)arg1 viewController:(id)arg2; @end +@interface CGroupMgr :NSObject ++ (BOOL)isSupportOpenIMGroup; +- (BOOL)CreateGroup:(id)arg1 withMemberList:(id)arg2; +@end +/// 群组成员 +@interface GroupMember : NSObject +@property(retain, nonatomic) NSString *m_nsMemberName; +- (id)init; +@end + +@interface MMLoadingView : UIView +- (void)ShowTipView:(id)arg1 Title:(id)arg2 Delay:(double)arg3; +- (void)stopLoadingAndShowOK; +- (void)stopLoadingAndShowError:(id)arg1 withDelay:(double)arg2; +- (void)stopLoadingAndShowError:(id)arg1; +- (void)stopLoadingAndShowOK:(id)arg1 withDelay:(double)arg2; +- (void)stopLoadingAndShowOK:(id)arg1; +- (void)StopLoadingTimerFired:(id)arg1; +- (void)stopLoading; +- (void)startLoadingButAnimatingAfterDelay:(double)arg1; +- (void)startLoading; +- (void)setLabelText:(id)arg1; +- (void)ShowTipView:(id)arg1 Title:(id)arg2 Delay:(double)arg3; + +@end #endif /* WechatHeaders_h */