Skip to content
This repository was archived by the owner on Jan 10, 2025. It is now read-only.

Commit 4e6dbf0

Browse files
authored
feat: 处理合并消息转发 (#219)
原本收到合并消息转发的消息,会直接抛出错误,现在捕获这个错误并处理 ``` [2024-05-15T17:46:41.442] [WARN] - 17:46:41 WARN message-parser Error occurred while parse message attachment: {"MsgId":"9077318394394722874","FromUserName":"@@XXXXXXXXXXX","ToUserName":"@xxxxxxxxxx","MsgType":49,"Content":"@xxxxxxxxxxxx:\n该类型暂不支持,请在手机上查看","Status":3,"ImgStatus":2,"CreateTime":1715766398,"VoiceLength":0,"PlayLength":0,"FileName":"","FileSize":"","MediaId":"","Url":"","AppMsgType":0,"StatusNotifyCode":0,"StatusNotifyUserName":"","RecommendInfo":{"UserName":"","NickName":"","QQNum":0,"Province":"","City":"","Content":"","Signature":"","Alias":"","Scene":0,"VerifyFlag":0,"AttrStatus":0,"Sex":0,"Ticket":"","OpCode":0},"ForwardFlag":0,"AppInfo":{"AppID":"","Type":0},"HasProductId":0,"Ticket":"","ImgHeight":0,"ImgWidth":0,"SubMsgType":0,"NewMsgId":9077318394394723000,"OriContent":"","EncryFileName":"","isSendBySelf":false,"OriginalContent":"@xxxxxxxxxxxx:<br/>该类型暂不支持,请在手机上查看"} , TypeError: Cannot read properties of undefined (reading 'msg') at parseAppmsgMessagePayload (/app/node_modules/.pnpm/wechaty-puppet-wechat4u@1.14.13_patch_hash=nq4vns7vah46g6vxziyzqg5jey_@swc+core@1.3.101_wechaty-puppet@1.20.2/node_modules/wechaty-puppet-wechat4u/dist/cjs/src/wechat4u/messages/message-appmsg.js:34:76) at process.processTicksAndRejections (node:internal/process/task_queues:95:5) at async appMsgParser (/app/node_modules/.pnpm/wechaty-puppet-wechat4u@1.14.13_patch_hash=nq4vns7vah46g6vxziyzqg5jey_@swc+core@1.3.101_wechaty-puppet@1.20.2/node_modules/wechaty-puppet-wechat4u/dist/cjs/src/wechat4u/schema-mapper/message/message-parser-appmsg.js:36:28) at async executeMessageParsers (/app/node_modules/.pnpm/wechaty-puppet-wechat4u@1.14.13_patch_hash=nq4vns7vah46g6vxziyzqg5jey_@swc+core@1.3.101_wechaty-puppet@1.20.2/node_modules/wechaty-puppet-wechat4u/dist/cjs/src/wechat4u/schema-mapper/message/message-parser.js:15:15) at async webMessageToWechaty (/app/node_modules/.pnpm/wechaty-puppet-wechat4u@1.14.13_patch_hash=nq4vns7vah46g6vxziyzqg5jey_@swc+core@1.3.101_wechaty-puppet@1.20.2/node_modules/wechaty-puppet-wechat4u/dist/cjs/src/wechat4u/schema-mapper/message.js:70:5) at async PuppetWechat4u.messagePayload (/app/node_modules/.pnpm/wechaty-puppet@1.20.2_patch_hash=wwr5xvwazgbyb26ud6vwdruala_rxjs@7.8.1/node_modules/wechaty-puppet/dist/cjs/src/mixins/message-mixin.js:50:29) at async PuppetWechat4u.messageSearch (/app/node_modules/.pnpm/wechaty-puppet@1.20.2_patch_hash=wwr5xvwazgbyb26ud6vwdruala_rxjs@7.8.1/node_modules/wechaty-puppet/dist/cjs/src/mixins/message-mixin.js:67:21) at async WechatifiedMessageImpl.findAll (/app/node_modules/.pnpm/wechaty@1.20.2_@swc+core@1.3.101_brolog@1.14.2_redux@4.2.1_rxjs@7.8.1/node_modules/wechaty/dist/cjs/src/user-modules/message.js:98:35) at async WechatifiedMessageImpl.find (/app/node_modules/.pnpm/wechaty@1.20.2_@swc+core@1.3.101_brolog@1.14.2_redux@4.2.1_rxjs@7.8.1/node_modules/wechaty/dist/cjs/src/user-modules/message.js:81:29) at async PuppetWechat4u.<anonymous> (/app/node_modules/.pnpm/wechaty@1.20.2_@swc+core@1.3.101_brolog@1.14.2_redux@4.2.1_rxjs@7.8.1/node_modules/wechaty/dist/cjs/src/wechaty-mixins/puppet-mixin.js:240:45) [2024-05-15T17:46:41.443] [INFO] - Message: Message#Attachment[🗣Contact<ʚDayday🥱ɞ>@👥Room<🤖测试>] [2024-05-15T17:46:41.444] [ERROR] - 向 RECVD_MSG_API 上报 message 事件出错: Error: unsupported message. id: 9077318394394722874 at PuppetWechat4u.messageFile (/app/node_modules/.pnpm/wechaty-puppet-wechat4u@1.14.13_patch_hash=nq4vns7vah46g6vxziyzqg5jey_@swc+core@1.3.101_wechaty-puppet@1.20.2/node_modules/wechaty-puppet-wechat4u/dist/cjs/src/puppet-wechat4u.js:592:15) at process.processTicksAndRejections (node:internal/process/task_queues:95:5) at async WechatifiedUserClass.toFileBox (/app/node_modules/.pnpm/wechaty@1.20.2_@swc+core@1.3.101_brolog@1.14.2_redux@4.2.1_rxjs@7.8.1/node_modules/wechaty/dist/cjs/src/user-modules/message.js:832:25) at async sendMsg2RecvdApi (/app/src/service/msgUploader.js:133:41) at async Object.onRecvdMessage (/app/src/service/msgSender.js:694:10) ``` 如果 `const steamFile = msg.toFileBox ? await msg.toFileBox() : msg.content()` 这里没有抛出错误,则流程和以前一样
2 parents 446fa41 + ad5bc33 commit 4e6dbf0

File tree

1 file changed

+34
-1
lines changed

1 file changed

+34
-1
lines changed

src/service/msgUploader.js

Lines changed: 34 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -122,7 +122,40 @@ async function sendMsg2RecvdApi(msg) {
122122
formData.append('isMsgFromSelf', msg.self() ? '1' : '0')
123123

124124
switch (msg.type()) {
125-
case MSG_TYPE_ENUM.ATTACHMENT:
125+
case MSG_TYPE_ENUM.ATTACHMENT: {
126+
try {
127+
/**@type {import('file-box').FileBox} */
128+
//@ts-expect-errors 这里msg一定是wechaty的msg
129+
const steamFile = msg.toFileBox ? await msg.toFileBox() : msg.content()
130+
formData.append('type', 'file')
131+
let fileInfo = {
132+
// @ts-ignore
133+
ext: steamFile._name.split('.').pop() ?? '',
134+
// @ts-ignore
135+
mime: steamFile._mediaType ?? 'Unknown',
136+
// @ts-ignore
137+
filename: steamFile._name ?? 'UnknownFile'
138+
}
139+
140+
formData.append(
141+
'content',
142+
//@ts-expect-errors 需要用到私有属性
143+
steamFile.buffer /** 发送一个文件 */ ??
144+
//@ts-expect-errors 需要用到私有属性
145+
steamFile.stream /** 同一个文件转发 */,
146+
{
147+
filename: fileInfo.filename,
148+
contentType: fileInfo.mime
149+
}
150+
)
151+
} catch (e) {
152+
/** 如果 const steamFile = msg.toFileBox ? await msg.toFileBox() : msg.content() 这里执行抛出错误 */
153+
/** 则很有可能是合并消息转发 */
154+
formData.append('type', 'combineforward')
155+
formData.append('content', msg.text())
156+
}
157+
break
158+
}
126159
case MSG_TYPE_ENUM.VOICE:
127160
case MSG_TYPE_ENUM.PIC:
128161
case MSG_TYPE_ENUM.VIDEO: {

0 commit comments

Comments
 (0)