project-mirai / mirai-api-http

Mirai HTTP API (console) plugin
GNU Affero General Public License v3.0
1.66k stars 343 forks source link

mcl接收到消息后,不会向bot分发已经接收到的新消息 (测试了群消息和好友消息都不行) #627

Closed Miku39c closed 2 years ago

Miku39c commented 2 years ago

测试环境: 系统: win10 python环境: Anaconda3 (使用的是Anaconda3自带的python 3.9.12150.1013) 和 poetry

前提步骤:

  1. 按这个步骤部署了机器人 https://sagiri-kawaii.github.io/sagiri-bot/deployment/windows/
  2. 期间多次启动停止bot,都是正常的,mcl和bot都能正常接收到消息并处理
  3. 后面突然发现 我在QQ群里发送消息,mcl上有消息显示,但是bot接收不到消息

测试步骤: 1. 重新启动mcl,mcl自动登录成功,然后进入bot主目录,在当前目录打开cmd,执行指令

pip install -r requirements.txt
python main.py

bot也正常启动,但是bot接收不到我在群里发送的消息 (好友/群消息都不行)

2. 在1的基础上,先ctrl+c等待程序结束,然后关闭两个cmd窗口再重新打开mcl,接着在bot主目录打开cmd执行指令

conda activate env_qqbot
pip install -r requirements.txt
python main.py

bot也正常启动,但是bot接收不到我在群里发送的消息 (好友/群消息都不行)

3. 在2的基础上,先ctrl+c等待程序结束,然后关闭两个cmd窗口再重新打开mcl,接着在bot主目录打开cmd执行指令

poetry run pip install -r requirements.txt
poetry run python main.py

bot也正常启动,但是bot接收不到我在群里发送的消息 (好友/群消息都不行)

我也试过更换数据库(mysql和sqlite)这两个,重新创建conda虚拟环境后再pip install -r requirements.txt,启动后问题依旧 这个问题的出现也很奇怪,最开始我用的测试步骤1,一切正常,后来关闭程序后重新打开出现bot接收不到消息后,我用了测试步骤3,没有这个问题了,但是不久后又出这个问题了,再后面我用了测试步骤2,又没问题了,直到今天早上,我测试bot功能发现mysql数据库连接错误,我百度查询说的是需要调高mysql数据库的超时时间,默认是8小时不使用就会销毁连接,所以bot使用数据库就产生了报错,我改了后,关闭两个程序窗口,再启动,又出现与前面一样的问题了,bot接收不到群消息,mcl可以接收到群消息并显示出来

K}H3 1QO4 Q9)`3KTB4HF{X {Y29~ _C~S3N$6$H}SZN86I

后面我在bot群询问无果后,就用js写了与mcl建立ws连接的测试代码

var g_session = "";
var g_qq_ws;
let verifyKey = "ServerPaw_Miku_39831";
let bot_qq = "649089368";

// 创建WebSocket 对象
g_qq_ws = new WebSocket("ws://localhost:23456/message?verifyKey=" + verifyKey + "&qq=" + bot_qq);
g_qq_ws.onerror = function (error) {
    console.log('WS 连接错误!', error)
}
g_qq_ws.onopen = function () { //连接成功时,触发事件
    console.log("WS 连接已建立...");

    //请求参数
    var param = {
        "syncId": parseInt(Math.random()*10000)+1,  // 消息同步的字段
        "command": "sendGroupMessage",  // 命令字
        "subCommand": null,             // 子命令字, 可空
        "content": {}                   // 命令的数据对象, 与通用接口定义相同
    };

    var msgArray = [
        { "type":"Plain", "text": "Hello" + "\n" },
        { "type":"Plain", "text": "World" + "\n" }
    ];

    param.content = {
      "sessionKey": g_session,
      "target": 0,
      "messageChain": msgArray
    };
    param.content.target = "488083381";

    g_qq_ws.send(JSON.stringify(param)); // 使用 send() 方法发送数据

    console.log("WS 数据发送中... " + JSON.stringify(param));
}
g_qq_ws.onmessage = function (event) { //接收到服务端响应的数据时,触发事件
    var data = JSON.parse(event.data);
    console.log("WS 收到数据..." + JSON.stringify(data));

    if(data.code == 0 || data.code == undefined){
        if(g_session == ""){
            g_session = data.data.session;
            console.log("session: " + g_session);
        }

        console.log("操作成功!");
    }else{
        console.log("操作失败!");
    }
}
g_qq_ws.onclose = function () { // 断开 web socket 连接成功触发事件
    console.log("WS 连接已关闭!");
};

结果如下,成功发送了群消息,mcl也显示出来了(1个发送,1个接收),但是bot依然接收不到群消息 PN27B`TRM`98WV2O0H%C}~F LZPDO ZH$X@}4$NWD99 SV

15:20:07 启动了bot 15:20:31 mcl收到了我手动发送的消息

但是bot这边就没反应,无论是 1.我两个程序都重开,mcl正常,bot收不到数据 2.两个程序都关闭,启动mcl,手动在qq上发送群消息+好友消息,mcl一切正常,再启动bot,bot也收不到数据 3.在2的基础上关闭bot,再启动,bot依然收不到数据

然后我手动在qq上发送群消息,发现mcl接收到了,但是网页端ws连接还是接收不到群消息,bot也接收不到群消息 OMD8 WA~YT@F%@PYS$(JCSS )E`Y~@}9%WD_1B19 F07PBI 我发现之前我手动用js代码建立ws发送后,发送了群消息,也接收到了对应的群消息发送成功了(状态/返回值),但是接收不到正常的消息 (就是我在qq上手动在qq群里发送了消息,mcl可以接收到消息,bot接收不到,js代码也接收不到)

也就是说网页端ws代码发送群消息成功了后,就再也收不到其他消息了,和bot是一样的,但是mcl是有接收到新消息并显示出来的,问题出在mcl向bot分发消息上

最后我再次用js代码发送群消息进行验证,结果是一致的 G5J~KB~LMW_~MK8QHX3_MAY F$E5YA42WS`M_T}$3$65C7N

Miku39c commented 2 years ago

又正常了,后面显示第三方客户端,解除后再登录,现在卡设备锁了,无论如何验证,关闭设备锁窗口后,设备锁窗口会再次弹出,导致现在无法登录,换号也出现了同样的问题