Merge branch 'lich0821:master' into master
This commit is contained in:
commit
fd9dd2ab64
36
.github/workflows/Build-WeChatFerry.yml
vendored
36
.github/workflows/Build-WeChatFerry.yml
vendored
@ -40,34 +40,47 @@ jobs:
|
||||
pip install grpcio-tools==1.48.2
|
||||
|
||||
- name: 设置缓存
|
||||
id: cache-dependencies
|
||||
id: cache-vcpkg
|
||||
uses: actions/cache@v4
|
||||
with:
|
||||
path: |
|
||||
C:/Tools/vcpkg
|
||||
key: ${{ runner.os }}-dependencies-${{ hashFiles('**/WeChatFerry/spy/spy.rc') }}
|
||||
${{ github.workspace }}/WeChatFerry/vcpkg_installed
|
||||
key: ${{ runner.os }}-vcpkg-${{ hashFiles('WeChatFerry/vcpkg.json') }}
|
||||
restore-keys: |
|
||||
${{ runner.os }}-dependencies-
|
||||
${{ runner.os }}-vcpkg-
|
||||
|
||||
- name: 安装 vcpkg 和依赖项
|
||||
- name: 安装 vcpkg 并初始化依赖项
|
||||
run: |
|
||||
# 设置 vcpkg 目录
|
||||
if (!(Test-Path -Path 'C:/Tools')) {
|
||||
New-Item -ItemType Directory -Force -Path 'C:/Tools'
|
||||
}
|
||||
cd C:/Tools
|
||||
|
||||
# 克隆并引导 vcpkg
|
||||
if (!(Test-Path -Path 'C:/Tools/vcpkg')) {
|
||||
git clone https://github.com/microsoft/vcpkg
|
||||
}
|
||||
.\vcpkg\bootstrap-vcpkg.bat
|
||||
.\vcpkg\vcpkg install protobuf[zlib]:x64-windows-static
|
||||
.\vcpkg\vcpkg install spdlog:x64-windows-static
|
||||
.\vcpkg\vcpkg install nng:x64-windows-static
|
||||
.\vcpkg\vcpkg install magic-enum:x64-windows-static
|
||||
.\vcpkg\vcpkg install minhook:x64-windows-static
|
||||
.\vcpkg\vcpkg integrate install
|
||||
|
||||
# 设置 VCPKG_ROOT 环境变量
|
||||
echo "VCPKG_ROOT=C:/Tools/vcpkg" >> $GITHUB_ENV
|
||||
$env:VCPKG_ROOT = 'C:/Tools/vcpkg'
|
||||
|
||||
# 将 vcpkg 与 Visual Studio 集成
|
||||
C:/Tools/vcpkg/vcpkg integrate install
|
||||
|
||||
# 返回到项目目录并安装依赖
|
||||
cd ${{ github.workspace }}/WeChatFerry
|
||||
C:/Tools/vcpkg/vcpkg install --triplet x64-windows-static
|
||||
|
||||
- name: 解析并构建配置
|
||||
run: |
|
||||
$configurations = "Release,Debug".Split(',')
|
||||
foreach ($config in $configurations) {
|
||||
Write-Host "Building configuration: $config"
|
||||
msbuild WeChatFerry/WeChatFerry.sln /p:Configuration=$config /p:Platform="x64" /verbosity:detailed
|
||||
msbuild WeChatFerry/WeChatFerry.sln /p:Configuration=$config /p:Platform="x64" /p:VcpkgTriplet="x64-windows-static" /p:VcpkgEnableManifest=true /verbosity:minimal
|
||||
}
|
||||
shell: pwsh
|
||||
|
||||
@ -75,7 +88,6 @@ jobs:
|
||||
run: |
|
||||
New-Item -ItemType Directory -Force -Path "WeChatFerry/tmp"
|
||||
Compress-Archive -Path "WeChatFerry/Out/sdk.dll", "WeChatFerry/Out/spy.dll", "WeChatFerry/Out/spy_debug.dll" -DestinationPath "WeChatFerry/tmp/v${{ env.version }}.zip"
|
||||
# Compress-Archive -Path "WeChatFerry/Out/*" -DestinationPath "WeChatFerry/tmp/v${{ env.version }}-debug.zip"
|
||||
Invoke-WebRequest -Uri "https://github.com/tom-snow/wechat-windows-versions/releases/download/v${{ env.wechat_version }}/WeChatSetup-${{ env.wechat_version }}.exe" -OutFile "WeChatFerry/tmp/WeChatSetup-${{ env.wechat_version }}.exe"
|
||||
shell: pwsh
|
||||
|
||||
|
1
.gitignore
vendored
1
.gitignore
vendored
@ -20,6 +20,7 @@ Out/
|
||||
build/
|
||||
logs/
|
||||
java/wcferry/bin/
|
||||
vcpkg_installed/
|
||||
|
||||
*_pb2_grpc.py
|
||||
__pycache__
|
||||
|
53
README.MD
53
README.MD
@ -16,7 +16,7 @@
|
||||
|
||||
</details>
|
||||
|
||||
|[📖 Python 文档](https://wechatferry.readthedocs.io/)|[📺 Python 视频教程](https://mp.weixin.qq.com/s/APdjGyZ2hllXxyG_sNCfXQ)|[🙋 FAQ](https://mp.weixin.qq.com/s/Y2Q37VYV730Iu9TrgiCmCw)|
|
||||
|[📖 Python 文档](https://wechatferry.readthedocs.io/)|[📺 Python 视频教程](https://mp.weixin.qq.com/s/APdjGyZ2hllXxyG_sNCfXQ)|[🙋 FAQ](https://mp.weixin.qq.com/s/YvgFFhF6D-79kXDzRqtg6w)|
|
||||
|:-:|:-:|:-:|
|
||||
|
||||
👉 [WeChatRobot🤖](https://github.com/lich0821/WeChatRobot),一个基于 WeChatFerry 的 Python 机器人框架。
|
||||
@ -27,6 +27,7 @@
|
||||
|
||||
<details><summary>点击查看功能清单</summary>
|
||||
|
||||
* 获取登录二维码
|
||||
* 查询登录状态
|
||||
* 获取登录账号信息
|
||||
* 获取消息类型
|
||||
@ -38,6 +39,7 @@
|
||||
* 发送图片消息
|
||||
* 发送文件消息
|
||||
* 发送卡片消息
|
||||
* 发送 XML 消息
|
||||
* 发送 GIF 消息
|
||||
* 拍一拍群友
|
||||
* 转发消息
|
||||
@ -61,6 +63,10 @@
|
||||
|
||||
</details>
|
||||
|
||||
## 感谢大佬们贡献代码
|
||||
|
||||
<a href="https://github.com/lich0821/WeChatFerry/graphs/contributors"></a>
|
||||
|
||||
## 快速开始
|
||||
### Python
|
||||
[](https://pypi.python.org/pypi/wcferry) [](https://pypi.python.org/pypi/wcferry) [](https://wechatferry.readthedocs.io/zh/latest/?badge=latest)
|
||||
@ -75,6 +81,7 @@ pip install --upgrade wcferry
|
||||
### HTTP
|
||||
* [wcfrust](https://github.com/lich0821/wcf-client-rust)(基于 Rust)
|
||||
* [go_wcf_http](clients/go_wcf_http/README.MD)(基于 Go)
|
||||
* [wcf-http](https://github.com/yuxiaoli/wcf-http)(基于 Python)
|
||||
|
||||
### Java
|
||||
* [java](clients/java/wcferry/README.MD)
|
||||
@ -97,6 +104,7 @@ pip install --upgrade wcferry
|
||||
## 一起开发
|
||||
|
||||
> 🚫 非开发用户不需要往下看。
|
||||
>
|
||||
> **开发用户**:可以根据文档和错误提示,自行解决编译错误的人员。
|
||||
|
||||
### 安装开发环境
|
||||
@ -114,26 +122,27 @@ git clone https://github.com/microsoft/vcpkg
|
||||
```
|
||||
|
||||
* 添加全局配置:
|
||||
环境变量增加 `vcpkg` 所在路径(本项目为:`C:\Tools\vcpkg`)。
|
||||
环境变量增加 `vcpkg` 所在路径(本文为:`C:\Tools\vcpkg`):
|
||||
```sh
|
||||
setx VCPKG_ROOT "C:/Tools/vcpkg" /M
|
||||
```
|
||||
|
||||
* 与 Visual Studio 集成
|
||||
```sh
|
||||
vcpkg integrate install # 失败则说明未正确安装或者未正确配置环境变量
|
||||
```
|
||||
|
||||
#### 安装相关组件
|
||||
|
||||
```sh
|
||||
vcpkg install protobuf[zlib]:x64-windows-static
|
||||
vcpkg install spdlog:x64-windows-static
|
||||
vcpkg install nng:x64-windows-static
|
||||
vcpkg install magic-enum:x64-windows-static
|
||||
vcpkg install minhook:x64-windows-static
|
||||
vcpkg integrate install
|
||||
```
|
||||
编译时会自动安装。但如果需要使用 `protoc.exe`,则需要配置一下 `protoc.exe` 环境变量:`<vcpkg_package_installed_path>\x64-windows-static\x64-windows-static\tools\protobuf`。
|
||||
|
||||
安装完毕后,需要配置 protoc 的环境变量,并确保在命令行下可用,protoc 的路径在 `<vcpkg_install_path>\installed\x86-windows-static\tools\protobuf`
|
||||
(本文为:`C:\Projs\WeChatFerry\WeChatFerry\vcpkg_installed\x64-windows-static\x64-windows-static\tools\protobuf`)
|
||||
|
||||
#### 安装 VS2019
|
||||
|
||||
#### 安装 Python3
|
||||
|
||||
通过微软商店或者 python.org 自行下载均可,注意配置好环境变量,确保 `python3` 在命令行下可用。
|
||||
通过微软商店或者 python.org 自行下载均可(注意 `python` 版本不能太高,否则需要自行编译依赖,建议使用 python 3.10),然后配置好环境变量,确保 `python` 在命令行下可用。
|
||||
|
||||
安装依赖:
|
||||
```sh
|
||||
@ -202,9 +211,9 @@ WeChatFerry
|
||||
|
||||
## 版本更新
|
||||
|
||||
### v39.2.4
|
||||
### v39.3.4
|
||||
|
||||
* 修复 wxid 问题
|
||||
* 实现获取登录二维码
|
||||
|
||||
<details><summary>点击查看更多</summary>
|
||||
|
||||
@ -216,6 +225,22 @@ WeChatFerry
|
||||
* `y` 是 `WeChatFerry` 的版本,从 0 开始
|
||||
* `z` 是各客户端的版本,从 0 开始
|
||||
|
||||
### v39.3.3
|
||||
|
||||
* 修复发送文件 / 图片中文路径问题
|
||||
|
||||
### v39.3.2
|
||||
|
||||
* 修复接收消息问题
|
||||
|
||||
### v39.3.0
|
||||
|
||||
* 适配 `3.9.11.25`
|
||||
|
||||
### v39.2.4
|
||||
|
||||
* 修复 wxid 问题
|
||||
|
||||
### v39.2.3
|
||||
|
||||
* 实现发送 GIF
|
||||
|
@ -14,7 +14,11 @@ void InitLogger(std::string path)
|
||||
if (logger != nullptr) {
|
||||
return;
|
||||
}
|
||||
|
||||
// check and create logs folder
|
||||
std::filesystem::path logDir = std::filesystem::path(path) / "logs";
|
||||
if (!std::filesystem::exists(logDir)) {
|
||||
std::filesystem::create_directory(logDir);
|
||||
}
|
||||
auto filename = std::filesystem::path(path + LOGGER_FILE_NAME).make_preferred().string();
|
||||
try {
|
||||
logger = spdlog::rotating_logger_mt(LOGGER_NAME, filename, LOGGER_MAX_SIZE, LOGGER_MAX_FILES);
|
||||
|
@ -117,7 +117,7 @@ message XmlMsg
|
||||
string receiver = 1; // 消息接收人
|
||||
string content = 2; // xml 内容
|
||||
string path = 3; // 图片路径
|
||||
int32 type = 4; // 消息类型
|
||||
uint64 type = 4; // 消息类型
|
||||
}
|
||||
|
||||
message MsgTypes { map<int32, string> types = 1; }
|
||||
@ -234,3 +234,24 @@ message ForwardMsg
|
||||
uint64 id = 1 [ jstype = JS_STRING ]; // 待转发消息 ID
|
||||
string receiver = 2; // 转发接收目标,群为 roomId,个人为 wxid
|
||||
}
|
||||
|
||||
message RoomData
|
||||
{
|
||||
message RoomMember
|
||||
{
|
||||
string wxid = 1;
|
||||
optional string name = 2; // 群昵称
|
||||
int32 state = 3;
|
||||
}
|
||||
|
||||
repeated RoomMember members = 1;
|
||||
|
||||
optional int32 field_2 = 2;
|
||||
int32 field_3 = 3;
|
||||
optional int32 field_4 = 4;
|
||||
int32 capacity = 5;
|
||||
optional string field_6 = 6;
|
||||
int32 field_7 = 7;
|
||||
int32 field_8 = 8;
|
||||
repeated string admins = 9; // 管理员
|
||||
}
|
||||
|
@ -69,6 +69,9 @@
|
||||
<VcpkgUseStatic>true</VcpkgUseStatic>
|
||||
<VcpkgTriplet>x64-windows-static</VcpkgTriplet>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Label="Vcpkg">
|
||||
<VcpkgEnableManifest>true</VcpkgEnableManifest>
|
||||
</PropertyGroup>
|
||||
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
|
||||
<ClCompile>
|
||||
<WarningLevel>Level3</WarningLevel>
|
||||
@ -77,6 +80,7 @@
|
||||
<ConformanceMode>true</ConformanceMode>
|
||||
<PrecompiledHeader>Use</PrecompiledHeader>
|
||||
<PrecompiledHeaderFile>pch.h</PrecompiledHeaderFile>
|
||||
<AdditionalOptions>/utf-8 %(AdditionalOptions)</AdditionalOptions>
|
||||
</ClCompile>
|
||||
<Link>
|
||||
<SubSystem>Windows</SubSystem>
|
||||
@ -93,6 +97,7 @@
|
||||
<ConformanceMode>true</ConformanceMode>
|
||||
<PrecompiledHeader>Use</PrecompiledHeader>
|
||||
<PrecompiledHeaderFile>pch.h</PrecompiledHeaderFile>
|
||||
<AdditionalOptions>/utf-8 %(AdditionalOptions)</AdditionalOptions>
|
||||
</ClCompile>
|
||||
<Link>
|
||||
<SubSystem>Windows</SubSystem>
|
||||
@ -117,6 +122,7 @@
|
||||
<PrecompiledHeaderOutputFile />
|
||||
<SupportJustMyCode>true</SupportJustMyCode>
|
||||
<RuntimeLibrary>MultiThreaded</RuntimeLibrary>
|
||||
<AdditionalOptions>/utf-8 %(AdditionalOptions)</AdditionalOptions>
|
||||
</ClCompile>
|
||||
<Link>
|
||||
<SubSystem>Windows</SubSystem>
|
||||
|
@ -79,6 +79,9 @@
|
||||
<PropertyGroup Label="Vcpkg" Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
|
||||
<VcpkgUseStatic>true</VcpkgUseStatic>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Label="Vcpkg">
|
||||
<VcpkgEnableManifest>true</VcpkgEnableManifest>
|
||||
</PropertyGroup>
|
||||
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
|
||||
<ClCompile>
|
||||
<WarningLevel>Level3</WarningLevel>
|
||||
@ -96,7 +99,7 @@
|
||||
<FunctionLevelLinking>true</FunctionLevelLinking>
|
||||
<PrecompiledHeaderOutputFile />
|
||||
<DisableSpecificWarnings>4251;4731;4819</DisableSpecificWarnings>
|
||||
<AdditionalOptions>/EHa %(AdditionalOptions)</AdditionalOptions>
|
||||
<AdditionalOptions>/EHa /utf-8 %(AdditionalOptions)</AdditionalOptions>
|
||||
</ClCompile>
|
||||
<Link>
|
||||
<SubSystem>Windows</SubSystem>
|
||||
@ -145,7 +148,7 @@ xcopy /y $(OutDir)$(TargetFileName) $(SolutionDir)..\clients\python\wcferry</Com
|
||||
<PrecompiledHeaderOutputFile>
|
||||
</PrecompiledHeaderOutputFile>
|
||||
<DisableSpecificWarnings>4251;4731;4819</DisableSpecificWarnings>
|
||||
<AdditionalOptions>/EHa %(AdditionalOptions)</AdditionalOptions>
|
||||
<AdditionalOptions>/EHa /utf-8 %(AdditionalOptions)</AdditionalOptions>
|
||||
</ClCompile>
|
||||
<Link>
|
||||
<SubSystem>Windows</SubSystem>
|
||||
@ -192,7 +195,7 @@ xcopy /y $(OutDir)$(TargetFileName) $(SolutionDir)..\clients\python\wcferry</Com
|
||||
<OmitFramePointers>false</OmitFramePointers>
|
||||
<PrecompiledHeaderOutputFile />
|
||||
<DisableSpecificWarnings>4251;4731;4819</DisableSpecificWarnings>
|
||||
<AdditionalOptions>/EHa %(AdditionalOptions)</AdditionalOptions>
|
||||
<AdditionalOptions>/EHa /utf-8 %(AdditionalOptions)</AdditionalOptions>
|
||||
<RuntimeLibrary>MultiThreaded</RuntimeLibrary>
|
||||
</ClCompile>
|
||||
<Link>
|
||||
|
@ -9,10 +9,10 @@
|
||||
using namespace std;
|
||||
extern QWORD g_WeChatWinDllAddr;
|
||||
|
||||
#define OS_GET_CHATROOM_MGR 0x1C4E200
|
||||
#define OS_ADD_MEMBERS 0x221B8A0
|
||||
#define OS_DELETE_MEMBERS 0x221BEE0
|
||||
#define OS_INVITE_MEMBERS 0x221B280
|
||||
#define OS_GET_CHATROOM_MGR 0x1B83BD0
|
||||
#define OS_ADD_MEMBERS 0x2155100
|
||||
#define OS_DELETE_MEMBERS 0x2155740
|
||||
#define OS_INVITE_MEMBERS 0x2154AE0
|
||||
|
||||
typedef QWORD (*GetChatRoomMgr_t)();
|
||||
typedef QWORD (*AddMemberToChatRoom_t)(QWORD, QWORD, QWORD, QWORD);
|
||||
|
@ -7,8 +7,8 @@
|
||||
using namespace std;
|
||||
extern QWORD g_WeChatWinDllAddr;
|
||||
|
||||
#define OS_GET_CONTACT_MGR 0x1C0BDE0
|
||||
#define OS_GET_CONTACT_LIST 0x2265540
|
||||
#define OS_GET_CONTACT_MGR 0x1B417A0
|
||||
#define OS_GET_CONTACT_LIST 0x219ED10
|
||||
#define OS_CONTACT_BIN 0x200
|
||||
#define OS_CONTACT_BIN_LEN 0x208
|
||||
#define OS_CONTACT_WXID 0x10
|
||||
|
@ -5,16 +5,16 @@
|
||||
#include "sqlite3.h"
|
||||
#include "util.h"
|
||||
|
||||
#define OFFSET_DB_INSTANCE 0x5A40598
|
||||
#define OFFSET_DB_MICROMSG 0xb8
|
||||
#define OFFSET_DB_CHAT_MSG 0x2c8
|
||||
#define OFFSET_DB_MISC 0x5f0
|
||||
#define OFFSET_DB_EMOTION 0x15f0
|
||||
#define OFFSET_DB_INSTANCE 0x5902000
|
||||
#define OFFSET_DB_MICROMSG 0xB8
|
||||
#define OFFSET_DB_CHAT_MSG 0x2C8
|
||||
#define OFFSET_DB_MISC 0x5F0
|
||||
#define OFFSET_DB_EMOTION 0x15F0
|
||||
#define OFFSET_DB_MEDIA 0xF48
|
||||
#define OFFSET_DB_BIZCHAT_MSG 0x1A70
|
||||
#define OFFSET_DB_FUNCTION_MSG 0x1b98
|
||||
#define OFFSET_DB_FUNCTION_MSG 0x1B98
|
||||
#define OFFSET_DB_NAME 0x28
|
||||
#define OFFSET_DB_MSG_MGR 0x5ABB5D8
|
||||
#define OFFSET_DB_MSG_MGR 0x595F900
|
||||
|
||||
extern UINT64 g_WeChatWinDllAddr;
|
||||
|
||||
|
@ -24,17 +24,18 @@ extern QWORD g_WeChatWinDllAddr;
|
||||
#define HEADER_GIF1 0x47
|
||||
#define HEADER_GIF2 0x49
|
||||
|
||||
#define OS_LOGIN_STATUS 0x5AB86A8
|
||||
#define OS_GET_SNS_DATA_MGR 0x22A91C0
|
||||
#define OS_GET_SNS_FIRST_PAGE 0x2ED9080
|
||||
#define OS_GET_SNS_TIMELINE_MGR 0x2E6B110
|
||||
#define OS_GET_SNS_NEXT_PAGE 0x2EFEC00
|
||||
#define OS_NEW_CHAT_MSG 0x1C28800
|
||||
#define OS_FREE_CHAT_MSG 0x1C1FF10
|
||||
#define OS_GET_CHAT_MGR 0x1C51CF0
|
||||
#define OS_GET_MGR_BY_PREFIX_LOCAL_ID 0x2206280
|
||||
#define OS_GET_PRE_DOWNLOAD_MGR 0x1CD87E0
|
||||
#define OS_PUSH_ATTACH_TASK 0x1DA69C0
|
||||
#define OS_LOGIN_STATUS 0x595C9E8
|
||||
#define OS_GET_SNS_DATA_MGR 0x21E2200
|
||||
#define OS_GET_SNS_FIRST_PAGE 0x2E212D0
|
||||
#define OS_GET_SNS_TIMELINE_MGR 0x2DB3390
|
||||
#define OS_GET_SNS_NEXT_PAGE 0x2EC8970
|
||||
#define OS_NEW_CHAT_MSG 0x1B5E140
|
||||
#define OS_FREE_CHAT_MSG 0x1B55850
|
||||
#define OS_GET_CHAT_MGR 0x1B876C0
|
||||
#define OS_GET_MGR_BY_PREFIX_LOCAL_ID 0x213FB00
|
||||
#define OS_GET_PRE_DOWNLOAD_MGR 0x1C0EE70
|
||||
#define OS_PUSH_ATTACH_TASK 0x1CDF4E0
|
||||
#define OS_LOGIN_QR_CODE 0x59620D8
|
||||
|
||||
typedef QWORD (*GetSNSDataMgr_t)();
|
||||
typedef QWORD (*GetSnsTimeLineMgr_t)();
|
||||
@ -348,8 +349,17 @@ int RevokeMsg(QWORD id)
|
||||
|
||||
string GetLoginUrl()
|
||||
{
|
||||
char url[] = "方法还没实现";
|
||||
return "http://weixin.qq.com/x/" + string(url);
|
||||
LPVOID targetAddress = reinterpret_cast<LPBYTE>(g_WeChatWinDllAddr) + OS_LOGIN_QR_CODE;
|
||||
|
||||
char *dataPtr = *reinterpret_cast<char **>(targetAddress); // 读取指针内容
|
||||
if (!dataPtr) {
|
||||
LOG_ERROR("Failed to get login url");
|
||||
return "error";
|
||||
}
|
||||
|
||||
// 读取字符串内容
|
||||
std::string data(dataPtr, 22);
|
||||
return "http://weixin.qq.com/x/" + data;
|
||||
}
|
||||
|
||||
int ReceiveTransfer(string wxid, string transferid, string transactionid)
|
||||
|
@ -31,15 +31,15 @@ extern QWORD g_WeChatWinDllAddr;
|
||||
#define OS_RECV_MSG_THUMB 0x280
|
||||
#define OS_RECV_MSG_EXTRA 0x2A0
|
||||
#define OS_RECV_MSG_XML 0x308
|
||||
#define OS_RECV_MSG_CALL 0x2205510
|
||||
#define OS_RECV_MSG_CALL 0x213ED90
|
||||
#define OS_PYQ_MSG_START 0x30
|
||||
#define OS_PYQ_MSG_END 0x38
|
||||
#define OS_PYQ_MSG_TS 0x38
|
||||
#define OS_PYQ_MSG_XML 0x9B8
|
||||
#define OS_PYQ_MSG_SENDER 0x18
|
||||
#define OS_PYQ_MSG_CONTENT 0x48
|
||||
#define OS_PYQ_MSG_CALL 0x2EFAA10
|
||||
#define OS_WXLOG 0x26DA2D0
|
||||
#define OS_PYQ_MSG_CALL 0x2E42C90
|
||||
#define OS_WXLOG 0x2613D20
|
||||
|
||||
typedef QWORD (*RecvMsg_t)(QWORD, QWORD);
|
||||
typedef QWORD (*WxLog_t)(QWORD, QWORD, QWORD, QWORD, QWORD, QWORD, QWORD, QWORD, QWORD, QWORD, QWORD, QWORD);
|
||||
|
@ -252,7 +252,7 @@ bool func_send_img(char *path, char *receiver, uint8_t *out, size_t *len)
|
||||
if ((path == NULL) || (receiver == NULL)) {
|
||||
LOG_ERROR("Empty path or receiver.");
|
||||
rsp.msg.status = -1;
|
||||
} else if (!fs::exists(path)) {
|
||||
} else if (!fs::exists(String2Wstring(path))) {
|
||||
LOG_ERROR("Path does not exists: {}", path);
|
||||
rsp.msg.status = -2;
|
||||
} else {
|
||||
@ -279,11 +279,11 @@ bool func_send_file(char *path, char *receiver, uint8_t *out, size_t *len)
|
||||
if ((path == NULL) || (receiver == NULL)) {
|
||||
LOG_ERROR("Empty path or receiver.");
|
||||
rsp.msg.status = -1;
|
||||
} else if (!fs::exists(path)) {
|
||||
} else if (!fs::exists(String2Wstring(path))) {
|
||||
LOG_ERROR("Path does not exists: {}", path);
|
||||
rsp.msg.status = -2;
|
||||
} else {
|
||||
SendImageMessage(receiver, path);
|
||||
SendFileMessage(receiver, path);
|
||||
rsp.msg.status = 0;
|
||||
}
|
||||
|
||||
@ -321,7 +321,6 @@ bool func_send_emotion(char *path, char *receiver, uint8_t *out, size_t *len)
|
||||
return true;
|
||||
}
|
||||
|
||||
#if 0
|
||||
bool func_send_xml(XmlMsg xml, uint8_t *out, size_t *len)
|
||||
{
|
||||
Response rsp = Response_init_default;
|
||||
@ -335,7 +334,7 @@ bool func_send_xml(XmlMsg xml, uint8_t *out, size_t *len)
|
||||
string receiver(xml.receiver);
|
||||
string content(xml.content);
|
||||
string path(xml.path ? xml.path : "");
|
||||
uint32_t type = (uint32_t)xml.type;
|
||||
uint64_t type = (uint64_t)xml.type;
|
||||
SendXmlMessage(receiver, content, path, type);
|
||||
rsp.msg.status = 0;
|
||||
}
|
||||
@ -349,7 +348,6 @@ bool func_send_xml(XmlMsg xml, uint8_t *out, size_t *len)
|
||||
|
||||
return true;
|
||||
}
|
||||
#endif
|
||||
|
||||
bool func_send_rich_txt(RichText rt, uint8_t *out, size_t *len)
|
||||
{
|
||||
|
@ -1,4 +1,5 @@
|
||||
#include "framework.h"
|
||||
|
||||
#include "framework.h"
|
||||
#include <sstream>
|
||||
#include <vector>
|
||||
|
||||
@ -14,20 +15,22 @@ extern string GetSelfWxid(); // Defined in spy.cpp
|
||||
|
||||
#define SRTM_SIZE 0x3F0
|
||||
|
||||
#define OS_NEW 0x1C28800
|
||||
#define OS_FREE 0x1C1FF10
|
||||
#define OS_SEND_MSG_MGR 0x1C1E690
|
||||
#define OS_SEND_TEXT 0x238DDD0
|
||||
#define OS_SEND_IMAGE 0x2383560
|
||||
#define OS_GET_APP_MSG_MGR 0x1C23630
|
||||
#define OS_SEND_FILE 0x21969E0
|
||||
#define OS_RTM_NEW 0x1C27D50
|
||||
#define OS_RTM_FREE 0x1C27120
|
||||
#define OS_SEND_RICH_TEXT 0x21A09C0
|
||||
#define OS_SEND_PAT_MSG 0x2D669B0
|
||||
#define OS_FORWARD_MSG 0x238D350
|
||||
#define OS_GET_EMOTION_MGR 0x1C988D0
|
||||
#define OS_SEND_EMOTION 0x227B9E0
|
||||
#define OS_NEW 0x1B5E140
|
||||
#define OS_FREE 0x1B55850
|
||||
#define OS_SEND_MSG_MGR 0x1B53FD0
|
||||
#define OS_SEND_TEXT 0x22C6B60
|
||||
#define OS_SEND_IMAGE 0x22BC2F0
|
||||
#define OS_GET_APP_MSG_MGR 0x1B58F70
|
||||
#define OS_SEND_FILE 0x20D0230
|
||||
#define OS_RTM_NEW 0x1B5D690
|
||||
#define OS_RTM_FREE 0x1B5CA60
|
||||
#define OS_SEND_RICH_TEXT 0x20DA210
|
||||
#define OS_SEND_PAT_MSG 0x2CAEC00
|
||||
#define OS_FORWARD_MSG 0x22C60E0
|
||||
#define OS_GET_EMOTION_MGR 0x1BCEF10
|
||||
#define OS_SEND_EMOTION 0x21B52D5
|
||||
#define OS_XML_BUFSIGN 0x24F0D70
|
||||
#define OS_SEND_XML 0x20CF360
|
||||
|
||||
typedef QWORD (*New_t)(QWORD);
|
||||
typedef QWORD (*Free_t)(QWORD);
|
||||
@ -43,6 +46,9 @@ typedef QWORD (*ForwardMsg_t)(QWORD, QWORD, QWORD, QWORD);
|
||||
typedef QWORD (*GetEmotionMgr_t)();
|
||||
typedef QWORD (*SendEmotion_t)(QWORD, QWORD, QWORD, QWORD, QWORD, QWORD, QWORD, QWORD);
|
||||
|
||||
typedef QWORD (*XmlBufSign_t)(QWORD, QWORD, QWORD);
|
||||
typedef QWORD (*SendXmlMsg_t)(QWORD, QWORD, QWORD, QWORD, QWORD, QWORD, QWORD, QWORD, QWORD, QWORD);
|
||||
|
||||
void SendTextMessage(string wxid, string msg, string atWxids)
|
||||
{
|
||||
QWORD success = 0;
|
||||
@ -228,70 +234,40 @@ void SendEmotionMessage(string wxid, string path)
|
||||
SendEmotion(mgr, (QWORD)pWxPath, (QWORD)buff, (QWORD)pWxWxid, 2, (QWORD)buff, 0, (QWORD)buff);
|
||||
}
|
||||
|
||||
#if 0
|
||||
void SendXmlMessage(string receiver, string xml, string path, int type)
|
||||
void SendXmlMessage(string receiver, string xml, string path, QWORD type)
|
||||
{
|
||||
if (g_WeChatWinDllAddr == 0) {
|
||||
return;
|
||||
}
|
||||
|
||||
// 发送消息Call地址 = 微信基址 + 偏移
|
||||
DWORD sendXmlCall1 = g_WeChatWinDllAddr + g_WxCalls.sendXml.call1;
|
||||
DWORD sendXmlCall2 = g_WeChatWinDllAddr + g_WxCalls.sendXml.call2;
|
||||
DWORD sendXmlCall3 = g_WeChatWinDllAddr + g_WxCalls.sendXml.call3;
|
||||
DWORD sendXmlCall4 = g_WeChatWinDllAddr + g_WxCalls.sendXml.call4;
|
||||
DWORD sendXmlParam = g_WeChatWinDllAddr + g_WxCalls.sendXml.param;
|
||||
New_t funcNew = (New_t)(g_WeChatWinDllAddr + OS_NEW);
|
||||
Free_t funcFree = (Free_t)(g_WeChatWinDllAddr + OS_FREE);
|
||||
|
||||
char buffer[0xFF0] = { 0 };
|
||||
XmlBufSign_t xmlBufSign = (XmlBufSign_t)(g_WeChatWinDllAddr + OS_XML_BUFSIGN);
|
||||
SendXmlMsg_t sendXmlMsg = (SendXmlMsg_t)(g_WeChatWinDllAddr + OS_SEND_XML);
|
||||
|
||||
char buff[0x500] = { 0 };
|
||||
char buff2[0x500] = { 0 };
|
||||
char nullBuf[0x1C] = { 0 };
|
||||
|
||||
wstring wsSender = String2Wstring(GetSelfWxid());
|
||||
wstring wsReceiver = String2Wstring(receiver);
|
||||
wstring wsXml = String2Wstring(xml);
|
||||
QWORD pBuf = (QWORD)(&buff);
|
||||
QWORD pBuf2 = (QWORD)(&buff2);
|
||||
|
||||
WxString wxPath;
|
||||
WxString wxNull;
|
||||
WxString wxXml(wsXml);
|
||||
WxString wxSender(wsSender);
|
||||
WxString wxReceiver(wsReceiver);
|
||||
funcNew(pBuf);
|
||||
funcNew(pBuf2);
|
||||
|
||||
if (!path.empty()) {
|
||||
wstring wsPath = String2Wstring(path);
|
||||
wxPath = WxString(wsPath);
|
||||
}
|
||||
QWORD sbuf[4] = { 0, 0, 0, 0 };
|
||||
|
||||
DWORD sendtype = type;
|
||||
__asm {
|
||||
pushad;
|
||||
pushfd;
|
||||
lea ecx, buffer;
|
||||
call sendXmlCall1;
|
||||
mov eax, [sendtype];
|
||||
push eax;
|
||||
lea eax, nullBuf;
|
||||
lea edx, wxSender;
|
||||
push eax;
|
||||
lea eax, wxPath;
|
||||
push eax;
|
||||
lea eax, wxXml;
|
||||
push eax;
|
||||
lea edi, wxReceiver;
|
||||
push edi;
|
||||
lea ecx, buffer;
|
||||
call sendXmlCall2;
|
||||
add esp, 0x14;
|
||||
lea eax, wxNull;
|
||||
push eax;
|
||||
lea ecx, buffer;
|
||||
call sendXmlCall3;
|
||||
mov dl, 0x0;
|
||||
lea ecx, buffer;
|
||||
push sendXmlParam;
|
||||
push sendXmlParam;
|
||||
call sendXmlCall4;
|
||||
add esp, 0x8;
|
||||
popfd;
|
||||
popad;
|
||||
}
|
||||
QWORD sign = xmlBufSign(pBuf2, (QWORD)(&sbuf), 0x1);
|
||||
|
||||
WxString *pReceiver = NewWxStringFromStr(receiver);
|
||||
WxString *pXml = NewWxStringFromStr(xml);
|
||||
WxString *pPath = NewWxStringFromStr(path);
|
||||
WxString *pSender = NewWxStringFromStr(GetSelfWxid());
|
||||
|
||||
sendXmlMsg(pBuf, (QWORD)pSender, (QWORD)pReceiver, (QWORD)pXml, (QWORD)pPath, (QWORD)(&nullBuf), type, 0x4, sign,
|
||||
pBuf2);
|
||||
|
||||
funcFree((QWORD)&buff);
|
||||
funcFree((QWORD)&buff2);
|
||||
}
|
||||
#endif
|
||||
|
@ -17,7 +17,7 @@ typedef struct {
|
||||
void SendTextMessage(string wxid, string msg, string atWxids);
|
||||
void SendImageMessage(string wxid, string path);
|
||||
void SendFileMessage(string wxid, string path);
|
||||
void SendXmlMessage(string receiver, string xml, string path, int type);
|
||||
void SendXmlMessage(string receiver, string xml, string path, uint64_t type);
|
||||
void SendEmotionMessage(string wxid, string path);
|
||||
int SendRichTextMessage(RichText_t &rt);
|
||||
int SendPatMessage(string roomid, string wxid);
|
||||
|
Binary file not shown.
@ -2,7 +2,7 @@
|
||||
|
||||
#include "framework.h"
|
||||
|
||||
#define SUPPORT_VERSION L"3.9.10.27"
|
||||
#define SUPPORT_VERSION L"3.9.11.25"
|
||||
|
||||
void InitSpy(int port);
|
||||
void CleanupSpy();
|
||||
|
@ -13,7 +13,7 @@
|
||||
#undef APSTUDIO_READONLY_SYMBOLS
|
||||
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
// 中文(简体,中国) resources
|
||||
// <EFBFBD><EFBFBD><EFBFBD><EFBFBD>(<28><><EFBFBD>壬<EFBFBD>й<EFBFBD>) resources
|
||||
|
||||
#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_CHS)
|
||||
LANGUAGE LANG_CHINESE, SUBLANG_CHINESE_SIMPLIFIED
|
||||
@ -51,8 +51,8 @@ END
|
||||
//
|
||||
|
||||
VS_VERSION_INFO VERSIONINFO
|
||||
FILEVERSION 39,2,4,0
|
||||
PRODUCTVERSION 3,9,10,27
|
||||
FILEVERSION 39,3,4,0
|
||||
PRODUCTVERSION 3,9,11,25
|
||||
FILEFLAGSMASK 0x3fL
|
||||
#ifdef _DEBUG
|
||||
FILEFLAGS 0x1L
|
||||
@ -69,12 +69,12 @@ BEGIN
|
||||
BEGIN
|
||||
VALUE "CompanyName", "WeChatFerry"
|
||||
VALUE "FileDescription", "WeChatFerry"
|
||||
VALUE "FileVersion", "39.2.4.0"
|
||||
VALUE "FileVersion", "39.3.4.0"
|
||||
VALUE "InternalName", "spy.dll"
|
||||
VALUE "LegalCopyright", "Copyright (C) 2023"
|
||||
VALUE "OriginalFilename", "spy.dll"
|
||||
VALUE "ProductName", "WeChatFerry"
|
||||
VALUE "ProductVersion", "3.9.10.27"
|
||||
VALUE "ProductVersion", "3.9.11.25"
|
||||
END
|
||||
END
|
||||
BLOCK "VarFileInfo"
|
||||
@ -83,7 +83,7 @@ BEGIN
|
||||
END
|
||||
END
|
||||
|
||||
#endif // 中文(简体,中国) resources
|
||||
#endif // <EFBFBD><EFBFBD><EFBFBD><EFBFBD>(<28><><EFBFBD>壬<EFBFBD>й<EFBFBD>) resources
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
|
||||
|
@ -138,24 +138,24 @@
|
||||
#define SQLITE_NULL 5
|
||||
#define SQLITE_TEXT 3
|
||||
|
||||
#define SQLITE3_EXEC_OFFSET 0x3AFBCE0
|
||||
#define SQLITE3_BACKUP_INIT_OFFSET 0x1DEA900
|
||||
#define SQLITE3_PREPARE_OFFSET 0x3B03990
|
||||
#define SQLITE3_OPEN_OFFSET 0x1E598B0
|
||||
#define SQLITE3_BACKUP_STEP_OFFSET 0x1DEAD00
|
||||
#define SQLITE3_BACKUP_REMAINING_OFFSET 0x1DEB440
|
||||
#define SQLITE3_BACKUP_PAGECOUNT_OFFSET 0x1DEB450
|
||||
#define SQLITE3_BACKUP_FINISH_OFFSET 0x1DEB340
|
||||
#define SQLITE3_SLEEP_OFFSET 0x1E5A0F0
|
||||
#define SQLITE3_ERRCODE_OFFSET 0x1E58550
|
||||
#define SQLITE3_CLOSE_OFFSET 0x1E56CD0
|
||||
#define SQLITE3_STEP_OFFSET 0x3ABFCE0
|
||||
#define SQLITE3_COLUMN_COUNT_OFFSET 0x3AC0500
|
||||
#define SQLITE3_COLUMN_NAME_OFFSET 0x3AC0F00
|
||||
#define SQLITE3_COLUMN_TYPE_OFFSET 0x3AC0D50
|
||||
#define SQLITE3_COLUMN_BLOB_OFFSET 0x3AC0530
|
||||
#define SQLITE3_COLUMN_BYTES_OFFSET 0x3AC0620
|
||||
#define SQLITE3_FINALIZE_OFFSET 0x3ABED90
|
||||
#define SQLITE3_EXEC_OFFSET 0x3A5EDA0
|
||||
#define SQLITE3_BACKUP_INIT_OFFSET 0x3A18EA0
|
||||
#define SQLITE3_PREPARE_OFFSET 0x3A66A20
|
||||
#define SQLITE3_OPEN_OFFSET 0x3A9E210
|
||||
#define SQLITE3_BACKUP_STEP_OFFSET 0x3A193F0
|
||||
#define SQLITE3_BACKUP_REMAINING_OFFSET 0x1B26EB0
|
||||
#define SQLITE3_BACKUP_PAGECOUNT_OFFSET 0x1B26EE0
|
||||
#define SQLITE3_BACKUP_FINISH_OFFSET 0x3A19AF0
|
||||
#define SQLITE3_SLEEP_OFFSET 0x3A9EE70
|
||||
#define SQLITE3_ERRCODE_OFFSET 0x3A9CB10
|
||||
#define SQLITE3_CLOSE_OFFSET 0x3A9AC70
|
||||
#define SQLITE3_STEP_OFFSET 0x3A22DA0
|
||||
#define SQLITE3_COLUMN_COUNT_OFFSET 0x3A235C0
|
||||
#define SQLITE3_COLUMN_NAME_OFFSET 0x3A23FC0
|
||||
#define SQLITE3_COLUMN_TYPE_OFFSET 0x3A23E10
|
||||
#define SQLITE3_COLUMN_BLOB_OFFSET 0x3A235F0
|
||||
#define SQLITE3_COLUMN_BYTES_OFFSET 0x3A236E0
|
||||
#define SQLITE3_FINALIZE_OFFSET 0x3A21E50
|
||||
|
||||
typedef int (*Sqlite3_callback)(void *, int, char **, char **);
|
||||
|
||||
|
@ -4,10 +4,10 @@
|
||||
|
||||
extern UINT64 g_WeChatWinDllAddr;
|
||||
|
||||
#define OS_USER_HOME 0x5A7E190
|
||||
#define OS_USER_WXID 0x5AB7F30
|
||||
#define OS_USER_NAME 0x5AB8098
|
||||
#define OS_USER_MOBILE 0x5AB7FD8
|
||||
#define OS_USER_HOME 0x5932770
|
||||
#define OS_USER_WXID 0x595C270
|
||||
#define OS_USER_NAME 0x595C3D8
|
||||
#define OS_USER_MOBILE 0x595C318
|
||||
|
||||
static char home[MAX_PATH] = { 0 };
|
||||
|
||||
|
14
WeChatFerry/vcpkg.json
Normal file
14
WeChatFerry/vcpkg.json
Normal file
@ -0,0 +1,14 @@
|
||||
{
|
||||
"name": "wcf",
|
||||
"version-string": "1.0.0",
|
||||
"dependencies": [
|
||||
{
|
||||
"name": "protobuf",
|
||||
"features": [ "zlib" ]
|
||||
},
|
||||
"spdlog",
|
||||
"nng",
|
||||
"magic-enum",
|
||||
"minhook"
|
||||
]
|
||||
}
|
11
clients/python/README.MD
vendored
11
clients/python/README.MD
vendored
@ -1,7 +1,7 @@
|
||||
# WeChatFerry Python 客户端
|
||||
[](https://pypi.python.org/pypi/wcferry) [](https://pypi.python.org/pypi/wcferry) [](https://wechatferry.readthedocs.io/zh/latest/?badge=latest)
|
||||
|
||||
|[📖 Python 文档](https://wechatferry.readthedocs.io/)|[📺 Python 视频教程](https://mp.weixin.qq.com/s/APdjGyZ2hllXxyG_sNCfXQ)|[🙋 FAQ](https://mp.weixin.qq.com/s/I6n_6fuQa60CrROWSgq0TA)|
|
||||
|[📖 Python 文档](https://wechatferry.readthedocs.io/)|[📺 Python 视频教程](https://mp.weixin.qq.com/s/APdjGyZ2hllXxyG_sNCfXQ)|[🙋 FAQ](https://mp.weixin.qq.com/s/YvgFFhF6D-79kXDzRqtg6w)|
|
||||
|:-:|:-:|:-:|
|
||||
|
||||
🤖示例机器人框架:[WeChatRobot](https://github.com/lich0821/WeChatRobot)。
|
||||
@ -44,8 +44,8 @@ python -m grpc_tools.protoc --python_out=. --proto_path=../../../WeChatFerry/rpc
|
||||
|
||||
## 版本更新
|
||||
|
||||
### v39.2.4.0 (2024.07.08)
|
||||
* 修复 wxid 问题
|
||||
### v39.3.3.1
|
||||
* 修复 `send_xml`
|
||||
|
||||
<details><summary>点击查看更多</summary>
|
||||
|
||||
@ -70,14 +70,15 @@ python -m grpc_tools.protoc --python_out=. --proto_path=../../../WeChatFerry/rpc
|
||||
* 发送图片消息
|
||||
* 发送文件消息
|
||||
* 发送卡片消息
|
||||
* 发送 GIF
|
||||
* 发送 XML 消息
|
||||
* 发送 GIF 消息
|
||||
* 拍一拍群友
|
||||
* 转发消息
|
||||
* 开启接收消息
|
||||
* 关闭接收消息
|
||||
* 查询数据库
|
||||
* 获取朋友圈消息
|
||||
* 下载图片、视频、文件
|
||||
* 下载图片
|
||||
* 解密图片
|
||||
* 添加群成员
|
||||
* 删除群成员
|
||||
|
21
clients/python/roomdata.proto
vendored
21
clients/python/roomdata.proto
vendored
@ -1,21 +0,0 @@
|
||||
syntax = "proto3";
|
||||
package com.iamteer.wcf;
|
||||
|
||||
message RoomData {
|
||||
|
||||
message RoomMember {
|
||||
string wxid = 1;
|
||||
string name = 2;
|
||||
int32 state = 3;
|
||||
}
|
||||
|
||||
repeated RoomMember members = 1;
|
||||
|
||||
int32 field_2 = 2;
|
||||
int32 field_3 = 3;
|
||||
int32 field_4 = 4;
|
||||
int32 room_capacity = 5;
|
||||
int32 field_6 = 6;
|
||||
int64 field_7 = 7 [jstype = JS_STRING];
|
||||
int64 field_8 = 8 [jstype = JS_STRING];
|
||||
}
|
5
clients/python/wcferry/client.py
vendored
5
clients/python/wcferry/client.py
vendored
@ -1,7 +1,7 @@
|
||||
#! /usr/bin/env python3
|
||||
# -*- coding: utf-8 -*-
|
||||
|
||||
__version__ = "39.2.4.0"
|
||||
__version__ = "39.3.3.3"
|
||||
|
||||
import atexit
|
||||
import base64
|
||||
@ -20,7 +20,7 @@ import pynng
|
||||
import requests
|
||||
from google.protobuf import json_format
|
||||
from wcferry import wcf_pb2
|
||||
from wcferry.roomdata_pb2 import RoomData
|
||||
from wcferry.wcf_pb2 import RoomData
|
||||
from wcferry.wxmsg import WxMsg
|
||||
|
||||
|
||||
@ -398,7 +398,6 @@ class Wcf():
|
||||
Returns:
|
||||
int: 0 为成功,其他失败
|
||||
"""
|
||||
raise Exception("Not implemented, yet")
|
||||
req = wcf_pb2.Request()
|
||||
req.func = wcf_pb2.FUNC_SEND_XML # FUNC_SEND_XML
|
||||
req.xml.receiver = receiver
|
||||
|
27
clients/python/wcferry/roomdata_pb2.py
vendored
27
clients/python/wcferry/roomdata_pb2.py
vendored
@ -1,27 +0,0 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
# Generated by the protocol buffer compiler. DO NOT EDIT!
|
||||
# source: roomdata.proto
|
||||
"""Generated protocol buffer code."""
|
||||
from google.protobuf.internal import builder as _builder
|
||||
from google.protobuf import descriptor as _descriptor
|
||||
from google.protobuf import descriptor_pool as _descriptor_pool
|
||||
from google.protobuf import symbol_database as _symbol_database
|
||||
# @@protoc_insertion_point(imports)
|
||||
|
||||
_sym_db = _symbol_database.Default()
|
||||
|
||||
|
||||
|
||||
|
||||
DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x0eroomdata.proto\x12\x0f\x63om.iamteer.wcf\"\xf7\x01\n\x08RoomData\x12\x35\n\x07members\x18\x01 \x03(\x0b\x32$.com.iamteer.wcf.RoomData.RoomMember\x12\x0f\n\x07\x66ield_2\x18\x02 \x01(\x05\x12\x0f\n\x07\x66ield_3\x18\x03 \x01(\x05\x12\x0f\n\x07\x66ield_4\x18\x04 \x01(\x05\x12\x15\n\rroom_capacity\x18\x05 \x01(\x05\x12\x0f\n\x07\x66ield_6\x18\x06 \x01(\x05\x12\x0f\n\x07\x66ield_7\x18\x07 \x01(\x03\x12\x0f\n\x07\x66ield_8\x18\x08 \x01(\x03\x1a\x37\n\nRoomMember\x12\x0c\n\x04wxid\x18\x01 \x01(\t\x12\x0c\n\x04name\x18\x02 \x01(\t\x12\r\n\x05state\x18\x03 \x01(\x05\x62\x06proto3')
|
||||
|
||||
_builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, globals())
|
||||
_builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'roomdata_pb2', globals())
|
||||
if _descriptor._USE_C_DESCRIPTORS == False:
|
||||
|
||||
DESCRIPTOR._options = None
|
||||
_ROOMDATA._serialized_start=36
|
||||
_ROOMDATA._serialized_end=283
|
||||
_ROOMDATA_ROOMMEMBER._serialized_start=228
|
||||
_ROOMDATA_ROOMMEMBER._serialized_end=283
|
||||
# @@protoc_insertion_point(module_scope)
|
302
clients/python/wcferry/wcf_pb2.py
vendored
302
clients/python/wcferry/wcf_pb2.py
vendored
File diff suppressed because one or more lines are too long
Loading…
Reference in New Issue
Block a user