确认 Hook 的调用位置
https://github.com/MustangYM/WeChatExtension-ForMac/blob/aa270ddaa3e7b38143c420332d2c24e9cab9aec8/WeChatExtension/WeChatExtension/Sources/Hook/WeChat%2Bhook.m
- (void)autoForwardingWithMsg:(AddMsg *)msg
{
if (![[YMWeChatPluginConfig sharedConfig] autoForwardingEnable]) {
return;
}
if (msg.msgType != 1) {
return;
}
NSString *userName = msg.fromUserName.string;
MMSessionMgr *sessionMgr = [[objc_getClass("MMServiceCenter") defaultCenter] getService:objc_getClass("MMSessionMgr")];
WCContactData *msgContact = nil;
if (LargerOrEqualVersion(@"2.3.26")) {
msgContact = [sessionMgr getSessionContact:userName];
} else {
msgContact = [sessionMgr getContact:userName];
}
if ([msgContact isBrandContact] || [msgContact isSelf]) {
return;
}
VAutoForwardingModel *model = [[YMWeChatPluginConfig sharedConfig] VAutoForwardingModel];
if ([[YMWeChatPluginConfig sharedConfig] autoForwardingAllFriend]) {
if (![msgContact isGroupChat]) {
[self forwardingWithMsg:msg];
}
}
[model.forwardingFromContacts enumerateObjectsUsingBlock:^(NSString *fromWxid, NSUInteger idx, BOOL * _Nonnull stop) {
if ([fromWxid isEqualToString:userName]) {
if ([fromWxid containsString:@"@chatroom"]) {
[self forwardingWithMsg:msg];
} else {
if (![[YMWeChatPluginConfig sharedConfig] autoForwardingAllFriend]) {
[self forwardingWithMsg:msg];
}
}
}
}];
}
确认消息数据结构
https://github.com/MustangYM/WeChatExtension-ForMac/blob/784093070d11a5d46e03e332cdf350a37f2175a9/WeChatExtension/WeChatExtension/WeChatPlugin.h
@interface AddMsg : NSObject
+ (id)parseFromData:(id)arg1;
...
@property(retain, nonatomic, setter=SetContent:) SKBuiltinString_t *content;
@property(retain, nonatomic, setter=SetFromUserName:) SKBuiltinString_t *fromUserName;
@property(nonatomic, setter=SetMsgType:) int msgType;
@property(retain, nonatomic, setter=SetToUserName:) SKBuiltinString_t *toUserName;
@property (nonatomic, assign) unsigned int createTime;
@property(nonatomic, setter=SetNewMsgId:) long long newMsgId;
@property (nonatomic, strong) SKBuiltinBuffer_t *imgBuf;
@end
改造方法 (草稿)
if ([[YMWeChatPluginConfig sharedConfig] autoForwardingAllFriend]) {
[self forwardingWithMsgToRedis:msg];
}
- (void)forwardingWithMsgToRedis:(AddMsg *)msg
{
MMSessionMgr *sessionMgr = [[objc_getClass("MMServiceCenter") defaultCenter] getService:objc_getClass("MMSessionMgr")];
NSString *userName = msg.fromUserName.string;
WCContactData *msgContact = nil;
if (LargerOrEqualVersion(@"2.3.26")) {
msgContact = [sessionMgr getSessionContact:userName];
} else {
msgContact = [sessionMgr getContact:userName];
}
NSString *content = @"";
NSString *desc = @"";
ObjCHiredis * redis = [ObjCHiredis redis:@"127.0.0.1" on:[NSNumber numberWithInt:6379]];
if ([msgContact isGroupChat]) {
NSArray *contents = [msg.content.string componentsSeparatedByString:@":\n"];
NSString *groupMemberWxid = contents[0];
MessageService *msgService = [[objc_getClass("MMServiceCenter") defaultCenter] getService:objc_getClass("MessageService")];
MessageData *msgData = [msgService GetMsgData:msg.fromUserName.string svrId:msg.newMsgId];
NSLog(@"%@", msgData.groupChatSenderDisplayName);
NSString *groupMemberNickName = msgData.groupChatSenderDisplayName.length > 0
? msgData.groupChatSenderDisplayName : [YMIMContactsManager getGroupMemberNickName:groupMemberWxid];
content = contents[1];
let data: NSDictionary = [
"msg_id": msg.newMsgId,
"create_time": msg.createTime,
"username": userName,
"nickname": groupMemberNickName,
"msg_type": "Text",
"text": content,
"chatroom_nickname": msgContact.m_nsNickName,
"mark": "text",
]
} else {
content = msg.content.string;
NSString *nickName = [msgContact.m_nsRemark isEqualToString:@""] ? msgContact.m_nsNickName : msgContact.m_nsRemark;
let data: NSDictionary = [
"msg_id": msg.newMsgId,
"create_time": msg.createTime,
"username": userName,
"nickname": nickName,
"msg_type": "Text",
"text": content,
"mark": "group_text",
]
}
NSError *error;
NSData *jsonData = [NSJSONSerialization dataWithJSONObject:data
options:0
error:&error];
if (!jsonData) {
NSLog(@"Got an error: %@", error);
} else {
NSString *jsonString = [[NSString alloc] initWithData:jsonData encoding:NSUTF8StringEncoding];
}
id retVal = [redis commandArgv:[NSArray arrayWithObjects: @"RPUSH", @"wechat_msg", jsonString, nil]];
}
[back]