zhamao-robot / zhamao-framework

协程、高性能、灵活的聊天机器人 & Web 开发框架(炸毛框架)
https://framework.zhamao.xin
Apache License 2.0
156 stars 26 forks source link

似乎炸毛将发送信息的回应给屏蔽掉了,可能不是BUG #375

Open DreamMiu opened 6 months ago

DreamMiu commented 6 months ago

受影响版本

3.2.4

描述

在OneBot 12标准中发送信息得到响应被当成错误api或者标准给屏蔽了,正确的方式应该能在OneBotEvent中获得这个响应的message_id事实上不可以 https://12.onebot.dev/interface/message/actions/

{"retcode":0,"status":"ok","data":{"message_id":"KqtrXXXXXXXXXXXXXXXX"},"message":"","echo":"d9efab6c-xxx-xxxx-xxxx-acf8c3xxxx"}

复现步骤

这个响应应该要回到这里

[BotEvent()]

public function onOBEvent(\OneBotEvent $event): void
{
    if ($event->getRawData()['impl'] = "onebots") {
    if ($event->detail_type != "heartbeat") {
        dump($event);
        }
    }
}

但是在WebSocketMessageEvent就没往BotEvent传

[BindEvent(WebSocketMessageEvent::class)]

public function ToZhaMao(WebSocketMessageEvent $event): void
{
    $message = json_decode($event->getFrame()->getData());

// if (!isset($message->detail_type) and $message->detail_type != "heartbeat") { // dump($event); if (isset($message->retcode)) { dump($message->data->message_id); } // } }

解决方案

或者说是我自己的问题,或者还有其他方式获取发送信息得到回应的message_id

附加信息

No response

crazywhalecc commented 6 months ago

BotEvent 确实不会接收 Actions 的响应包,如果要注册 Actions 响应包事件,可以用 BotActionResponse。或者就直接协程等待回包拿到 message_id 就可以。

DreamMiu commented 6 months ago

BotEvent确实不会接收到 Actions 的响应包,如果要注册 Actions 响应包事件,可以用BotActionResponse。或者就直接协程等待回包拿到 message_id 就可以。

似乎怎么做能够精准撤回,发现很多方法都行不通BotActionResponse做不到你要撤回那条