Closed su-chang closed 2 years ago
初步定位问题 convertMessagePayloadToClass 函数将 msg 对象转换为class时,部分属性发生了变化。
const msgObj = convertMessagePayloadToClass(this.manager.getWhatsApp(), msg)
logger.info(`
msg.hasMedia: ${msg.hasMedia} ${JSON.stringify(msg)}
msgObj.hasMedia: ${msgObj.hasMedia} ${JSON.stringify(msgObj)}
`)
const media = await msgObj.downloadMedia()
export function convertMessagePayloadToClass (client: WhatsAppClientType, payload: WhatsAppMessagePayload): WhatsAppMessage {
return new MessageClass(client, payload)
}
Source Code in whatsapp-web.js
/**
* Indicates if the message has media available for download
* @type {boolean}
*/
this.hasMedia = Boolean(data.mediaKey && data.directPath);
结论
目前缓存的消息中没有 directPath
字段,导致重新构造 Message
类时,hasMedia
被置为false
需要找到从哪里获取 directPath
?
日志
# 文件消息
msg.hasMedia: true {
"mediaKey": "L3uLfIy5S7bW5dp7v+9o30/VJKDzlt0YTgy+ltn3YYE=",
"id": {
"fromMe": true,
"remote": "120363039010379837@g.us",
"id": "3EB0254155E9E75AE95F",
"_serialized": "true_120363039010379837@g.us_3EB0254155E9E75AE95F"
},
"ack": 1,
"hasMedia": true,
"body": "中心主题.xmind",
"type": "document",
"timestamp": 1644580242,
"from": "8613126768525@c.us",
"to": "120363039010379837@g.us",
"deviceType": "web",
"forwardingScore": 0,
"isStatus": false,
"isStarred": false,
"fromMe": true,
"hasQuotedMsg": false,
"vCards": [],
"mentionedIds": [],
"isGif": false,
"isEphemeral": false,
"links": []
}
msgObj.hasMedia: false {
"mediaKey": "L3uLfIy5S7bW5dp7v+9o30/VJKDzlt0YTgy+ltn3YYE=",
"id": {
"fromMe": true,
"remote": "120363039010379837@g.us",
"id": "3EB0254155E9E75AE95F",
"_serialized": "true_120363039010379837@g.us_3EB0254155E9E75AE95F"
},
"ack": 1,
"hasMedia": false,
"body": "中心主题.xmind",
"type": "document",
"from": "8613126768525@c.us",
"to": "120363039010379837@g.us",
"deviceType": "web",
"forwardingScore": 0,
"fromMe": true,
"hasQuotedMsg": false,
"vCards": [],
"mentionedIds": [],
"isGif": false,
"isEphemeral": false,
"links": []
}
# 图片消息
msg.hasMedia: true {
"mediaKey": "ubCGN0sq2CATcpauCTdgcxoegvyw3nHivBtQ9eyBjlk=",
"id": {
"fromMe": true,
"remote": "120363039010379837@g.us",
"id": "3EB09175781FD3911E22",
"_serialized": "true_120363039010379837@g.us_3EB09175781FD3911E22"
},
"ack": 1,
"hasMedia": true,
"body": "",
"type": "image",
"timestamp": 1644583735,
"from": "8613126768525@c.us",
"to": "120363039010379837@g.us",
"deviceType": "web",
"forwardingScore": 0,
"isStatus": false,
"isStarred": false,
"fromMe": true,
"hasQuotedMsg": false,
"vCards": [],
"mentionedIds": [],
"isGif": false,
"isEphemeral": false,
"links": []
}
msgObj.hasMedia: false {
"mediaKey": "ubCGN0sq2CATcpauCTdgcxoegvyw3nHivBtQ9eyBjlk=",
"id": {
"fromMe": true,
"remote": "120363039010379837@g.us",
"id": "3EB09175781FD3911E22",
"_serialized": "true_120363039010379837@g.us_3EB09175781FD3911E22"
},
"ack": 1,
"hasMedia": false,
"body": "",
"type": "image",
"from": "8613126768525@c.us",
"to": "120363039010379837@g.us",
"deviceType": "web",
"forwardingScore": 0,
"fromMe": true,
"hasQuotedMsg": false,
"vCards": [],
"mentionedIds": [],
"isGif": false,
"isEphemeral": false,
"links": []
}
需要找到从哪里获取
directPath
?
@guo40020 你有什么建议么?
直接在Message类里添加 directPath
字段来使 payload 也能正常保 directPath
# WhatsApp-web.js/src/Message.js:342
const msg = window.Store.Msg.get(msgId);
From here we can have the directPath
for the Message
From here we can have the
directPath
for theMessage
我们能从 whatsapp-web.js api 层面获取到 directPath
这个字段么? 这是核心问题。 @guo40020
From here we can have the
directPath
for theMessage
我们能从 whatsapp-web.js api 层面获取到
directPath
这个字段么? 这是核心问题。 @guo40020
不能
Related issue: https://github.com/wechaty/puppet-whatsapp/issues/171
在
onMessageCreate
阶段就将message emit出去了,ack: 0
的情况下hasMedia: false
导致无法下载文件。