17TheWord / nonebot-plugin-mcqq

基于NoneBot的与Minecraft Server互通消息的插件
MIT License
89 stars 4 forks source link

【错误反馈】server rejected WebSocket connection: HTTP 403 #102

Closed shusiqiang closed 1 month ago

shusiqiang commented 1 month ago

运行环境

Ubuntu 24.04 LTS、Python3.12

NB插件及版本号

NoneBot-Plugin-MCQQ v2.5.7

MC插件及版本号

MC_QQ_Fabric_1.20.1-2.7.1

错误描述

.env.prod配置如下:

DRIVER=~fastapi+~httpx+~websockets+~aiohttp
# 是否发送群聊名称,默认false
mc_qq__send_group_name = false

# 是否发送频道名称,默认false
mc_qq__send_guild_name = false

# 是否发送子频道名称,默认false
mc_qq__send_channel_name = false

# 是否发送服务器名称,默认false
mc_qq__display_server_name = true

# 修饰用户发言,默认为"说:"
mc_qq__say_way = "说:"

# 服务器列表字典,默认字典为空(在env中填写时,请清除该配置项每行后方的注释,以符合Json标准)
# 可以直接将值放入Json文件使用IDE来提高编辑效率,最后移入 .env 文件
mc_qq__server_dict = '{
    "Server": { 
        "group_list": [ 
            {
                "group_id": "561707855", 
                "adapter": "onebot", 
                "bot_id": "2822445302" 
            }
        ],

        "rcon_msg": true, 
        "rcon_cmd": true
    }
}'

# Websocket 正向连接配置
minecraft_ws_urls = '{
    "Server": ["ws://127.0.0.1:8080"]
}'

# 连接验证Token,非必须,不设置该项请将mc端配置文件中token设置为空字符串即可
minecraft_access_token="123"

# minecraft 适配器的配置,用于连接Rcon,默认字典为空
minecraft_server_rcon = '{
    "Server": { 
        "enable_rcon": true, 
        "rcon_port": 25575, 
        "rcon_password": "445566"
    }
}'

# MC_QQ 频道管理员身份组,默认为["频道主", "超级管理员"]
mc_qq__guild_admin_roles = ["频道主", "超级管理员"]

# MC_QQ 启用 ChatImage MOD,默认false
# 是否启用 ChatImage,可以让图片在游戏内显示,但需要搭配ChatImage
mc_qq__chat_image_enable = false

# MC_QQ Rcon 启用 ClickAction,默认false
# 是否对图片、视频等消息启用点击在浏览器打开
mc_qq__rcon_click_action_enable = false

# MC_QQ Rcon 启用 HoverEvent,默认false
# 是否对图片、视频等消息启用悬浮时显示相应信息
mc_qq__rcon_hover_event_enable = false

# MC_QQ Rcon TextComponent 启用状态,默认为 1
# 0:所有文字均为纯白字符串,无任何修饰(较短的Rcon命令)
# 1:除了聊天内容外,文字都有颜色(稍微加长Rcon命令长度)
# 2:所有内容均使用颜色(很长的Rcon命令,每个消息段都会加上颜色)
mc_qq__rcon_text_component_status = 1

# MC_QQ 命令白名单
mc_qq__cmd_whitelist = ["list", "tps", "banlist"]

报错日志(如果有)

06-16 18:49:48 [INFO] uvicorn | ('127.0.0.1', 41336) - "WebSocket /" 403
06-16 18:49:48 [INFO] websockets | connection rejected (403 Forbidden)
06-16 18:49:48 [INFO] websockets | connection closed
06-16 18:49:48 [ERROR] nonebot | Minecraft | Error while setup websocket to ws://127.0.0.1:8080. Trying to reconnect...
Traceback (most recent call last):
  File "<string>", line 19, in <module>
  File "/home/sube/mcbot/.venv/lib/python3.12/site-packages/nonebot/__init__.py", line 334, in run
    get_driver().run(*args, **kwargs)
  File "/home/sube/mcbot/.venv/lib/python3.12/site-packages/nonebot/drivers/fastapi.py", line 186, in run
    uvicorn.run(
  File "/home/sube/mcbot/.venv/lib/python3.12/site-packages/uvicorn/main.py", line 577, in run
    server.run()
  File "/home/sube/mcbot/.venv/lib/python3.12/site-packages/uvicorn/server.py", line 65, in run
    return asyncio.run(self.serve(sockets=sockets))
  File "/usr/lib/python3.12/asyncio/runners.py", line 194, in run
    return runner.run(main)
  File "/usr/lib/python3.12/asyncio/runners.py", line 118, in run
    return self._loop.run_until_complete(task)
> File "/home/sube/mcbot/.venv/lib/python3.12/site-packages/nonebot/adapters/minecraft/adapter.py", line 147, in _forward_ws
    async with self.websocket(request) as ws:
  File "/usr/lib/python3.12/contextlib.py", line 210, in __aenter__
    return await anext(self.gen)
  File "/home/sube/mcbot/.venv/lib/python3.12/site-packages/nonebot/internal/adapter/adapter.py", line 98, in websocket
    async with self.driver.websocket(setup) as ws:
  File "/usr/lib/python3.12/contextlib.py", line 210, in __aenter__
    return await anext(self.gen)
  File "/home/sube/mcbot/.venv/lib/python3.12/site-packages/nonebot/drivers/websockets.py", line 74, in websocket
    async with connection as ws:
  File "/home/sube/mcbot/.venv/lib/python3.12/site-packages/websockets/legacy/client.py", line 629, in __aenter__
    return await self
  File "/home/sube/mcbot/.venv/lib/python3.12/site-packages/websockets/legacy/client.py", line 647, in __await_impl_timeout__
    return await self.__await_impl__()
  File "/home/sube/mcbot/.venv/lib/python3.12/site-packages/websockets/legacy/client.py", line 654, in __await_impl__
    await protocol.handshake(
  File "/home/sube/mcbot/.venv/lib/python3.12/site-packages/websockets/legacy/client.py", line 325, in handshake
    raise InvalidStatusCode(status_code, response_headers)
websockets.exceptions.InvalidStatusCode: server rejected WebSocket connection: HTTP 403
shusiqiang commented 1 month ago

发现是与QQ连接的机器人那边的配置文件中没有写正向连接,导致插件无法返回信息,服务端与插件是可以正常连接的,问题解决了已经