mirror of
https://github.com/Sunnyyoung/WeChatTweak-macOS.git
synced 2025-07-07 07:56:06 +08:00
Add alfred support
This commit is contained in:
parent
2fa2542c22
commit
b1b947ed5c
2
Podfile
2
Podfile
|
@ -3,4 +3,6 @@ inhibit_all_warnings!
|
||||||
|
|
||||||
target 'WeChatTweak' do
|
target 'WeChatTweak' do
|
||||||
pod 'JRSwizzle'
|
pod 'JRSwizzle'
|
||||||
|
pod 'GCDWebServer'
|
||||||
|
pod 'YYModel'
|
||||||
end
|
end
|
||||||
|
|
10
Podfile.lock
10
Podfile.lock
|
@ -1,12 +1,20 @@
|
||||||
PODS:
|
PODS:
|
||||||
|
- GCDWebServer (3.4.1):
|
||||||
|
- GCDWebServer/Core (= 3.4.1)
|
||||||
|
- GCDWebServer/Core (3.4.1)
|
||||||
- JRSwizzle (1.0)
|
- JRSwizzle (1.0)
|
||||||
|
- YYModel (1.0.4)
|
||||||
|
|
||||||
DEPENDENCIES:
|
DEPENDENCIES:
|
||||||
|
- GCDWebServer
|
||||||
- JRSwizzle
|
- JRSwizzle
|
||||||
|
- YYModel
|
||||||
|
|
||||||
SPEC CHECKSUMS:
|
SPEC CHECKSUMS:
|
||||||
|
GCDWebServer: 1db60034fe0e78a4a8524bd6c7cd97cd3c589870
|
||||||
JRSwizzle: dd5ead5d913a0f29e7f558200165849f006bb1e3
|
JRSwizzle: dd5ead5d913a0f29e7f558200165849f006bb1e3
|
||||||
|
YYModel: 2a7fdd96aaa4b86a824e26d0c517de8928c04b30
|
||||||
|
|
||||||
PODFILE CHECKSUM: 19c0de41a7724720f663ad47eb3832778049a284
|
PODFILE CHECKSUM: af44d62b300e2c55cb63386ec4be3227b93c7761
|
||||||
|
|
||||||
COCOAPODS: 1.3.1
|
COCOAPODS: 1.3.1
|
||||||
|
|
|
@ -1,15 +1,22 @@
|
||||||
# WeChatTweak-macOS
|
# WeChatTweak-macOS
|
||||||
|
|
||||||
[](LICENSE)
|
[](LICENSE)
|
||||||
[](README.md)
|
[](README.md)
|
||||||
[](README-Chinese.md)
|
[](README-Chinese.md)
|
||||||
|
[](https://t.me/joinchat/B0vW8kPU5OrwdC1qRbaqRA)
|
||||||
|
|
||||||
微信 macOS 客户端 Tweak 动态库。
|
微信 macOS 客户端 Tweak 动态库。
|
||||||
|
|
||||||
## 截图
|
## 截图
|
||||||
|
|
||||||
|
### 整体预览
|
||||||
|
|
||||||

|

|
||||||
|
|
||||||
|
### Alfred workflow
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
## 功能
|
## 功能
|
||||||
|
|
||||||
- 阻止消息撤回
|
- 阻止消息撤回
|
||||||
|
@ -21,15 +28,17 @@
|
||||||
- 命令行执行:`open -n /Applications/WeChat.app`
|
- 命令行执行:`open -n /Applications/WeChat.app`
|
||||||
- 重新打开应用无需手机认证
|
- 重新打开应用无需手机认证
|
||||||
- UI界面设置面板
|
- UI界面设置面板
|
||||||
|
- 支持 Alfred workflow
|
||||||
|
|
||||||
## 使用
|
## 使用
|
||||||
|
|
||||||
- `sudo make install` 安装或者更新动态库
|
- `sudo make install` 安装或者更新动态库
|
||||||
- `sudo make uninstall` 卸载动态库
|
- `sudo make uninstall` 卸载动态库
|
||||||
|
- open `WeChat.workflow` 安装 Alfred workflow
|
||||||
|
|
||||||
## 文档
|
## 文档
|
||||||
|
|
||||||
获取更多信息, 请到 [wiki](https://github.com/Sunnyyoung/WeChatTweak-macOS/wiki)。
|
获取更多信息, 请到 [Wiki](https://github.com/Sunnyyoung/WeChatTweak-macOS/wiki)。
|
||||||
|
|
||||||
## 依赖
|
## 依赖
|
||||||
|
|
||||||
|
@ -40,6 +49,7 @@
|
||||||
|
|
||||||
- [微信 macOS 客户端无限多开功能实践](https://blog.sunnyyoung.net/wei-xin-macos-ke-hu-duan-wu-xian-duo-kai-gong-neng-shi-jian/)
|
- [微信 macOS 客户端无限多开功能实践](https://blog.sunnyyoung.net/wei-xin-macos-ke-hu-duan-wu-xian-duo-kai-gong-neng-shi-jian/)
|
||||||
- [微信 macOS 客户端拦截撤回功能实践](https://blog.sunnyyoung.net/wei-xin-macos-ke-hu-duan-lan-jie-che-hui-gong-neng-shi-jian/)
|
- [微信 macOS 客户端拦截撤回功能实践](https://blog.sunnyyoung.net/wei-xin-macos-ke-hu-duan-lan-jie-che-hui-gong-neng-shi-jian/)
|
||||||
|
- [让微信 macOS 客户端支持 Alfred](https://blog.sunnyyoung.net/rang-wei-xin-macos-ke-hu-duan-zhi-chi-alfred/)
|
||||||
|
|
||||||
## License
|
## License
|
||||||
|
|
||||||
|
|
14
README.md
14
README.md
|
@ -1,15 +1,22 @@
|
||||||
# WeChatTweak-macOS
|
# WeChatTweak-macOS
|
||||||
|
|
||||||
[](LICENSE)
|
[](LICENSE)
|
||||||
[](README.md)
|
[](README.md)
|
||||||
[](README-Chinese.md)
|
[](README-Chinese.md)
|
||||||
|
[](https://t.me/joinchat/B0vW8kPU5OrwdC1qRbaqRA)
|
||||||
|
|
||||||
A dynamic library tweak for WeChat macOS.
|
A dynamic library tweak for WeChat macOS.
|
||||||
|
|
||||||
## Screenshot
|
## Screenshot
|
||||||
|
|
||||||
|
### Overview
|
||||||
|
|
||||||

|

|
||||||
|
|
||||||
|
### Alfred workflow
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
## Feature
|
## Feature
|
||||||
|
|
||||||
- Prevent message revoked
|
- Prevent message revoked
|
||||||
|
@ -21,15 +28,17 @@ A dynamic library tweak for WeChat macOS.
|
||||||
- Run command: `open -n /Applications/WeChat.app`
|
- Run command: `open -n /Applications/WeChat.app`
|
||||||
- Auto login without authentication
|
- Auto login without authentication
|
||||||
- UI Interface settings panel
|
- UI Interface settings panel
|
||||||
|
- Alfred workflow support
|
||||||
|
|
||||||
## Quick Start
|
## Quick Start
|
||||||
|
|
||||||
- `sudo make install` Install or Upgrade the dylib
|
- `sudo make install` Install or Upgrade the dylib
|
||||||
- `sudo make uninstall` Uninstall the dylib
|
- `sudo make uninstall` Uninstall the dylib
|
||||||
|
- open `WeChat.workflow` Install Alfred workflow
|
||||||
|
|
||||||
## Documentation
|
## Documentation
|
||||||
|
|
||||||
For more informations, please go to the [wiki](https://github.com/Sunnyyoung/WeChatTweak-macOS/wiki).
|
For more informations, please go to the [Wiki](https://github.com/Sunnyyoung/WeChatTweak-macOS/wiki).
|
||||||
|
|
||||||
## Dependency
|
## Dependency
|
||||||
|
|
||||||
|
@ -40,6 +49,7 @@ For more informations, please go to the [wiki](https://github.com/Sunnyyoung/WeC
|
||||||
|
|
||||||
- [微信 macOS 客户端无限多开功能实践](https://blog.sunnyyoung.net/wei-xin-macos-ke-hu-duan-wu-xian-duo-kai-gong-neng-shi-jian/)
|
- [微信 macOS 客户端无限多开功能实践](https://blog.sunnyyoung.net/wei-xin-macos-ke-hu-duan-wu-xian-duo-kai-gong-neng-shi-jian/)
|
||||||
- [微信 macOS 客户端拦截撤回功能实践](https://blog.sunnyyoung.net/wei-xin-macos-ke-hu-duan-lan-jie-che-hui-gong-neng-shi-jian/)
|
- [微信 macOS 客户端拦截撤回功能实践](https://blog.sunnyyoung.net/wei-xin-macos-ke-hu-duan-lan-jie-che-hui-gong-neng-shi-jian/)
|
||||||
|
- [让微信 macOS 客户端支持 Alfred](https://blog.sunnyyoung.net/rang-wei-xin-macos-ke-hu-duan-zhi-chi-alfred/)
|
||||||
|
|
||||||
## License
|
## License
|
||||||
|
|
||||||
|
|
BIN
Screenshot/0x02.png
Normal file
BIN
Screenshot/0x02.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 45 KiB |
BIN
WeChat.alfredworkflow
Normal file
BIN
WeChat.alfredworkflow
Normal file
Binary file not shown.
Binary file not shown.
|
@ -7,6 +7,8 @@
|
||||||
objects = {
|
objects = {
|
||||||
|
|
||||||
/* Begin PBXBuildFile section */
|
/* Begin PBXBuildFile section */
|
||||||
|
7D14E5A41F6447DB00D75132 /* AlfredManager.h in Headers */ = {isa = PBXBuildFile; fileRef = 7D14E5A21F6447DB00D75132 /* AlfredManager.h */; };
|
||||||
|
7D14E5A51F6447DB00D75132 /* AlfredManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 7D14E5A31F6447DB00D75132 /* AlfredManager.m */; };
|
||||||
7DF8422C1F40583F00D42D79 /* WeChatTweak.h in Headers */ = {isa = PBXBuildFile; fileRef = 7DF8422A1F40583F00D42D79 /* WeChatTweak.h */; settings = {ATTRIBUTES = (Public, ); }; };
|
7DF8422C1F40583F00D42D79 /* WeChatTweak.h in Headers */ = {isa = PBXBuildFile; fileRef = 7DF8422A1F40583F00D42D79 /* WeChatTweak.h */; settings = {ATTRIBUTES = (Public, ); }; };
|
||||||
7DF842341F4058AB00D42D79 /* WeChatTweak.m in Sources */ = {isa = PBXBuildFile; fileRef = 7DF842331F4058AB00D42D79 /* WeChatTweak.m */; };
|
7DF842341F4058AB00D42D79 /* WeChatTweak.m in Sources */ = {isa = PBXBuildFile; fileRef = 7DF842331F4058AB00D42D79 /* WeChatTweak.m */; };
|
||||||
7DF842521F4058C600D42D79 /* TweakPreferecesController.h in Headers */ = {isa = PBXBuildFile; fileRef = 7DF8424F1F4058C600D42D79 /* TweakPreferecesController.h */; };
|
7DF842521F4058C600D42D79 /* TweakPreferecesController.h in Headers */ = {isa = PBXBuildFile; fileRef = 7DF8424F1F4058C600D42D79 /* TweakPreferecesController.h */; };
|
||||||
|
@ -38,6 +40,8 @@
|
||||||
|
|
||||||
/* Begin PBXFileReference section */
|
/* Begin PBXFileReference section */
|
||||||
153504EC5C9196C0D85213CF /* libPods-WeChatTweak.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libPods-WeChatTweak.a"; sourceTree = BUILT_PRODUCTS_DIR; };
|
153504EC5C9196C0D85213CF /* libPods-WeChatTweak.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libPods-WeChatTweak.a"; sourceTree = BUILT_PRODUCTS_DIR; };
|
||||||
|
7D14E5A21F6447DB00D75132 /* AlfredManager.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AlfredManager.h; sourceTree = "<group>"; };
|
||||||
|
7D14E5A31F6447DB00D75132 /* AlfredManager.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = AlfredManager.m; sourceTree = "<group>"; };
|
||||||
7DF842271F40583F00D42D79 /* WeChatTweak.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = WeChatTweak.framework; sourceTree = BUILT_PRODUCTS_DIR; };
|
7DF842271F40583F00D42D79 /* WeChatTweak.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = WeChatTweak.framework; sourceTree = BUILT_PRODUCTS_DIR; };
|
||||||
7DF8422A1F40583F00D42D79 /* WeChatTweak.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = WeChatTweak.h; sourceTree = "<group>"; };
|
7DF8422A1F40583F00D42D79 /* WeChatTweak.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = WeChatTweak.h; sourceTree = "<group>"; };
|
||||||
7DF8422B1F40583F00D42D79 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = "<group>"; };
|
7DF8422B1F40583F00D42D79 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = "<group>"; };
|
||||||
|
@ -75,6 +79,15 @@
|
||||||
name = Frameworks;
|
name = Frameworks;
|
||||||
sourceTree = "<group>";
|
sourceTree = "<group>";
|
||||||
};
|
};
|
||||||
|
7D14E5A11F6447B900D75132 /* Manager */ = {
|
||||||
|
isa = PBXGroup;
|
||||||
|
children = (
|
||||||
|
7D14E5A21F6447DB00D75132 /* AlfredManager.h */,
|
||||||
|
7D14E5A31F6447DB00D75132 /* AlfredManager.m */,
|
||||||
|
);
|
||||||
|
name = Manager;
|
||||||
|
sourceTree = "<group>";
|
||||||
|
};
|
||||||
7DF8421D1F40583F00D42D79 = {
|
7DF8421D1F40583F00D42D79 = {
|
||||||
isa = PBXGroup;
|
isa = PBXGroup;
|
||||||
children = (
|
children = (
|
||||||
|
@ -98,6 +111,7 @@
|
||||||
children = (
|
children = (
|
||||||
7DF8422A1F40583F00D42D79 /* WeChatTweak.h */,
|
7DF8422A1F40583F00D42D79 /* WeChatTweak.h */,
|
||||||
7DF842331F4058AB00D42D79 /* WeChatTweak.m */,
|
7DF842331F4058AB00D42D79 /* WeChatTweak.m */,
|
||||||
|
7D14E5A11F6447B900D75132 /* Manager */,
|
||||||
7DF842551F4058C900D42D79 /* Controller */,
|
7DF842551F4058C900D42D79 /* Controller */,
|
||||||
7DF842561F4058D300D42D79 /* Category */,
|
7DF842561F4058D300D42D79 /* Category */,
|
||||||
7DF842631F40594400D42D79 /* Resources */,
|
7DF842631F40594400D42D79 /* Resources */,
|
||||||
|
@ -162,6 +176,7 @@
|
||||||
files = (
|
files = (
|
||||||
7DF8422C1F40583F00D42D79 /* WeChatTweak.h in Headers */,
|
7DF8422C1F40583F00D42D79 /* WeChatTweak.h in Headers */,
|
||||||
7DF8425B1F4058DD00D42D79 /* NSBundle+WeChatTweak.h in Headers */,
|
7DF8425B1F4058DD00D42D79 /* NSBundle+WeChatTweak.h in Headers */,
|
||||||
|
7D14E5A41F6447DB00D75132 /* AlfredManager.h in Headers */,
|
||||||
7DF842601F40590500D42D79 /* WeChatTweakHeaders.h in Headers */,
|
7DF842601F40590500D42D79 /* WeChatTweakHeaders.h in Headers */,
|
||||||
7DF842521F4058C600D42D79 /* TweakPreferecesController.h in Headers */,
|
7DF842521F4058C600D42D79 /* TweakPreferecesController.h in Headers */,
|
||||||
7DF8425D1F4058DD00D42D79 /* NSString+WeChatTweak.h in Headers */,
|
7DF8425D1F4058DD00D42D79 /* NSString+WeChatTweak.h in Headers */,
|
||||||
|
@ -277,6 +292,7 @@
|
||||||
isa = PBXSourcesBuildPhase;
|
isa = PBXSourcesBuildPhase;
|
||||||
buildActionMask = 2147483647;
|
buildActionMask = 2147483647;
|
||||||
files = (
|
files = (
|
||||||
|
7D14E5A51F6447DB00D75132 /* AlfredManager.m in Sources */,
|
||||||
7DF8425E1F4058DD00D42D79 /* NSString+WeChatTweak.m in Sources */,
|
7DF8425E1F4058DD00D42D79 /* NSString+WeChatTweak.m in Sources */,
|
||||||
7DF842531F4058C600D42D79 /* TweakPreferecesController.m in Sources */,
|
7DF842531F4058C600D42D79 /* TweakPreferecesController.m in Sources */,
|
||||||
7DF842341F4058AB00D42D79 /* WeChatTweak.m in Sources */,
|
7DF842341F4058AB00D42D79 /* WeChatTweak.m in Sources */,
|
||||||
|
|
23
WeChatTweak/AlfredManager.h
Normal file
23
WeChatTweak/AlfredManager.h
Normal file
|
@ -0,0 +1,23 @@
|
||||||
|
//
|
||||||
|
// AlfredManager.h
|
||||||
|
// WeChatTweak
|
||||||
|
//
|
||||||
|
// Created by Sunnyyoung on 2017/9/10.
|
||||||
|
// Copyright © 2017年 Sunnyyoung. All rights reserved.
|
||||||
|
//
|
||||||
|
|
||||||
|
#import <Cocoa/Cocoa.h>
|
||||||
|
#import <objc/runtime.h>
|
||||||
|
#import <objc/message.h>
|
||||||
|
#import <YYModel/YYModel.h>
|
||||||
|
#import <GCDWebServer/GCDWebServer.h>
|
||||||
|
#import <GCDWebServer/GCDWebServerDataResponse.h>
|
||||||
|
|
||||||
|
@interface AlfredManager : NSObject
|
||||||
|
|
||||||
|
+ (instancetype)sharedInstance;
|
||||||
|
|
||||||
|
- (void)startListener;
|
||||||
|
- (void)stopListener;
|
||||||
|
|
||||||
|
@end
|
102
WeChatTweak/AlfredManager.m
Normal file
102
WeChatTweak/AlfredManager.m
Normal file
|
@ -0,0 +1,102 @@
|
||||||
|
//
|
||||||
|
// AlfredManager.m
|
||||||
|
// WeChatTweak
|
||||||
|
//
|
||||||
|
// Created by Sunnyyoung on 2017/9/10.
|
||||||
|
// Copyright © 2017年 Sunnyyoung. All rights reserved.
|
||||||
|
//
|
||||||
|
|
||||||
|
#import "AlfredManager.h"
|
||||||
|
#import "WeChatTweakHeaders.h"
|
||||||
|
|
||||||
|
@interface AlfredManager()
|
||||||
|
|
||||||
|
@property (nonatomic, strong, nullable) GCDWebServer *server;
|
||||||
|
|
||||||
|
@end
|
||||||
|
|
||||||
|
@implementation AlfredManager
|
||||||
|
|
||||||
|
+ (instancetype)sharedInstance {
|
||||||
|
static dispatch_once_t onceToken;
|
||||||
|
static AlfredManager *shared;
|
||||||
|
dispatch_once(&onceToken, ^{
|
||||||
|
shared = [[AlfredManager alloc] init];
|
||||||
|
});
|
||||||
|
return shared;
|
||||||
|
}
|
||||||
|
|
||||||
|
- (void)startListener {
|
||||||
|
if (self.server != nil) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
self.server = [[GCDWebServer alloc] init];
|
||||||
|
// Search contancts
|
||||||
|
[self.server addHandlerForMethod:@"GET" path:@"/wechat/search" requestClass:[GCDWebServerRequest class] processBlock:^GCDWebServerResponse * _Nullable(__kindof GCDWebServerRequest * _Nonnull request) {
|
||||||
|
NSString *keyword = [request.query[@"keyword"] lowercaseString] ? : @"";
|
||||||
|
NSArray<WCContactData *> *contacts = ({
|
||||||
|
MMServiceCenter *serviceCenter = [objc_getClass("MMServiceCenter") defaultCenter];
|
||||||
|
ContactStorage *contactStorage = [serviceCenter getService:objc_getClass("ContactStorage")];
|
||||||
|
GroupStorage *groupStorage = [serviceCenter getService:objc_getClass("GroupStorage")];
|
||||||
|
NSMutableArray<WCContactData *> *array = [NSMutableArray array];
|
||||||
|
[array addObjectsFromArray:[contactStorage GetAllFriendContacts]];
|
||||||
|
[array addObjectsFromArray:[groupStorage GetAllGroups]];
|
||||||
|
array;
|
||||||
|
});
|
||||||
|
NSArray<WCContactData *> *results = ({
|
||||||
|
NSMutableArray<WCContactData *> *results = [NSMutableArray array];
|
||||||
|
for (WCContactData *contact in contacts) {
|
||||||
|
BOOL isFriend = contact.m_uiBrandSubscriptionSettings == 0;
|
||||||
|
BOOL containsNickName = [contact.m_nsNickName.lowercaseString containsString:keyword];
|
||||||
|
BOOL containsUsername = [contact.m_nsUsrName.lowercaseString containsString:keyword];
|
||||||
|
BOOL containsAliasName = [contact.m_nsAliasName.lowercaseString containsString:keyword];
|
||||||
|
BOOL containsRemark = [contact.m_nsRemark.lowercaseString containsString:keyword];
|
||||||
|
BOOL containsNickNamePinyin = [contact.m_nsFullPY.lowercaseString containsString:keyword];
|
||||||
|
BOOL containsRemarkPinyin = [contact.m_nsRemarkPYFull.lowercaseString containsString:keyword];
|
||||||
|
BOOL matchRemarkShortPinyin = [contact.m_nsRemarkPYShort.lowercaseString isEqualToString:keyword];
|
||||||
|
if (isFriend && (containsNickName || containsUsername || containsAliasName || containsRemark || containsNickNamePinyin || containsRemarkPinyin || matchRemarkShortPinyin)) {
|
||||||
|
[results addObject:contact];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
results;
|
||||||
|
});
|
||||||
|
return [GCDWebServerDataResponse responseWithJSONObject:[results yy_modelToJSONObject]];
|
||||||
|
}];
|
||||||
|
// Start chat
|
||||||
|
[self.server addHandlerForMethod:@"GET" path:@"/wechat/start" requestClass:[GCDWebServerRequest class] processBlock:^GCDWebServerResponse * _Nullable(__kindof GCDWebServerRequest * _Nonnull request) {
|
||||||
|
WCContactData *contact = ({
|
||||||
|
NSString *session = request.query[@"session"];
|
||||||
|
WCContactData *contact = nil;
|
||||||
|
if (session != nil) {
|
||||||
|
MMServiceCenter *serviceCenter = [objc_getClass("MMServiceCenter") defaultCenter];
|
||||||
|
if ([session rangeOfString:@"@chatroom"].location == NSNotFound) {
|
||||||
|
ContactStorage *contactStorage = [serviceCenter getService:objc_getClass("ContactStorage")];
|
||||||
|
contact = [contactStorage GetContact:session];
|
||||||
|
} else {
|
||||||
|
GroupStorage *groupStorage = [serviceCenter getService:objc_getClass("GroupStorage")];
|
||||||
|
contact = [groupStorage GetGroupContact:session];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
contact;
|
||||||
|
});
|
||||||
|
dispatch_async(dispatch_get_main_queue(), ^{
|
||||||
|
[[objc_getClass("WeChat") sharedInstance] startANewChatWithContact:contact];
|
||||||
|
[[objc_getClass("WeChat") sharedInstance] showMainWindow];
|
||||||
|
[[NSApplication sharedApplication] activateIgnoringOtherApps: YES];
|
||||||
|
});
|
||||||
|
return [GCDWebServerResponse responseWithStatusCode:200];
|
||||||
|
}];
|
||||||
|
[self.server startWithOptions:@{GCDWebServerOption_Port: @(48065),
|
||||||
|
GCDWebServerOption_BindToLocalhost: @(YES)} error:nil];
|
||||||
|
}
|
||||||
|
|
||||||
|
- (void)stopListener {
|
||||||
|
if (self.server == nil) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
[self.server stop];
|
||||||
|
[self.server removeAllHandlers];
|
||||||
|
self.server = nil;
|
||||||
|
}
|
||||||
|
|
||||||
|
@end
|
|
@ -11,6 +11,7 @@
|
||||||
#import "NSBundle+WeChatTweak.h"
|
#import "NSBundle+WeChatTweak.h"
|
||||||
#import "NSString+WeChatTweak.h"
|
#import "NSString+WeChatTweak.h"
|
||||||
#import "TweakPreferecesController.h"
|
#import "TweakPreferecesController.h"
|
||||||
|
#import "AlfredManager.h"
|
||||||
|
|
||||||
@implementation NSObject (WeChatTweak)
|
@implementation NSObject (WeChatTweak)
|
||||||
|
|
||||||
|
@ -41,12 +42,11 @@ static void __attribute__((constructor)) tweak(void) {
|
||||||
data.msgStatus = 4;
|
data.msgStatus = 4;
|
||||||
data.toUsrName = localMessageData.toUsrName;
|
data.toUsrName = localMessageData.toUsrName;
|
||||||
data.fromUsrName = localMessageData.fromUsrName;
|
data.fromUsrName = localMessageData.fromUsrName;
|
||||||
|
data.mesLocalID = localMessageData.mesLocalID;
|
||||||
data.msgCreateTime = localMessageData.msgCreateTime;
|
data.msgCreateTime = localMessageData.msgCreateTime;
|
||||||
if ([localMessageData isSendFromSelf]) {
|
if ([localMessageData isSendFromSelf]) {
|
||||||
data.mesLocalID = localMessageData.mesLocalID;
|
|
||||||
data.msgContent = replaceMessage;
|
data.msgContent = replaceMessage;
|
||||||
} else {
|
} else {
|
||||||
data.mesLocalID = localMessageData.mesLocalID;
|
|
||||||
data.msgContent = [NSString stringWithFormat:@"[已拦截]\n%@", replaceMessage];
|
data.msgContent = [NSString stringWithFormat:@"[已拦截]\n%@", replaceMessage];
|
||||||
}
|
}
|
||||||
data;
|
data;
|
||||||
|
@ -77,7 +77,6 @@ static void __attribute__((constructor)) tweak(void) {
|
||||||
[((MessageService *)self) AddLocalMsg:session msgData:promptMessageData];
|
[((MessageService *)self) AddLocalMsg:session msgData:promptMessageData];
|
||||||
} else {
|
} else {
|
||||||
[((MessageService *)self) AddLocalMsg:session msgData:promptMessageData];
|
[((MessageService *)self) AddLocalMsg:session msgData:promptMessageData];
|
||||||
[((MessageService *)self) notifyAddMsgOnMainThread:session msgData:promptMessageData];
|
|
||||||
}
|
}
|
||||||
// Deliver notification
|
// Deliver notification
|
||||||
if (![localMessageData isSendFromSelf]) {
|
if (![localMessageData isSendFromSelf]) {
|
||||||
|
@ -125,6 +124,7 @@ static void __attribute__((constructor)) tweak(void) {
|
||||||
[accountService AutoAuth];
|
[accountService AutoAuth];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
[[AlfredManager sharedInstance] startListener];
|
||||||
}
|
}
|
||||||
|
|
||||||
- (NSApplicationTerminateReply)tweak_applicationShouldTerminate:(NSApplication *)sender {
|
- (NSApplicationTerminateReply)tweak_applicationShouldTerminate:(NSApplication *)sender {
|
||||||
|
|
|
@ -9,6 +9,22 @@
|
||||||
#import <Foundation/Foundation.h>
|
#import <Foundation/Foundation.h>
|
||||||
#import <Cocoa/Cocoa.h>
|
#import <Cocoa/Cocoa.h>
|
||||||
|
|
||||||
|
@interface WeChat : NSObject
|
||||||
|
|
||||||
|
+ (instancetype)sharedInstance;
|
||||||
|
- (void)lock:(id)block;
|
||||||
|
- (void)showMainWindow;
|
||||||
|
- (void)startANewChatWithContact:(id)contact;
|
||||||
|
|
||||||
|
@end
|
||||||
|
|
||||||
|
@interface MMSearchResultItem : NSObject
|
||||||
|
|
||||||
|
@property(nonatomic) unsigned long long type; // 0 is single chat, 1 is group chat
|
||||||
|
@property(readonly, nonatomic) NSString *identifier;
|
||||||
|
|
||||||
|
@end
|
||||||
|
|
||||||
@interface MessageData: NSObject
|
@interface MessageData: NSObject
|
||||||
|
|
||||||
@property(nonatomic) unsigned int messageType;
|
@property(nonatomic) unsigned int messageType;
|
||||||
|
@ -25,7 +41,14 @@
|
||||||
|
|
||||||
@interface WCContactData : NSObject
|
@interface WCContactData : NSObject
|
||||||
|
|
||||||
|
@property(nonatomic) unsigned int m_uiBrandSubscriptionSettings;
|
||||||
@property(retain, nonatomic) NSString *m_nsNickName;
|
@property(retain, nonatomic) NSString *m_nsNickName;
|
||||||
|
@property(retain, nonatomic) NSString *m_nsUsrName;
|
||||||
|
@property(retain, nonatomic) NSString *m_nsAliasName;
|
||||||
|
@property(retain, nonatomic) NSString *m_nsRemark;
|
||||||
|
@property(retain, nonatomic) NSString *m_nsFullPY;
|
||||||
|
@property(retain, nonatomic) NSString *m_nsRemarkPYShort;
|
||||||
|
@property(retain, nonatomic) NSString *m_nsRemarkPYFull;
|
||||||
|
|
||||||
- (BOOL)isChatStatusNotifyOpen;
|
- (BOOL)isChatStatusNotifyOpen;
|
||||||
|
|
||||||
|
@ -33,20 +56,22 @@
|
||||||
|
|
||||||
@interface ContactStorage : NSObject
|
@interface ContactStorage : NSObject
|
||||||
|
|
||||||
- (id)GetContact:(id)arg1;
|
- (WCContactData *)GetContact:(NSString *)session;
|
||||||
|
- (NSArray<WCContactData *> *)GetAllFriendContacts;
|
||||||
|
|
||||||
@end
|
@end
|
||||||
|
|
||||||
@interface GroupStorage: NSObject
|
@interface GroupStorage: NSObject
|
||||||
|
|
||||||
- (id)GetGroupContact:(id)arg1;
|
- (WCContactData *)GetGroupContact:(NSString *)session;
|
||||||
|
- (NSArray<WCContactData *> *)GetAllGroups;
|
||||||
|
|
||||||
@end
|
@end
|
||||||
|
|
||||||
@interface MMServiceCenter : NSObject
|
@interface MMServiceCenter : NSObject
|
||||||
|
|
||||||
+ (id)defaultCenter;
|
+ (id)defaultCenter;
|
||||||
- (id)getService:(Class)arg1;
|
- (id)getService:(Class)name;
|
||||||
|
|
||||||
@end
|
@end
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue
Block a user