Impl pat group member
This commit is contained in:
parent
436785fdb5
commit
631a4fc6e0
@ -19,6 +19,7 @@ enum Functions {
|
||||
FUNC_SEND_XML = 0x23;
|
||||
FUNC_SEND_EMOTION = 0x24;
|
||||
FUNC_SEND_RICH_TXT = 0x25;
|
||||
FUNC_SEND_PAT_MSG = 0x26;
|
||||
FUNC_ENABLE_RECV_TXT = 0x30;
|
||||
FUNC_DISABLE_RECV_TXT = 0x40;
|
||||
FUNC_EXEC_DB_QUERY = 0x50;
|
||||
@ -53,6 +54,7 @@ message Request
|
||||
AttachMsg att = 14;
|
||||
AudioMsg am = 15;
|
||||
RichText rt = 16;
|
||||
PatMsg pm = 17;
|
||||
}
|
||||
}
|
||||
|
||||
@ -208,3 +210,9 @@ message RichText
|
||||
string thumburl = 6; // 缩略图
|
||||
string receiver = 7; // 接收人
|
||||
}
|
||||
|
||||
message PatMsg
|
||||
{
|
||||
string roomid = 1; // 群 id
|
||||
string wxid = 2; // wxid
|
||||
}
|
||||
|
@ -33,7 +33,9 @@ WxCalls_t wxCalls = {
|
||||
/* call1, call2, call3, call4, call5*/
|
||||
{0x76F010, 0x792700, 0xBC0370, 0xBB5F70, 0x756E30},
|
||||
/* call1, call2, call3, call4, call5*/
|
||||
{0x76E630, 0x76AE20, 0xF59E40, 0xB73000, 0x76E350}
|
||||
{0x76E630, 0x76AE20, 0xF59E40, 0xB73000, 0x76E350},
|
||||
/* call1, call2, call3 */
|
||||
{0x931730, 0x1D58751, 0x1421940}
|
||||
};
|
||||
|
||||
int LoadCalls(const wchar_t *version, WxCalls_t *calls)
|
||||
|
@ -361,6 +361,28 @@ bool func_send_rich_txt(RichText rt, uint8_t *out, size_t *len)
|
||||
return true;
|
||||
}
|
||||
|
||||
bool func_send_pat_msg(char *roomid, char *wxid, uint8_t *out, size_t *len)
|
||||
{
|
||||
Response rsp = Response_init_default;
|
||||
rsp.func = Functions_FUNC_SEND_PAT_MSG;
|
||||
rsp.which_msg = Response_status_tag;
|
||||
|
||||
if ((roomid == NULL) || (wxid == NULL)) {
|
||||
rsp.msg.status = -1;
|
||||
} else {
|
||||
rsp.msg.status = SendPatMessage(roomid, wxid);
|
||||
}
|
||||
|
||||
pb_ostream_t stream = pb_ostream_from_buffer(out, *len);
|
||||
if (!pb_encode(&stream, Response_fields, &rsp)) {
|
||||
LOG_ERROR("Encoding failed: {}", PB_GET_ERROR(&stream));
|
||||
return false;
|
||||
}
|
||||
*len = stream.bytes_written;
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
static void PushMessage()
|
||||
{
|
||||
static nng_socket msg_sock;
|
||||
@ -758,6 +780,11 @@ static bool dispatcher(uint8_t *in, size_t in_len, uint8_t *out, size_t *out_len
|
||||
ret = func_send_rich_txt(req.msg.rt, out, out_len);
|
||||
break;
|
||||
}
|
||||
case Functions_FUNC_SEND_PAT_MSG: {
|
||||
LOG_DEBUG("[Functions_FUNC_SEND_PAT_MSG]");
|
||||
ret = func_send_pat_msg(req.msg.pm.roomid, req.msg.pm.wxid, out, out_len);
|
||||
break;
|
||||
}
|
||||
case Functions_FUNC_SEND_IMG: {
|
||||
LOG_DEBUG("[Functions_FUNC_SEND_IMG]");
|
||||
ret = func_send_img(req.msg.file.path, req.msg.file.receiver, out, out_len);
|
||||
|
@ -364,3 +364,34 @@ int SendRichTextMessage(RichText_t &rt)
|
||||
|
||||
return status;
|
||||
}
|
||||
|
||||
int SendPatMessage(string roomid, string wxid)
|
||||
{
|
||||
int status = -1;
|
||||
|
||||
wstring wsRoomid = String2Wstring(roomid);
|
||||
wstring wsWxid = String2Wstring(wxid);
|
||||
WxString wxRoomid(wsRoomid);
|
||||
WxString wxWxid(wsWxid);
|
||||
|
||||
DWORD pmCall1 = g_WeChatWinDllAddr + g_WxCalls.pm.call1;
|
||||
DWORD pmCall2 = g_WeChatWinDllAddr + g_WxCalls.pm.call2;
|
||||
DWORD pmCall3 = g_WeChatWinDllAddr + g_WxCalls.pm.call3;
|
||||
|
||||
__asm {
|
||||
pushad;
|
||||
call pmCall1;
|
||||
push pmCall2;
|
||||
push 0x0;
|
||||
push eax;
|
||||
lea ecx, wxRoomid;
|
||||
lea edx, wxWxid;
|
||||
call pmCall3;
|
||||
add esp, 0xc;
|
||||
movzx eax, al;
|
||||
mov status, eax;
|
||||
popad;
|
||||
}
|
||||
|
||||
return status;
|
||||
}
|
||||
|
@ -20,3 +20,4 @@ void SendFileMessage(string wxid, string path);
|
||||
void SendXmlMessage(string receiver, string xml, string path, int type);
|
||||
void SendEmotionMessage(string wxid, string path);
|
||||
int SendRichTextMessage(RichText_t &rt);
|
||||
int SendPatMessage(string roomid, string wxid);
|
||||
|
Binary file not shown.
@ -51,7 +51,7 @@ END
|
||||
//
|
||||
|
||||
VS_VERSION_INFO VERSIONINFO
|
||||
FILEVERSION 39,0,8,0
|
||||
FILEVERSION 39,0,9,0
|
||||
PRODUCTVERSION 3,9,2,23
|
||||
FILEFLAGSMASK 0x3fL
|
||||
#ifdef _DEBUG
|
||||
@ -69,7 +69,7 @@ BEGIN
|
||||
BEGIN
|
||||
VALUE "CompanyName", "WeChatFerry"
|
||||
VALUE "FileDescription", "WeChatFerry"
|
||||
VALUE "FileVersion", "39.0.8.0"
|
||||
VALUE "FileVersion", "39.0.9.0"
|
||||
VALUE "InternalName", "spy.dll"
|
||||
VALUE "LegalCopyright", "Copyright (C) 2023"
|
||||
VALUE "OriginalFilename", "spy.dll"
|
||||
|
@ -128,6 +128,12 @@ typedef struct CallRichText {
|
||||
DWORD call5;
|
||||
} CallRichText_t;
|
||||
|
||||
typedef struct CallPatMsg {
|
||||
DWORD call1;
|
||||
DWORD call2;
|
||||
DWORD call3;
|
||||
} CallPatMsg_t;
|
||||
|
||||
typedef struct WxCalls {
|
||||
DWORD login; // 登录状态
|
||||
UserInfoCall_t ui; // 用户信息
|
||||
@ -146,7 +152,8 @@ typedef struct WxCalls {
|
||||
Pyq_t pyq; // 接收朋友圈消息
|
||||
DlAttach_t da; // 下载资源(图片、文件、视频)
|
||||
RevokeMsg_t rm; // 撤回消息
|
||||
CallRichText_t rt; // 消息卡片
|
||||
CallRichText_t rt; // 发送消息卡片
|
||||
CallPatMsg_t pm; // 发送拍一拍消息
|
||||
} WxCalls_t;
|
||||
|
||||
struct WxString {
|
||||
|
@ -1,7 +1,7 @@
|
||||
#! /usr/bin/env python3
|
||||
# -*- coding: utf-8 -*-
|
||||
|
||||
__version__ = "39.0.8.0"
|
||||
__version__ = "39.0.9.0"
|
||||
|
||||
import atexit
|
||||
import base64
|
||||
@ -452,6 +452,24 @@ class Wcf():
|
||||
rsp = self._send_request(req)
|
||||
return rsp.status
|
||||
|
||||
def send_pat_msg(self, roomid: str, wxid: str) -> int:
|
||||
"""拍一拍群友
|
||||
|
||||
Args:
|
||||
roomid (str): 群 id
|
||||
wxid (str): 要拍的群友的 wxid
|
||||
|
||||
Returns:
|
||||
int: 1 为成功,其他失败
|
||||
"""
|
||||
req = wcf_pb2.Request()
|
||||
req.func = wcf_pb2.FUNC_SEND_PAT_MSG # FUNC_SEND_PAT_MSG
|
||||
req.pm.roomid = roomid
|
||||
req.pm.wxid = wxid
|
||||
|
||||
rsp = self._send_request(req)
|
||||
return rsp.status
|
||||
|
||||
def get_msg(self, block=True) -> WxMsg:
|
||||
"""从消息队列中获取消息
|
||||
|
||||
|
File diff suppressed because one or more lines are too long
Loading…
Reference in New Issue
Block a user