wechaty / puppet-padlocal

Puppet PadLocal is a Pad Protocol for WeChat
https://wechaty.js.org/docs/puppet-providers/padlocal
Apache License 2.0
642 stars 88 forks source link

撤回消息中的fromId和toId存在逻辑问题 #34

Closed su-chang closed 2 years ago

su-chang commented 3 years ago

fromId 主动撤回消息账号的ID

toId 接收撤回消息通知账号的ID

text 字段中需要存放已撤回消息的ID,即xml中的newmsgid,便于查找已撤回的消息内容

你可以参考以下代码:

const recalledPayload = await recalledPayloadParser(rawPayload)
const pattern = [
  /"(.+)" 撤回了一条消息/,
  /"(.+)" has recalled a message./,
]
const patternSelf = [
  /你撤回了一条消息/,
  /You recalled a message/,
]
if (recalledPayload) {
  const isRecalled = pattern.some(regex => regex.test(recalledPayload.replaceMsg))
  const isRecalledSelf = patternSelf.some(regex => regex.test(recalledPayload.replaceMsg))
  if (isRecalled || isRecalledSelf) {
    text = recalledPayload.newMsgId
    if (isRecalledSelf) {
      fromId = rawPayload.from_wxid
      if (isRoomId(rawPayload.to_wxid)) {
        roomId = rawPayload.to_wxid
      } else if (isContactId(rawPayload.to_wxid)) {
        toId = rawPayload.to_wxid
      }
    }
  } else {
    payloadBase.type = MessageType.Unknown
  }
} else {
  payloadBase.type = MessageType.Unknown
}
dchaofei commented 3 years ago

go-wechaty 使用 padlocal puppet 也遇到了这个问题: https://github.com/wechaty/go-wechaty/issues/87

padlocal commented 2 years ago

Thanks for your hints. Fixed and will be release in version wechaty-puppet-padlocal@1.11.19