mirror of
https://github.com/DKJone/DKWechatHelper.git
synced 2026-07-29 06:12:07 +08:00
V1.0.5功能新增及bug修复
[v1.0.5] what's new * 新增好友关系检测 * 新增自动收取个人红包 * 修复集赞助手自定义评论时可能会发生闪退的BUG * 支持7.0.15 * 更新越狱包7.0.15 * 更新已注入助手的7.0.15未签名包 * 更新越狱源安装包
This commit is contained in:
@@ -15,11 +15,16 @@
|
||||
#import "WCUIAlertView.h"
|
||||
#import "DKHelperConfig.h"
|
||||
#import <UIKit/UIKit.h>
|
||||
#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<CContact *> *notFriends;
|
||||
/// 账号被封的好友
|
||||
@property (nonatomic,copy)NSArray<CContact *> *invalidFriends;
|
||||
/// 相互好友
|
||||
@property (nonatomic,copy)NSArray<CContact *> *validFriends;
|
||||
/// 检测好友状态的群组
|
||||
@property (nonatomic,strong)CContact *groupContact;
|
||||
|
||||
@property (nonatomic,strong)dispatch_group_t checkFriendGroup;
|
||||
|
||||
/// 结束好友检测
|
||||
+ (void)endCheck;
|
||||
|
||||
- (void)setCheckNotify;
|
||||
|
||||
+ (instancetype)shared ;
|
||||
/// 所有好友(不包含公众号)
|
||||
+ (NSArray<CContact*> *)allFriends;
|
||||
|
||||
|
||||
@@ -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<CContact*> *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];
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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 <Foundation/Foundation.h>
|
||||
@@ -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
|
||||
|
||||
@@ -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];
|
||||
|
||||
@@ -0,0 +1,27 @@
|
||||
// NSArray+Utils.h
|
||||
// dkhelperDylib
|
||||
// Created by DKJone on 2020/9/27
|
||||
// Copyright © 2020 DKJone. All rights reserved.
|
||||
//
|
||||
//
|
||||
// ██████╗ ██╗ ██╗ ██╗ ██████╗ ███╗ ██╗███████╗
|
||||
// ██╔══██╗██║ ██╔╝ ██║██╔═══██╗████╗ ██║██╔════╝
|
||||
// ██║ ██║█████╔╝ ██║██║ ██║██╔██╗ ██║█████╗
|
||||
// ██║ ██║██╔═██╗ ██ ██║██║ ██║██║╚██╗██║██╔══╝
|
||||
// ██████╔╝██║ ██╗╚█████╔╝╚██████╔╝██║ ╚████║███████╗
|
||||
// ╚═════╝ ╚═╝ ╚═╝ ╚════╝ ╚═════╝ ╚═╝ ╚═══╝╚══════╝
|
||||
//
|
||||
//
|
||||
|
||||
#import <Foundation/Foundation.h>
|
||||
|
||||
|
||||
|
||||
@interface NSArray (Utils)
|
||||
- (NSArray *)_map:(id(^)(id))hanlde ;
|
||||
|
||||
- (NSArray *)_filter:(BOOL(^)(id obj))handle ;
|
||||
- (BOOL)_contains:(BOOL(^)(id obj))handle;
|
||||
@end
|
||||
|
||||
|
||||
@@ -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
|
||||
Reference in New Issue
Block a user