Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

请问 V2.10.0 ws 报错 #759

Open
gebederry opened this issue Feb 11, 2024 · 1 comment
Open

请问 V2.10.0 ws 报错 #759

gebederry opened this issue Feb 11, 2024 · 1 comment

Comments

@gebederry
Copy link

gebederry commented Feb 11, 2024

使用的版本

  • MAH 版本: 2.10.0
  • Mirai 版本: 2.16.0-RC-dev-145

问题描述

V2.9.1 无问题,V2.10.0 报错如下

使用 Node.js/mirai-ts/mirai-js 作为客户端

MAH 的报错
错误日志输出会伴随每一条监听的消息一同报出。

2024-02-11 20:53:41 E/Mah Debug: java.util.concurrent.CancellationException: ArrayChannel was cancelled
java.util.concurrent.CancellationException: ArrayChannel was cancelled
	at kotlinx.coroutines.channels.AbstractChannel.cancel(AbstractChannel.kt:656)
	at kotlinx.coroutines.channels.ReceiveChannel$DefaultImpls.cancel$default(Channel.kt:279)
	at mirai-api-http-2.10.0.mirai2.jar[shared]//io.ktor.websocket.DefaultWebSocketSessionImpl$runOutgoingProcessor$1.invokeSuspend(DefaultWebSocketSession.kt:228)
	at kotlin.coroutines.jvm.internal.BaseContinuationImpl.resumeWith(ContinuationImpl.kt:33)
	at kotlinx.coroutines.DispatchedTask.run(DispatchedTask.kt:106)
	at kotlinx.coroutines.EventLoop.processUnconfinedEvent(EventLoop.common.kt:69)
	at kotlinx.coroutines.DispatchedTaskKt.resumeUnconfined(DispatchedTask.kt:245)
	at kotlinx.coroutines.DispatchedTaskKt.dispatch(DispatchedTask.kt:161)
	at kotlinx.coroutines.CancellableContinuationImpl.dispatchResume(CancellableContinuationImpl.kt:397)
	at kotlinx.coroutines.CancellableContinuationImpl.completeResume(CancellableContinuationImpl.kt:513)
	at kotlinx.coroutines.channels.AbstractChannel$ReceiveHasNext.resumeReceiveClosed(AbstractChannel.kt:958)
	at kotlinx.coroutines.channels.AbstractSendChannel.helpClose(AbstractChannel.kt:342)
	at kotlinx.coroutines.channels.AbstractSendChannel.close(AbstractChannel.kt:271)
	at kotlinx.coroutines.channels.SendChannel$DefaultImpls.close$default(Channel.kt:93)
	at mirai-api-http-2.10.0.mirai2.jar[shared]//io.ktor.websocket.RawWebSocketJvm$1.invokeSuspend(RawWebSocketJvm.kt:78)
	at kotlin.coroutines.jvm.internal.BaseContinuationImpl.resumeWith(ContinuationImpl.kt:33)
	at kotlinx.coroutines.DispatchedTask.run(DispatchedTask.kt:106)
	at kotlinx.coroutines.internal.LimitedDispatcher.run(LimitedDispatcher.kt:42)
	at kotlinx.coroutines.scheduling.TaskImpl.run(Tasks.kt:95)
	at kotlinx.coroutines.scheduling.CoroutineScheduler.runSafely(CoroutineScheduler.kt:570)
	at kotlinx.coroutines.scheduling.CoroutineScheduler$Worker.executeTask(CoroutineScheduler.kt:750)
	at kotlinx.coroutines.scheduling.CoroutineScheduler$Worker.runWorker(CoroutineScheduler.kt:677)
	at kotlinx.coroutines.scheduling.CoroutineScheduler$Worker.run(CoroutineScheduler.kt:664)

客户端 mirai-ts/mirai-js 的报错
MobaXterm_8ZFavBIzvr

MobaXterm_Alm33ggSgT

ws 库中的相关代码

    const secWebSocketExtensions = res.headers['sec-websocket-extensions'];

    if (secWebSocketExtensions !== undefined) {
      if (!perMessageDeflate) {
        const message =
          'Server sent a Sec-WebSocket-Extensions header but no extension ' +
          'was requested';
        abortHandshake(websocket, socket, message);
        return;
      }

      let extensions;

      try {
        extensions = parse(secWebSocketExtensions);
      } catch (err) {
        const message = 'Invalid Sec-WebSocket-Extensions header';
        abortHandshake(websocket, socket, message);
        return;
      }

      const extensionNames = Object.keys(extensions);

      if (
        extensionNames.length !== 1 ||
        extensionNames[0] !== PerMessageDeflate.extensionName
      ) {
        const message = 'Server indicated an extension that was not requested';
        abortHandshake(websocket, socket, message);
        return;
      }

      try {
        perMessageDeflate.accept(extensions[PerMessageDeflate.extensionName]);
      } catch (err) {
        const message = 'Invalid Sec-WebSocket-Extensions header';
        abortHandshake(websocket, socket, message);
        return;
      }

      websocket._extensions[PerMessageDeflate.extensionName] =
        perMessageDeflate;
    }

使用 YiriMirai 作为客户端

MAH 无错误输出
客户端 YiriMirai 的报错

[2024-03-08 11:19:50.505] base.py (43) - [ERROR] :
Traceback (most recent call last):
  File "/root/qchatgpt/lib/python3.11/site-packages/websockets/legacy/client.py", line 654, in __await_impl__
    await protocol.handshake(
  File "/root/qchatgpt/lib/python3.11/site-packages/websockets/legacy/client.py", line 325, in handshake
    raise InvalidStatusCode(status_code, response_headers)
websockets.exceptions.InvalidStatusCode: server rejected WebSocket connection: HTTP 404

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/root/qchatgpt/lib/python3.11/site-packages/websockets/legacy/client.py", line 647, in __await_impl_timeout__
    return await self.__await_impl__()
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/root/qchatgpt/lib/python3.11/site-packages/websockets/legacy/client.py", line 668, in __await_impl__
    await protocol.wait_closed()
asyncio.exceptions.CancelledError

The above exception was the direct cause of the following exception:

Traceback (most recent call last):
  File "/opt/apps/qchatgpt/main.py", line 287, in run_bot_wrapper
    qqbot.adapter.run_sync()
  File "/opt/apps/qchatgpt/pkg/qqbot/sources/yirimirai.py", line 120, in run_sync
    loop.run_until_complete(MiraiRunner(self.bot)._run())
  File "/root/.pyenv/versions/3.11.7/lib/python3.11/asyncio/base_events.py", line 653, in run_until_complete
    return future.result()
           ^^^^^^^^^^^^^^^
  File "/root/qchatgpt/lib/python3.11/site-packages/mirai/bot.py", line 240, in _run
    await self.startup()
  File "/root/qchatgpt/lib/python3.11/site-packages/mirai/bot.py", line 228, in startup
    await asyncio.gather(*coros)
  File "/root/qchatgpt/lib/python3.11/site-packages/mirai/bot.py", line 137, in startup
    await self._adapter.login(self.qq)
  File "/root/qchatgpt/lib/python3.11/site-packages/mirai/adapters/base.py", line 35, in wrapped
    return await func(self, *args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/root/qchatgpt/lib/python3.11/site-packages/mirai/adapters/websocket.py", line 187, in login
    self.connection = await connect(self.host_name, extra_headers=headers)
                      ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/root/qchatgpt/lib/python3.11/site-packages/websockets/legacy/client.py", line 646, in __await_impl_timeout__
    async with asyncio_timeout(self.open_timeout):
  File "/root/.pyenv/versions/3.11.7/lib/python3.11/asyncio/timeouts.py", line 115, in __aexit__
    raise TimeoutError from exc_val
TimeoutError
[2024-03-08 11:19:50.509] main.py (324) - [ERROR] : 捕捉到未知异常:, 请前往 https://github.com/RockChinQ/QChatGPT/issues 查找或提issue
Exception in thread Thread-2 (run_bot_wrapper):
Traceback (most recent call last):
  File "/root/qchatgpt/lib/python3.11/site-packages/websockets/legacy/client.py", line 654, in __await_impl__
    await protocol.handshake(
  File "/root/qchatgpt/lib/python3.11/site-packages/websockets/legacy/client.py", line 325, in handshake
    raise InvalidStatusCode(status_code, response_headers)
websockets.exceptions.InvalidStatusCode: server rejected WebSocket connection: HTTP 404

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/root/qchatgpt/lib/python3.11/site-packages/websockets/legacy/client.py", line 647, in __await_impl_timeout__
    return await self.__await_impl__()
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/root/qchatgpt/lib/python3.11/site-packages/websockets/legacy/client.py", line 668, in __await_impl__
    await protocol.wait_closed()
asyncio.exceptions.CancelledError

The above exception was the direct cause of the following exception:

Traceback (most recent call last):
  File "/root/.pyenv/versions/3.11.7/lib/python3.11/threading.py", line 1045, in _bootstrap_inner
    self.run()
  File "/root/.pyenv/versions/3.11.7/lib/python3.11/threading.py", line 982, in run
    self._target(*self._args, **self._kwargs)
  File "/opt/apps/qchatgpt/main.py", line 327, in run_bot_wrapper
    raise e
  File "/opt/apps/qchatgpt/main.py", line 287, in run_bot_wrapper
    qqbot.adapter.run_sync()
  File "/opt/apps/qchatgpt/pkg/qqbot/sources/yirimirai.py", line 120, in run_sync
    loop.run_until_complete(MiraiRunner(self.bot)._run())
  File "/root/.pyenv/versions/3.11.7/lib/python3.11/asyncio/base_events.py", line 653, in run_until_complete
    return future.result()
           ^^^^^^^^^^^^^^^
  File "/root/qchatgpt/lib/python3.11/site-packages/mirai/bot.py", line 240, in _run
    await self.startup()
  File "/root/qchatgpt/lib/python3.11/site-packages/mirai/bot.py", line 228, in startup
    await asyncio.gather(*coros)
  File "/root/qchatgpt/lib/python3.11/site-packages/mirai/bot.py", line 137, in startup
    await self._adapter.login(self.qq)
  File "/root/qchatgpt/lib/python3.11/site-packages/mirai/adapters/base.py", line 35, in wrapped
    return await func(self, *args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/root/qchatgpt/lib/python3.11/site-packages/mirai/adapters/websocket.py", line 187, in login
    self.connection = await connect(self.host_name, extra_headers=headers)
                      ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/root/qchatgpt/lib/python3.11/site-packages/websockets/legacy/client.py", line 646, in __await_impl_timeout__
    async with asyncio_timeout(self.open_timeout):
  File "/root/.pyenv/versions/3.11.7/lib/python3.11/asyncio/timeouts.py", line 115, in __aexit__
    raise TimeoutError from exc_val
TimeoutError

相关 issues/commits

42e5281
YunYouJun/mirai-ts#60 (comment)

@gebederry gebederry reopened this Feb 27, 2024
@gebederry gebederry changed the title 请问报错 'ArrayChannel was cancelled' 请问 V2.10.0 ws 报错 Mar 8, 2024
@gebederry
Copy link
Author

急需发送视频的功能,搓了半天没搞定, 发现另一位大佬 MrXiaoM 有过 PR #748 ,跟到了分支 https://github.com/MrXiaoM/mirai-api-http/tree/video-support
构建了一下可以用了 😄 在 2.9.1 的基础上增加了短视频发送支持。版本号定 2.9.2,有需求的可以下载。
mirai-api-http-2.9.2.mirai2.zip

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant