simple-robot / simbot-component-onebot

一个Kotlin多平台的 OneBot SDK 实现,一个异步高效、Java 友好的 Simple Robot 组件库 ~ 🐱🐱🐱
https://simbot.forte.love/component-onebot.html
GNU Lesser General Public License v3.0
10 stars 3 forks source link

通过好友请求后 raw event 解析失败 #47

Closed Ant00000ny closed 4 months ago

Ant00000ny commented 4 months ago
image
Ant00000ny commented 4 months ago

对应的代码:

@Listener
suspend fun onFriendRequest(event: OneBotFriendRequestEvent) {
    try {
        val reqInfo = botService.getStrangerInfo(event.requesterId)
        delay(1.seconds)
        event.accept() // 全肯定
        log.info("通过了 ${reqInfo.nickname} (${reqInfo.userId}) 的好友请求")
    } catch (e: Exception) {
        log.error("好友请求处理异常", e)
    }
}
ForteScarlet commented 4 months ago

看上去你收到了一个 poke 戳一戳事件,这个事件的协议约定 中是有一个 group_id 的,但是事件内却没有。 是否能确定这个戳一戳事件是来自群还是哪里?如果是来自群,那这疑似是协议实现者的缺陷。如果不是来自群而是私人消息,那这可能是OneBot11的设计缺陷,因为它只有“群内戳一戳”。

Ant00000ny commented 4 months ago

确认了下聊天记录,我认为不是来自群聊的,但是私人消息也没有收到过戳一戳。只能猜测也许是 QQ 加好友后的「戳一戳开场」提示导致的。

另外如果解析事件失败,忽略该事件而不是直接 crash 掉我认为会好一些

ForteScarlet commented 4 months ago

现在有在 #48 中考虑事件解析如果失败则转而包装为另一个事件推送。不过虽然现在出现错误会直接关闭 session,但是之后应该会尝试重连而不是直接 crash 了才对

ForteScarlet commented 4 months ago

53 合并后会关闭 issue,在 0.7.0更新后或 napcat 修复后如果仍有问题可随时重新打开或另开议题