wechaty / go-wechaty

Go Wechaty is a Conversational SDK for Chatbot Makers Written in Go
https://github.com/wechaty/go-wechaty-getting-started
Apache License 2.0
489 stars 92 forks source link

[BUG] #125

Closed xiangyaoan closed 2 years ago

xiangyaoan commented 2 years ago

使用的wechaty是 docker 0.78 调用 message.Recall() ERR PuppetServiceImpl grpcError() messageRecall() rejection: Cannot read properties of undefined (reading 'clientmsgid')

dchaofei commented 2 years ago

用的什么puppet?

dchaofei commented 2 years ago

请提供下复现代码

xiangyaoan commented 2 years ago

用的 puppet-padlocal

xiangyaoan commented 2 years ago

用的 docker wechaty/wechaty:0.78 + puppet-padlocal 0.41版本,在onMessage 中调用 message.Recall()

dchaofei commented 2 years ago

从你的描述看似乎是在撤回别人发的消息

xiangyaoan commented 2 years ago

是在自己发送的内容中使用的 image

dchaofei commented 2 years ago

可以测试下这段代码?

    selfMsg, err := message.Say("dong")
    if err != nil {
        log.Println(err)
        return
    }
    isRecall, err := selfMsg.Recall()
    if err != nil {
        log.Println(isRecall, err)
        return 
    }
xiangyaoan commented 2 years ago

测试了一把在群里发言 image

dchaofei commented 2 years ago

你使用的是最新的 go-wechaty 版本吗?v0.4.x

dchaofei commented 2 years ago

我使用 go-wecahty v0.4.2 + wechaty 镜像 wechaty/wechaty:1.19 测试我发的代码是没问题的

xiangyaoan commented 2 years ago

是的 image

xiangyaoan commented 2 years ago

那我升级试试,感谢

xiangyaoan commented 2 years ago

升级后可以了,顺便问下,只有用 message.Say 发出的内容才能recall 是吧。就是用做机器人的微信账号通过pc端发言内容无法撤回

dchaofei commented 2 years ago

我看了 padlocal 的源码,看起来是只有通过程序发出的才能正常撤回

xiangyaoan commented 2 years ago

从pc端发的信息调用,感觉上是wechaty取字段和go-wechaty没对上 image

dchaofei commented 2 years ago

你可以看下 puppet-padlocal 的代码,撤回消息会从缓存中找 revokeinfo, 而这个 revokeinfo 是只有发送消息时才会存入缓存

https://github.com/wechaty/puppet-padlocal/blob/6eef8d8d2a8487ec719ba3181ff5c36c13e45293/src/puppet-padlocal.ts#L1488

https://github.com/wechaty/puppet-padlocal/blob/6eef8d8d2a8487ec719ba3181ff5c36c13e45293/src/puppet-padlocal.ts#L1488

xiangyaoan commented 2 years ago

好的,感谢大佬帮助!

dchaofei commented 2 years ago

@xiangyaoan 我发现升级 wechaty/wechaty:1.19 会导致死循环,需要把 go-wechaty 升级到 v0.4.3 可以修复这个问题