AnzhiZhang / MCDReforgedPlugins

MCDReforged Plugins
GNU General Public License v3.0
95 stars 57 forks source link

QQChat 相关功能无法正常使用 #4

Closed RisingInIris2017 closed 4 years ago

RisingInIris2017 commented 4 years ago

系统环境

操作系统

Windows Server 2019 Datacenter

网络情况

5700、5701 和 10676 端口均打开,且未被其他应用占用。 Minecraft 服务端占用 3500 端口。

Python 版本

3.8.6rc1 (64-bit)

Java 运行环境

Minecraft 服务端:

OpenJDK Runtime Environment (Alibaba Dragonwell 8.3.3) (build 1.8.0_242-b98)
OpenJDK 64-Bit Server VM (Alibaba Dragonwell 8.3.3) (build 25.242-b98, mixed mode)

Mirai 机器人:

OpenJDK Runtime Environment (AdoptOpenJDK)(build 1.8.0_265-b01)
OpenJDK 64-Bit Server VM (AdoptOpenJDK)(build 25.265-b01, mixed mode)

机器人信息

MiraiOK 版本:MiraiOK 20200915.071520 windows-amd64 Mirai-console 版本:

Starting mirai-console...
2020-09-20 17:47:25 I/main: Backend: version 1.0-M4, built on 2020-09-13 02:19:35.
2020-09-20 17:47:25 I/main: Frontend Pure: version 1.0-M4, provided by Mamoe Technologies

CQHTTP-Mirai 插件信息:

2020-09-20 17:47:27 I/CQHTTP-Mirai: Plugin loaded! 0.2.4-SNAPSHOT-1.0-M4-dev
2020-09-20 17:47:27 I/CQHTTP-Mirai: 插件当前Commit 版本: c2c8ae6

CQHTTP-Mirai 插件配置: <miraiok安装目录>\config\CQHTTP-Mirai\tech.mihoyo.mirai.Settings.yml

MCDR 信息

MCDR 版本:0.9.6 MCDR 插件列表:

[MCDR] [19:25:43] [InfoReactor/INFO]: 8x 已加载插件
[MCDR] [19:25:43] [InfoReactor/INFO]: - CoolQAPI-MCDR.py
[MCDR] [19:25:43] [InfoReactor/INFO]: - daycount.py
[MCDR] [19:25:43] [InfoReactor/INFO]: - Here.py
[MCDR] [19:25:43] [InfoReactor/INFO]: - joinMOTD.py
[MCDR] [19:25:43] [InfoReactor/INFO]: - OnlinePlayerAPI.py
[MCDR] [19:25:43] [InfoReactor/INFO]: - QQChat.py
[MCDR] [19:25:43] [InfoReactor/INFO]: - QuickBackupM.py
[MCDR] [19:25:43] [InfoReactor/INFO]: - tps.py
[MCDR] [19:25:43] [InfoReactor/INFO]: 0x 已禁用插件
[MCDR] [19:25:43] [InfoReactor/INFO]: 0x 未加载插件

以上插件在运行过程中均未产生任何报错。

问题描述

产生问题的步骤

  1. 登录 QQChat.py 中已经配置好的三个 admin_id 中的其中一个管理员 QQ 号。
  2. 启动 Mirai 程序,登录机器人 QQ 号,见上面附带的 CQHTTP-Mirai 配置文件第三行。
  3. Mirai 成功登录 QQ 号后,用 !!MCDR reload all 命令重载 MCDR。
    直接重启 MCDR 也尝试过,仍然有同样问题。
  4. 通过管理员 QQ 号,先后向机器人 QQ 号私聊发送 /bound/whitelist 命令。
  5. 从 Mirai 控制台可以看到机器人收到了私聊消息,但 MCDR 控制台中无任何反应。
  6. 通过已经配置在 QQChat.py 中 group_id 的 QQ 群,向机器人发送同样的消息。
  7. 从 Mirai 控制台可以看到机器人收到了群聊消息,但 MCDR 控制台中无任何反应。

由于我无法使用随 CoolQAPI 插件分发的 Mirai 包,我使用了其他渠道获取的 MiraiOK 包, 并对照随 CoolQAPI 分发的 CQHTTP-Mirai 配置文件 settings.yml, 修改了我手头 Mirai 包中的 CQHTTP-Mirai 插件配置文件,已经附在上文中。 但我并不能确定是否是我的配置有误导致了机器人与 MCDR 没能共同工作。

希望可以得到您的帮助,非常感谢!

AnzhiZhang commented 4 years ago

写了这么多信息辛苦了!

可以打开MCDR的debug模式查看是否MCDR接收到了转发的信息 你的配置文件可能存在问题,这是我使用的配置文件

'qq号':
  http:
    enable: true
    host: 127.0.0.1
    port: 5700
    postUrl: "http://127.0.0.1:5701/post"
    postMessageFormat: array

提供一份我使用的cqhttp-mirai插件: cqhttp-mirai-0.2.1-all.zip

RisingInIris2017 commented 4 years ago

感谢你的及时回复! 我使用 cqhttp-mirai-0.2.3-embedded-all.jar 加上你 comment 中的配置文件,成功运行了机器人。 我打开了 MCDR 调试模式,在 MCDR 控制台收到以下信息:

[MCDR] [23:23:40] [CoolQAPI server/DEBUG]: 接收上报数据

{
    "ClassType": "PrivateMessage",
    "self_id": <机器人QQ号>,
    "sub_type": "friend",
    "message_id": 10946,
    "user_id": <管理员QQ号>,
    "message": [
        {
            "ClassType": "text",
            "data": {
                "text": "/mc rua"
            },
            "type": "text"
        }
    ],
    "raw_message": "/mc rua",
    "font": 0,
    "sender": {
        "user_id": <管理员QQ号>,
        "nickname": "<管理员昵称>",
        "sex": "unknown",
        "age": 0
    },
    "time": 1600701820,
    "post_type": "message",
    "message_type": "private"
}

按照预想,我发送的是 /mc rua 命令,应当通过 MCDR 向服务器内发送 rua 消息。 但是机器人向管理员回报的消息是: 请使用/bound <ID>绑定游戏ID

出现了没有预想到的新问题,希望能取得你的帮助。 非常感谢!

AnzhiZhang commented 4 years ago

首先恭喜你接收到了数据的上报,MCDR的调试模式可以关闭了

按照预想,我发送的是 /mc rua 命令,应当通过 MCDR 向服务器内发送 rua 消息。 但是机器人向管理员回报的消息是: 请使用/bound 绑定游戏ID

这是因为QQChat不知道你是游戏中的谁,需要在群里(group_id)使用 /bound <ID> 用于QQChat在服务器内发送消息的时候显示你是谁,如 [QQ] <Fallen_Breath> rua

RisingInIris2017 commented 4 years ago

这是因为QQChat不知道你是游戏中的谁,需要在群里(group_id)使用 /bound <ID> 用于QQChat在服务器内发送消息的时候显示你是谁,如 [QQ] <Fallen_Breath> rua

感谢你的帮助,通过在群里使用 /bound QQ号 游戏ID 命令,确实成功解决了这个问题。 但是在通过 /command 命令,向 MCDR 发送命令时遇到了这样的问题:

[MCDR] [17:37:11] [CoolQAPI server/DEBUG]: 接收上报数据
{
    "ClassType": "PrivateMessage",
    "self_id": <机器人QQ>,
    "sub_type": "friend",
    "message_id": 1197,
    "user_id": <管理员QQ>,
    "message": [
        {
            "ClassType": "text",
            "data": {
                "text": "/command !!MCDR status"
            },
            "type": "text"
        }
    ],
    "raw_message": "/command !!MCDR status",
    "font": 0,
    "sender": {
        "user_id": <管理员QQ>,
        "nickname": "<管理员QQ昵称>",
        "sex": "unknown",
        "age": 0
    },
    "time": 1600767431,
    "post_type": "message",
    "message_type": "private"
}
[MCDR] [17:37:11] [on_qq_command@QQChat/DEBUG]: Plugin called is_rcon_running(), args amount: 0
[MCDR] [17:37:11] [on_qq_command@QQChat/DEBUG]: Plugin called execute(), args amount: 1
[MCDR] [17:37:11] [on_qq_command@QQChat/DEBUG]:   - type: str, content: !!MCDR status
[Server] [17:37:11] [Server thread/INFO]: Unknown or incomplete command, see below for error
[MCDR] [17:37:11] [MainThread/DEBUG]: Parsed text from server stdin:
[MCDR] [17:37:11] [MainThread/DEBUG]:     Time: 17:37:11; ID: 811
[MCDR] [17:37:11] [MainThread/DEBUG]:     Player: None; Source: 0; Logging level: INFO
[MCDR] [17:37:11] [MainThread/DEBUG]:     Content: Unknown or incomplete command, see below for error
[MCDR] [17:37:11] [MainThread/DEBUG]:     Raw content: [17:37:11] [Server thread/INFO]: Unknown or incomplete command, see below for error
[Server] [17:37:11] [Server thread/INFO]: !!MCDR status<--[HERE]
[MCDR] [17:37:11] [MainThread/DEBUG]: Parsed text from server stdin:
[MCDR] [17:37:11] [MainThread/DEBUG]:     Time: 17:37:11; ID: 812
[MCDR] [17:37:11] [MainThread/DEBUG]:     Player: None; Source: 0; Logging level: INFO
[MCDR] [17:37:11] [MainThread/DEBUG]:     Content: !!MCDR status<--[HERE]
[MCDR] [17:37:11] [MainThread/DEBUG]:     Raw content: [17:37:11] [Server thread/INFO]: !!MCDR status<--[HERE]

发送 /command 命令的 QQ 号就是我上一步绑定过的 QQ 号, 现在 MCDR 已经能够接收到我使用这个 QQ 发送的 /mc 文字消息,并转发到游戏内了。 但是使用 /command !!MCDR status 命令时,仍然产生上述报错。

我通过 MCDR 控制台直接发送 !!MCDR status 命令,能够正常显示如下执行结果:

[MCDR] [17:43:30] [InfoReactor/INFO]: MCDReforged 版本: 0.9.6
[MCDR] [17:43:30] [InfoReactor/INFO]: 服务端状态: 运行中
[MCDR] [17:43:30] [InfoReactor/INFO]: 服务端已启动: True
[MCDR] [17:43:30] [InfoReactor/INFO]: 自然退出: True
[MCDR] [17:43:30] [InfoReactor/INFO]: rcon: 离线
[MCDR] [17:43:30] [InfoReactor/INFO]: 插件数量: 8
[MCDR] [17:43:30] [InfoReactor/INFO]: 服务端 PID: 2756
[MCDR] [17:43:30] [InfoReactor/INFO]: 消息队列大小: 0/10000
[MCDR] [17:43:30] [InfoReactor/INFO]: 线程数: 9
[MCDR] [17:43:30] [InfoReactor/INFO]:   - MainThread
[MCDR] [17:43:30] [InfoReactor/INFO]:   - PT0-idle
[MCDR] [17:43:30] [InfoReactor/INFO]:   - PT1-idle
[MCDR] [17:43:30] [InfoReactor/INFO]:   - PT2-idle
[MCDR] [17:43:30] [InfoReactor/INFO]:   - PT3-idle
[MCDR] [17:43:30] [InfoReactor/INFO]:   - UpdateHelper
[MCDR] [17:43:30] [InfoReactor/INFO]:   - Console
[MCDR] [17:43:30] [InfoReactor/INFO]:   - InfoReactor
[MCDR] [17:43:30] [InfoReactor/INFO]:   - CoolQAPI server

可见 !!MCDR status 并非上文报错中所说,是一个“Unknown or incomplete command”。 请问这是因为 QQChat 不支持发送 !!MCDR 开头的命令,还是因为我没有启用 rcon(报错中显示插件调用了is_rcon_running() 方法),还是由于我仍然有什么地方没有配置到位?

实在是抱歉问了这么多的问题!非常感谢你的耐心回复!

AnzhiZhang commented 4 years ago

/command 只是运行服务端指令,无法运行MCDR指令和插件指令,也就是服务端后台支持的所有指令

RisingInIris2017 commented 4 years ago

/command 只是运行服务端指令,无法运行MCDR指令和插件指令,也就是服务端后台支持的所有指令

问题已经解决了,非常感谢!