Git Product home page Git Product logo

rockchinq / qchatgpt Goto Github PK

View Code? Open in Web Editor NEW
4.1K 23.0 327.0 29.14 MB

😎高稳定性、🧩支持扩展、🦄多模态的 ChatGPT QQ / QQ频道 / One Bot 机器人🤖 | 支持 OpenAI GPT、GPT 4o、Claude、Gemini Pro、DeepSeek、Moonshot(Kimi)、gpt4free、One API、Ollama 的 QQ / QQ频道 / OneBot 机器人 / Agent 平台

Home Page: https://q.rkcn.top

License: GNU Affero General Public License v3.0

Python 99.94% Dockerfile 0.06%
chatgpt qq openai plugins

qchatgpt's Issues

运行不了

运行环境

  • 部署方式:
    手动部署/自动部署/Docker部署
  • 系统环境:
    e.g. Centos x64
  • Python环境(仅手动部署填写):
    e.g. Python 3.10.9

描述漏洞
什么时候发生的,mirai还是主程序,越详细越好
仅 HTTP 轮询与正向 WebSocket 可用。
建议安装 ASGI 服务器,如 uvicornhypercorn
在命令行键入:
pip install uvicorn
或者
pip install hypercorn
[2022-12-22 17:22:53.800] bot.py (260) - [WARNING] : 未找到可用的 ASGI 服务,反向 WebSocket 和 WebHook 上报将不可用。
仅 HTTP 轮询与正向 WebSocket 可用。
建议安装 ASGI 服务器,如 uvicornhypercorn
在命令行键入:
pip install uvicorn
或者
pip install hypercorn
2022-12-22 17:22:55 - ERROR server rejected WebSocket connection: HTTP 404
[2022-12-22 17:22:55.855] base.py (43) - [ERROR] : server rejected WebSocket connection: HTTP 404
Exception in thread Thread-1 (run):
Traceback (most recent call last):
File "threading.py", line 1016, in _bootstrap_inner
File "threading.py", line 953, in run
File "C:\ikunbot\python\lib\site-packages\mirai\bot.py", line 197, in run
MiraiRunner(self).run(host, port, asgi_server, **kwargs)
File "C:\ikunbot\python\lib\site-packages\mirai\bot.py", line 274, in run
asyncio.run(self._run())
File "asyncio\runners.py", line 44, in run
File "asyncio\base_events.py", line 649, in run_until_complete
File "C:\ikunbot\python\lib\site-packages\mirai\bot.py", line 238, in _run
await self.startup()
File "C:\ikunbot\python\lib\site-packages\mirai\bot.py", line 226, in startup
await asyncio.gather(*coros)
File "C:\ikunbot\python\lib\site-packages\mirai\bot.py", line 135, in startup
await self._adapter.login(self.qq)
File "C:\ikunbot\python\lib\site-packages\mirai\adapters\base.py", line 35, in wrapped
return await func(self, *args, **kwargs)
File "C:\ikunbot\python\lib\site-packages\mirai\adapters\websocket.py", line 187, in login
self.connection = await connect(self.host_name, extra_headers=headers)
File "C:\ikunbot\python\lib\site-packages\websockets\legacy\client.py", line 659, in await_impl_timeout
return await asyncio.wait_for(self.await_impl(), self.open_timeout)
File "asyncio\tasks.py", line 445, in wait_for
File "C:\ikunbot\python\lib\site-packages\websockets\legacy\client.py", line 666, in await_impl
await protocol.handshake(
File "C:\ikunbot\python\lib\site-packages\websockets\legacy\client.py", line 332, in handshake
raise InvalidStatusCode(status_code, response_headers)
websockets.exceptions.InvalidStatusCode: server rejected WebSocket connection: HTTP 404

完整报错信息
完整的报错信息

linux如何安装?

您给的安装流程好像只是windows的,linux都没有run-bot.bat这个文件。请问可以出一个linux版本的安装流程吗?

运行“run-mirai.bat”时出现问题

运行“run-mirai.bat”后,自动更新下载(且多次打开后均重复这一操作),然后大片报红错误,啥都看不懂,并且最后会闪退。请指导一下,报错如下图,谢谢!
02
00
01

[BUG]运行run-bot.sh报错No module named '_ssl'

运行环境

  • 部署方式:
    自动部署
  • 系统环境:
    e,g, Centos x64

描述漏洞
运行run-bot.sh报错

完整报错信息

  File "/opt/QChatGPT/main.py", line 102, in <module>
    main()
  File "/opt/QChatGPT/main.py", line 55, in main
    import pkg.qqbot.manager
  File "/opt/QChatGPT/pkg/qqbot/manager.py", line 7, in <module>
    from mirai import At, GroupMessage, MessageEvent, Mirai, Plain, StrangerMessage, WebSocketAdapter, FriendMessage, Image
  File "/opt/python/lib/python3.10/site-packages/mirai/__init__.py", line 22, in <module>
    from mirai.bot import (
  File "/opt/python/lib/python3.10/site-packages/mirai/bot.py", line 14, in <module>
    from mirai.asgi import ASGI, asgi_serve
  File "/opt/python/lib/python3.10/site-packages/mirai/asgi.py", line 20, in <module>
    from starlette.applications import Starlette
  File "/opt/python/lib/python3.10/site-packages/starlette/applications.py", line 4, in <module>
    from starlette.datastructures import State, URLPath
  File "/opt/python/lib/python3.10/site-packages/starlette/datastructures.py", line 7, in <module>
    from starlette.concurrency import run_in_threadpool
  File "/opt/python/lib/python3.10/site-packages/starlette/concurrency.py", line 6, in <module>
    import anyio
  File "/opt/python/lib/python3.10/site-packages/anyio/__init__.py", line 104, in <module>
    from ._core._sockets import (
  File "/opt/python/lib/python3.10/site-packages/anyio/_core/_sockets.py", line 2, in <module>
    import ssl
  File "/opt/python/lib/python3.10/ssl.py", line 99, in <module>
    import _ssl             # if we can't import it, let the error propagate
ModuleNotFoundError: No module named '_ssl'

运行 python3 main.py 时报错:cannot import name dataclass_transform

系统版本:Linux ip-172-31-0-40.ap-east-1.compute.internal 5.10.118-111.515.amzn2.x86_64 #1 SMP Wed May 25 22:12:19 UTC 2022 x86_64 x86_64 x86_64 GNU/Linux
python版本: 3.7.15-1.amzn2.0.2
截图:
image

报错提示:

Traceback (most recent call last):
  File "main.py", line 97, in <module>
    main()
  File "main.py", line 52, in main
    import pkg.qqbot.manager
  File "/root/qchatgpt/QChatGPT/pkg/qqbot/manager.py", line 5, in <module>
    from mirai import At, GroupMessage, MessageEvent, Mirai, Plain, StrangerMessage, WebSocketAdapter, FriendMessage, Image
  File "/usr/local/lib/python3.7/site-packages/mirai/__init__.py", line 19, in <module>
    from mirai.adapters import Adapter
  File "/usr/local/lib/python3.7/site-packages/mirai/adapters/__init__.py", line 9, in <module>
    from .base import Adapter
  File "/usr/local/lib/python3.7/site-packages/mirai/adapters/base.py", line 12, in <module>
    from mirai import exceptions
  File "/usr/local/lib/python3.7/site-packages/mirai/exceptions.py", line 9, in <module>
    from pydantic import ValidationError
  File "pydantic/__init__.py", line 2, in init pydantic.__init__
  File "pydantic/dataclasses.py", line 52, in init pydantic.dataclasses
    #   |
ImportError: cannot import name dataclass_transform

运行python3 main.py 之后 机器人收到消息报错 asyncio.exceptions.TimeoutError

运行环境

  • 部署方式:
    手动部署
  • 系统环境:
    Centos x64 7.6
  • Python环境(仅手动部署填写):
    Python 3.9.3

描述漏洞
什么时候发生的,mirai还是主程序,越详细越好
当机器人接收到第一条消息
完整报错信息

Database initialized.
2022-12-14 16:43:27 - WARNING  未找到可用的 ASGI 服务,反向 WebSocket 和 WebHook 上报将不可用。
仅 HTTP 轮询与正向 WebSocket 可用。
建议安装 ASGI 服务器,如 `uvicorn` 或 `hypercorn`。
在命令行键入:
    pip install uvicorn
或者
    pip install hypercorn
[2022-12-14 16:43:27.200] main.py (74) - [INFO] : 程序启动完成
[2022-12-14 16:43:27.200] bot.py (262) - [WARNING] : 未找到可用的 ASGI 服务,反向 WebSocket 和 WebHook 上报将不可用。
仅 HTTP 轮询与正向 WebSocket 可用。
建议安装 ASGI 服务器,如 `uvicorn` 或 `hypercorn`。
在命令行键入:
    pip install uvicorn
或者
    pip install hypercorn
2022-12-14 16:43:37 - ERROR    
[2022-12-14 16:43:37.212] base.py (43) - [ERROR] : 
Exception in thread Thread-1:
Traceback (most recent call last):
  File "/usr/local/python3/lib/python3.9/site-packages/websockets/legacy/client.py", line 663, in __await_impl__
    _transport, _protocol = await self._create_connection()
  File "/usr/local/python3/lib/python3.9/asyncio/base_events.py", line 1041, in create_connection
    sock = await self._connect_sock(
  File "/usr/local/python3/lib/python3.9/asyncio/base_events.py", line 955, in _connect_sock
    await self.sock_connect(sock, address)
  File "/usr/local/python3/lib/python3.9/asyncio/selector_events.py", line 502, in sock_connect
    return await fut
asyncio.exceptions.CancelledError

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/usr/local/python3/lib/python3.9/asyncio/tasks.py", line 492, in wait_for
    fut.result()
asyncio.exceptions.CancelledError

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

Traceback (most recent call last):
  File "/usr/local/python3/lib/python3.9/threading.py", line 954, in _bootstrap_inner
    self.run()
  File "/usr/local/python3/lib/python3.9/threading.py", line 892, in run
    self._target(*self._args, **self._kwargs)
  File "/usr/local/python3/lib/python3.9/site-packages/mirai/bot.py", line 199, in run
    MiraiRunner(self).run(host, port, asgi_server, **kwargs)
  File "/usr/local/python3/lib/python3.9/site-packages/mirai/bot.py", line 276, in run
    asyncio.run(self._run())
  File "/usr/local/python3/lib/python3.9/asyncio/runners.py", line 44, in run
    return loop.run_until_complete(main)
  File "/usr/local/python3/lib/python3.9/asyncio/base_events.py", line 642, in run_until_complete
    return future.result()
  File "/usr/local/python3/lib/python3.9/site-packages/mirai/bot.py", line 240, in _run
    await self.startup()
  File "/usr/local/python3/lib/python3.9/site-packages/mirai/bot.py", line 228, in startup
    await asyncio.gather(*coros)
  File "/usr/local/python3/lib/python3.9/site-packages/mirai/bot.py", line 137, in startup
    await self._adapter.login(self.qq)
  File "/usr/local/python3/lib/python3.9/site-packages/mirai/adapters/base.py", line 35, in wrapped
    return await func(self, *args, **kwargs)
  File "/usr/local/python3/lib/python3.9/site-packages/mirai/adapters/websocket.py", line 187, in login
    self.connection = await connect(self.host_name, extra_headers=headers)
  File "/usr/local/python3/lib/python3.9/site-packages/websockets/legacy/client.py", line 659, in __await_impl_timeout__
    return await asyncio.wait_for(self.__await_impl__(), self.open_timeout)
  File "/usr/local/python3/lib/python3.9/asyncio/tasks.py", line 494, in wait_for
    raise exceptions.TimeoutError() from exc
asyncio.exceptions.TimeoutError

[BUG]出现群聊未艾特也会回复的bug

群聊bot没有艾特也会进行回复,个人怀疑是私聊和群聊同时使用的问题,贴图如下:
1
2
3
第一张图片是先与人进行了对话,在第二张图片中群聊中使用了bot,在晚上群聊使用bot的时候出现没有艾特也回复的现象。
4
第四张图片是今天上午我在私聊使用bot时,bot在群聊未艾特的情况下回复了群友的消息。

修改README中关于部署的部分,增加doc目录存放说明文档

晚上花了6h部署(可能是太菜了QAQ)

最后还是部署成功了,但一路下来踩坑翻看文档和issues观感并不是很好。
所以我打算修改部分README,主要修改关于部署这部分的。
我想结合之前的文档,issue和这次部署成功的经验单独写一份md文件。
对原README的修改部分会尽可能的小,新加的内容会写新文件里,README里再去链接。
我想详尽的部署教程,对于不熟悉的新手还是很有帮助的。

[BUG]一键部署版本里面config.py配置AI人格不生效

运行环境

  • 部署方式:
    自动部署
  • 系统环境:
    win2012
  • Python环境(仅手动部署填写):
    e.g. Python 3.10.9

描述漏洞
一键部署版本里面config.py配置AI人格不生效

完整报错信息
一键部署版本里面config.py配置AI人格不生效

[BUG]运行卡住了,不会动了

运行环境

  • 部署方式:
    手动部署/自动部署/Docker部署
  • 系统环境:
    e.g. Centos x64
  • Python环境(仅手动部署填写):
    e.g. Python 3.10.9

描述漏洞
什么时候发生的,mirai还是主程序,越详细越好

完整报错信息
image

[BUG]MahKtorAdapter[ws]: java.net.BindException: Address in use java.net.BindException: Address in use

运行环境

  • 部署方式:
    自动部署
  • 系统环境:
    e,g, docker
  • Python环境(仅手动部署填写):
    e.g. Python 3.9

描述漏洞
连续开2个mirai时候,ws重复,要保证mirai/config/net.mamoe.mirai-api-http/setting.yaml里面不会重复

完整报错信息

2022-12-16 03:31:01 E/MahKtorAdapter[ws]: java.net.BindException: Address in use
java.net.BindException: Address in use
        at java.base/sun.nio.ch.Net.bind0(Native Method)
        at java.base/sun.nio.ch.Net.bind(Net.java:552)
        at java.base/sun.nio.ch.ServerSocketChannelImpl.netBind(ServerSocketChannelImpl.java:336)
        at java.base/sun.nio.ch.ServerSocketChannelImpl.bind(ServerSocketChannelImpl.java:294)
        at java.base/sun.nio.ch.ServerSocketAdaptor.bind(ServerSocketAdaptor.java:88)
        at mirai-api-http-2.6.2.mirai2.jar[shared]//io.ktor.network.sockets.ConnectUtilsJvmKt.bind(ConnectUtilsJvm.kt:32)
        at mirai-api-http-2.6.2.mirai2.jar[shared]//io.ktor.network.sockets.TcpSocketBuilder.bind(TcpSocketBuilder.kt:46)
        at mirai-api-http-2.6.2.mirai2.jar[shared]//io.ktor.network.sockets.TcpSocketBuilder.bind(TcpSocketBuilder.kt:30)
        at mirai-api-http-2.6.2.mirai2.jar[shared]//io.ktor.network.sockets.TcpSocketBuilder.bind$default(TcpSocketBuilder.kt:26)
        at mirai-api-http-2.6.2.mirai2.jar[shared]//io.ktor.server.cio.backend.HttpServerKt$httpServer$acceptJob$1.invokeSuspend(HttpServer.kt:46)
        at kotlin.coroutines.jvm.internal.BaseContinuationImpl.resumeWith(ContinuationImpl.kt:33)
        at kotlinx.coroutines.DispatchedTask.run(DispatchedTask.kt:106)
        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)

2022-12-16 03:31:01 E/net.mamoe.mirai-api-http: kotlinx.coroutines.JobCancellationException: LazyStandaloneCoroutine is cancelling; job=LazyStandaloneCoroutine{Cancelling}@3554bdc0
kotlinx.coroutines.JobCancellationException: LazyStandaloneCoroutine is cancelling; job=LazyStandaloneCoroutine{Cancelling}@3554bdc0
Caused by: java.net.BindException: Address in use
        at java.base/sun.nio.ch.Net.bind0(Native Method)
        at java.base/sun.nio.ch.Net.bind(Net.java:552)
        at java.base/sun.nio.ch.ServerSocketChannelImpl.netBind(ServerSocketChannelImpl.java:336)
        at java.base/sun.nio.ch.ServerSocketChannelImpl.bind(ServerSocketChannelImpl.java:294)
        at java.base/sun.nio.ch.ServerSocketAdaptor.bind(ServerSocketAdaptor.java:88)
        at mirai-api-http-2.6.2.mirai2.jar[shared]//io.ktor.network.sockets.ConnectUtilsJvmKt.bind(ConnectUtilsJvm.kt:32)
        at mirai-api-http-2.6.2.mirai2.jar[shared]//io.ktor.network.sockets.TcpSocketBuilder.bind(TcpSocketBuilder.kt:46)
        at mirai-api-http-2.6.2.mirai2.jar[shared]//io.ktor.network.sockets.TcpSocketBuilder.bind(TcpSocketBuilder.kt:30)
        at mirai-api-http-2.6.2.mirai2.jar[shared]//io.ktor.network.sockets.TcpSocketBuilder.bind$default(TcpSocketBuilder.kt:26)
        at mirai-api-http-2.6.2.mirai2.jar[shared]//io.ktor.server.cio.backend.HttpServerKt$httpServer$acceptJob$1.invokeSuspend(HttpServer.kt:46)
        at kotlin.coroutines.jvm.internal.BaseContinuationImpl.resumeWith(ContinuationImpl.kt:33)
        at kotlinx.coroutines.DispatchedTask.run(DispatchedTask.kt:106)
        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)

运行main.py出现报错,TypeError: As of 3.10, the *loop* parameter was removed from Lock() since it is no longer necessary

`[2022-12-10 00:59:25.745] main.py (69) - [INFO] : 程序启动完成
2022-12-10 00:59:25 - WARNING  未找到可用的 ASGI 服务,反向 WebSocket 和 WebHook 上报将不可用。
仅 HTTP 轮询与正向 WebSocket 可用。
建议安装 ASGI 服务器,如 `uvicorn` 或 `hypercorn`。
在命令行键入:
    pip install uvicorn
或者
    pip install hypercorn
[2022-12-10 00:59:25.746] bot.py (260) - [WARNING] : 未找到可用的 ASGI 服务,反向 WebSocket 和 WebHook 上报将不可用。
仅 HTTP 轮询与正向 WebSocket 可用。
建议安装 ASGI 服务器,如 `uvicorn` 或 `hypercorn`。
在命令行键入:
    pip install uvicorn
或者
    pip install hypercorn
2022-12-10 00:59:25 - ERROR    As of 3.10, the *loop* parameter was removed from Lock() since it is no longer necessary
[2022-12-10 00:59:25.751] base.py (43) - [ERROR] : As of 3.10, the *loop* parameter was removed from Lock() since it is no longer necessary
Exception in thread Thread-2 (run):
Traceback (most recent call last):
  File "/usr/lib/python3.10/threading.py", line 1016, in _bootstrap_inner
    self.run()
  File "/usr/lib/python3.10/threading.py", line 953, in run
    self._target(*self._args, **self._kwargs)
  File "/usr/local/lib/python3.10/dist-packages/mirai/bot.py", line 197, in run
    MiraiRunner(self).run(host, port, asgi_server, **kwargs)
  File "/usr/local/lib/python3.10/dist-packages/mirai/bot.py", line 274, in run
    asyncio.run(self._run())
  File "/usr/lib/python3.10/asyncio/runners.py", line 44, in run
    return loop.run_until_complete(main)
  File "/usr/lib/python3.10/asyncio/base_events.py", line 646, in run_until_complete
    return future.result()
  File "/usr/local/lib/python3.10/dist-packages/mirai/bot.py", line 238, in _run
    await self.startup()
  File "/usr/local/lib/python3.10/dist-packages/mirai/bot.py", line 226, in startup
    await asyncio.gather(*coros)
  File "/usr/local/lib/python3.10/dist-packages/mirai/bot.py", line 135, in startup
    await self._adapter.login(self.qq)
  File "/usr/local/lib/python3.10/dist-packages/mirai/adapters/base.py", line 35, in wrapped
    return await func(self, *args, **kwargs)
  File "/usr/local/lib/python3.10/dist-packages/mirai/adapters/websocket.py", line 187, in login
    self.connection = await connect(self.host_name, extra_headers=headers)
  File "/usr/local/lib/python3.10/dist-packages/websockets/legacy/client.py", line 622, in __await_impl__
    transport, protocol = await self._create_connection()
  File "/usr/lib/python3.10/asyncio/base_events.py", line 1089, in create_connection
    transport, protocol = await self._create_connection_transport(
  File "/usr/lib/python3.10/asyncio/base_events.py", line 1107, in _create_connection_transport
    protocol = protocol_factory()
  File "/usr/local/lib/python3.10/dist-packages/websockets/legacy/client.py", line 160, in __init__
    super().__init__(**kwargs)
  File "/usr/local/lib/python3.10/dist-packages/websockets/legacy/protocol.py", line 154, in __init__
    self._drain_lock = asyncio.Lock(
  File "/usr/lib/python3.10/asyncio/locks.py", line 78, in __init__
    super().__init__(loop=loop)
  File "/usr/lib/python3.10/asyncio/mixins.py", line 17, in __init__
    raise TypeError(
TypeError: As of 3.10, the *loop* parameter was removed from Lock() since it is no longer necessary`

可能是python版本问题,一会升级3.9.x试试

完善项目文档

  1. 会话超时、提交消息数量等特性的说明
  2. 会话的保存和加载等概念

[BUG] 机器人已启动的,但是私聊机器人不给回复

运行环境

  • 部署方式:
    手动部署
  • 系统环境:
    Ubuntu 9.4.0-1ubuntu1~20.04
  • Python环境(仅手动部署填写):
    python3.9.13

描述漏洞
2022年12月17日 启动了mirai,正常启动了。然后启动QChatGPT后,也正常启动了;接着私聊机器人的QQ号,机器人不回复

完整报错信息

mirai启动日志:

  00:33:03 [INFO] iTX Technologies Mirai Console Loader version 2.1.2-61c8bd8
  00:33:03 [INFO] Runtime: OpenJDK 64-Bit Server VM 17.0.5 (arch: 64)
  00:33:03 [INFO] https://github.com/iTXTech/mirai-console-loader
  00:33:03 [INFO] This program is licensed under GNU AGPL v3
  00:33:07 [INFO] Mirai Console Loader Announcement:
Mirai Console Loader 公告栏

如果在图片上传的时候遇到问题请与我们联系 (需要提供图片文件源本)
`- 如 Unsupported image type for ExternalResource *
`  considering use gif/png/bmp/jpg format.
`- Tracker: https://github.com/mamoe/mirai/issues/new/choose

常用资源整合
`- https://mirai.mamoe.net/topic/653
 
MCL 已推出 2.1.0,更好的支持 Mirai 2.11 的插件系统,建议更新。

  00:33:07 [INFO] Verifying "net.mamoe:mirai-console" v2.13.2
  00:33:08 [INFO] Verifying "net.mamoe:mirai-console-terminal" v2.13.2
  00:33:08 [INFO] Verifying "net.mamoe:mirai-core-all" v2.13.2
  00:33:08 [INFO] Verifying "org.itxtech:mcl-addon" v2.1.1
  00:33:09 [INFO] Verifying "net.mamoe:mirai-api-http" v2.6.2
2022-12-17 00:33:09 I/main: Starting mirai-console...
2022-12-17 00:33:09 I/main: 

==================================[ Mirai consosle 2.13.2 ]===================================
 __       __ __                   __  ______                                      __
|  \     /  \  \                 |  \/      \                                    |  \
| ▓▓\   /  ▓▓\▓▓ ______   ______  \▓▓  ▓▓▓▓▓▓\ ______  _______   _______  ______ | ▓▓ ______
| ▓▓▓\ /  ▓▓▓  \/      \ |      \|  \ ▓▓   \▓▓/      \|       \ /       \/      \| ▓▓/      \
| ▓▓▓▓\  ▓▓▓▓ ▓▓  ▓▓▓▓▓▓\ \▓▓▓▓▓▓\ ▓▓ ▓▓     |  ▓▓▓▓▓▓\ ▓▓▓▓▓▓▓\  ▓▓▓▓▓▓▓  ▓▓▓▓▓▓\ ▓▓  ▓▓▓▓▓▓\
| ▓▓\▓▓ ▓▓ ▓▓ ▓▓ ▓▓   \▓▓/      ▓▓ ▓▓ ▓▓   __| ▓▓  | ▓▓ ▓▓  | ▓▓\▓▓    \| ▓▓  | ▓▓ ▓▓ ▓▓    ▓▓
| ▓▓ \▓▓▓| ▓▓ ▓▓ ▓▓     |  ▓▓▓▓▓▓▓ ▓▓ ▓▓__/  \ ▓▓__/ ▓▓ ▓▓  | ▓▓_\▓▓▓▓▓▓\ ▓▓__/ ▓▓ ▓▓ ▓▓▓▓▓▓▓▓
| ▓▓  \▓ | ▓▓ ▓▓ ▓▓      \▓▓    ▓▓ ▓▓\▓▓    ▓▓\▓▓    ▓▓ ▓▓  | ▓▓       ▓▓\▓▓    ▓▓ ▓▓\▓▓     \
 \▓▓      \▓▓\▓▓\▓▓       \▓▓▓▓▓▓▓\▓▓ \▓▓▓▓▓▓  \▓▓▓▓▓▓ \▓▓   \▓▓\▓▓▓▓▓▓▓  \▓▓▓▓▓▓ \▓▓ \▓▓▓▓▓▓▓


2022-12-17 00:33:09 I/main: Backend: version 2.13.2, built on 2022-12-05 01:50:53.
2022-12-17 00:33:09 I/main: Frontend Terminal: version 2.13.2, provided by Mamoe Technologies
2022-12-17 00:33:09 I/main: Welcome to visit https://mirai.mamoe.net/
2022-12-17 00:33:10 W/stderr: SLF4J: Failed to load class "org.slf4j.impl.StaticLoggerBinder".
2022-12-17 00:33:10 W/stderr: SLF4J: Defaulting to no-operation (NOP) logger implementation
2022-12-17 00:33:10 W/stderr: SLF4J: See http://www.slf4j.org/codes.html#StaticLoggerBinder for further details.
2022-12-17 00:33:10 I/plugin: Successfully loaded plugin net.mamoe.mirai-api-http v2.6.2
2022-12-17 00:33:10 I/plugin: Successfully loaded plugin MCL Addon v2.1.1
2022-12-17 00:33:10 I/main: Prepared built-in commands: autoLogin, help, login, logout, permission, status, stop
2022-12-17 00:33:10 W/net.mamoe.mirai-api-http: USING INITIAL KEY, please edit the key
2022-12-17 00:33:10 I/Mirai HTTP API: ********************************************************
2022-12-17 00:33:10 W/stderr: SLF4J: Failed to load class "org.slf4j.impl.StaticLoggerBinder".
2022-12-17 00:33:10 W/stderr: SLF4J: Defaulting to no-operation (NOP) logger implementation
2022-12-17 00:33:10 W/stderr: SLF4J: See http://www.slf4j.org/codes.html#StaticLoggerBinder for further details.
2022-12-17 00:33:10 I/ws adapter: >>> [ws adapter] is listening at ws://localhost:8006
2022-12-17 00:33:10 I/Mirai HTTP API: Http api server is running with verifyKey: INITKEYWev0bQtj
2022-12-17 00:33:10 I/Mirai HTTP API: adaptors: [ws]
2022-12-17 00:33:10 I/Mirai HTTP API: ********************************************************
2022-12-17 00:33:10 I/MCL Addon: iTXTech MCL Version: 2.1.2-61c8bd8
2022-12-17 00:33:10 W/MCL Addon: iTXTech Soyuz 未安装,Soyuz MCL Handler 特性已禁用
2022-12-17 00:33:11 I/main: 2 plugin(s) enabled.
2022-12-17 00:33:11 I/main: mirai-console started successfully.
> login 11450111xx xxxxxxxx
2022-12-17 00:33:37 W/stderr: ERROR StatusLogger Log4j2 could not find a logging implementation. Please add log4j-core to the classpath. Using SimpleLogger to log to the console...
2022-12-17 00:33:37 I/Bot.1145011164: Loaded account secrets from local cache.
2022-12-17 00:33:38 I/Bot.1145011164: Saved account secrets to local cache for fast login.
2022-12-17 00:33:38 I/Bot.1145011164: Login successful.
2022-12-17 00:33:40 V/Bot.1145011164: Event: BotOnlineEvent(bot=Bot(1145011164))
2022-12-17 00:33:40 I/Bot.1145011164: Bot login successful.
11 (1145011164) Login successful
2022-12-17 00:33:40 V/Bot.11450111xx: 地球() -> !help
2022-12-17 00:33:56 V/Bot.11450111xx: 地球() -> 1
2022-12-17 00:35:06 V/Bot.11450111xx: 地球() -> !help
2022-12-17 00:35:32 V/Bot.11450111xx: 地球() -> 请帮我写一个能提取网址的正则表达式
2022-12-17 00:48:31 V/Bot.11450111xx: 地球() -> @11450111xx /count

QChatGPT启动日志

Database initialized.
load usage:{'7e4dc42664b246d5a8a6e3c4c2f90ae1': 0}
[2022-12-17 00:38:04.729] keymgr.py (52) - [INFO] : 使用api-key:default
[2022-12-17 00:38:04.730] main.py (74) - [INFO] : 程序启动完成
2022-12-17 00:38:04 - WARNING  未找到可用的 ASGI 服务,反向 WebSocket 和 WebHook 上报将不可用。
仅 HTTP 轮询与正向 WebSocket 可用。
建议安装 ASGI 服务器,如 `uvicorn` 或 `hypercorn`。
在命令行键入:
    pip install uvicorn
或者
    pip install hypercorn
[2022-12-17 00:38:04.731] bot.py (262) - [WARNING] : 未找到可用的 ASGI 服务,反向 WebSocket 和 WebHook 上报将不可用。
仅 HTTP 轮询与正向 WebSocket 可用。
建议安装 ASGI 服务器,如 `uvicorn` 或 `hypercorn`。
在命令行键入:
    pip install uvicorn
或者
    pip install hypercorn
2022-12-17 00:38:04 - INFO     [WebSocket] 成功登录到账号11450111xx。
[2022-12-17 00:38:04.840] websocket.py (194) - [INFO] : [WebSocket] 成功登录到账号11450111xx。
2022-12-17 00:38:04 - INFO     [WebSocket] 机器人开始运行。按 Ctrl + C 停止。
[2022-12-17 00:38:04.841] websocket.py (250) - [INFO] : [WebSocket] 机器人开始运行。按 Ctrl + C 停止。

依赖包mirai安装异常,报错NameError: name 'execfile' is not defined

系统版本:Linux ip-172-31-0-40.ap-east-1.compute.internal 5.10.118-111.515.amzn2.x86_64 #1 SMP Wed May 25 22:12:19 UTC 2022 x86_64 x86_64 x86_64 GNU/Linux
python版本: 3.9.8 和 3.11.1
截图:
image
异常:
Collecting mirai
Using cached mirai-0.1.5.tar.gz (12 kB)
Preparing metadata (setup.py) ... error
error: subprocess-exited-with-error

× python setup.py egg_info did not run successfully.
│ exit code: 1
╰─> [8 lines of output]
Traceback (most recent call last):
File "", line 2, in
File "", line 34, in
File "/tmp/pip-install-4odfkf1h/mirai_a12ce1acd10f46d5ba7f8f474cadfc17/setup.py", line 16, in
version = version('mirai'),
File "/tmp/pip-install-4odfkf1h/mirai_a12ce1acd10f46d5ba7f8f474cadfc17/setup.py", line 9, in version
execfile(_version, env)
NameError: name 'execfile' is not defined
[end of output]

note: This error originates from a subprocess, and is likely not a problem with pip.
error: metadata-generation-failed

× Encountered error while generating package metadata.
╰─> See above for output.

note: This is an issue with the package mentioned above, not pip.
hint: See above for details.

运行main.py报错

Python版本:3.11.1
Mirai:2.6.2,默认配置部署,账号已经成功登陆,能正常监听到消息
操作方式:按照文档操作,运行到最后一步报错

报错内容:

D:\Project\QQRobot\QChatGPT\QChatGPT>python main.py
[2022-12-10 12:19:18.026] main.py (69) - [INFO] : 程序启动完成
2022-12-10 12:19:18 - WARNING  未找到可用的 ASGI 服务,反向 WebSocket 和 WebHook 上报将不可用。
仅 HTTP 轮询与正向 WebSocket 可用。
建议安装 ASGI 服务器,如 uvicorn或 hypercorn。
在命令行键入:
    pip install uvicorn
或者
    pip install hypercorn
[2022-12-10 12:19:18.026] bot.py (260) - [WARNING] : 未找到可用的 ASGI 服务,反向 WebSocket 和 WebHook 上报将不可用。
仅 HTTP 轮询与正向 WebSocket 可用。
建议安装 ASGI 服务器,如 `uvicorn` 或 `hypercorn`。
在命令行键入:
    pip install uvicorn
或者
    pip install hypercorn
2022-12-10 12:19:28 - ERROR
[2022-12-10 12:19:28.028] base.py (43) - [ERROR] :
Exception in thread Thread-2 (run):
Traceback (most recent call last):
  File "D:\Code\Python\Lib\site-packages\websockets\legacy\client.py", line 666, in __await_impl__
    await protocol.handshake(
  File "D:\Code\Python\Lib\site-packages\websockets\legacy\client.py", line 332, 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 "D:\Code\Python\Lib\asyncio\tasks.py", line 490, in wait_for
    return fut.result()
           ^^^^^^^^^^^^
  File "D:\Code\Python\Lib\site-packages\websockets\legacy\client.py", line 680, 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 "D:\Code\Python\Lib\threading.py", line 1038, in _bootstrap_inner
    self.run()
  File "D:\Code\Python\Lib\threading.py", line 975, in run
    self._target(*self._args, **self._kwargs)
  File "D:\Code\Python\Lib\site-packages\mirai\bot.py", line 197, in run
    MiraiRunner(self).run(host, port, asgi_server, **kwargs)
  File "D:\Code\Python\Lib\site-packages\mirai\bot.py", line 274, in run
    asyncio.run(self._run())
  File "D:\Code\Python\Lib\asyncio\runners.py", line 190, in run
    return runner.run(main)
           ^^^^^^^^^^^^^^^^
  File "D:\Code\Python\Lib\asyncio\runners.py", line 118, in run
    return self._loop.run_until_complete(task)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "D:\Code\Python\Lib\asyncio\base_events.py", line 653, in run_until_complete
    return future.result()
           ^^^^^^^^^^^^^^^
  File "D:\Code\Python\Lib\site-packages\mirai\bot.py", line 238, in _run
    await self.startup()
  File "D:\Code\Python\Lib\site-packages\mirai\bot.py", line 226, in startup
    await asyncio.gather(*coros)
  File "D:\Code\Python\Lib\site-packages\mirai\bot.py", line 135, in startup
    await self._adapter.login(self.qq)
  File "D:\Code\Python\Lib\site-packages\mirai\adapters\base.py", line 35, in wrapped
    return await func(self, *args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "D:\Code\Python\Lib\site-packages\mirai\adapters\websocket.py", line 187, in login
    self.connection = await connect(self.host_name, extra_headers=headers)
                      ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "D:\Code\Python\Lib\site-packages\websockets\legacy\client.py", line 659, in __await_impl_timeout__
    return await asyncio.wait_for(self.__await_impl__(), self.open_timeout)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "D:\Code\Python\Lib\asyncio\tasks.py", line 492, in wait_for
    raise exceptions.TimeoutError() from exc`

根据提示安装了uvicorn,然后报错:

`D:\Project\QQRobot\QChatGPT\QChatGPT>python main.py
[2022-12-10 12:19:58.582] main.py (69) - [INFO] : 程序启动完成
Exception in thread Thread-2 (run):
Traceback (most recent call last):
  File "D:\Code\Python\Lib\threading.py", line 1038, in _bootstrap_inner
    self.run()
  File "D:\Code\Python\Lib\threading.py", line 975, in run
    self._target(*self._args, **self._kwargs)
  File "D:\Code\Python\Lib\site-packages\mirai\bot.py", line 197, in run
    MiraiRunner(self).run(host, port, asgi_server, **kwargs)
  File "D:\Code\Python\Lib\site-packages\mirai\bot.py", line 255, in run
    if not asgi_serve(
           ^^^^^^^^^^^
  File "D:\Code\Python\Lib\site-packages\mirai\asgi.py", line 206, in asgi_serve
    run(app, host=host, port=port, debug=True, **kwargs)
TypeError: run() got an unexpected keyword argument 'debug'`

运行“run-bot.bat”时出现报错,server rejected WebSocket connection: HTTP 404

报错内容如下

2022-12-14 13:16:46 - WARNING  未找到可用的 ASGI 服务,反向 WebSocket 和 WebHook 上报将不可用。
仅 HTTP 轮询与正向 WebSocket 可用。
建议安装 ASGI 服务器,如 `uvicorn` 或 `hypercorn`。
在命令行键入:
    pip install uvicorn
或者
    pip install hypercorn
[2022-12-14 13:16:46.171] bot.py (260) - [WARNING] : 未找到可用的 ASGI 服务,反向 WebSocket 和 WebHook 上报将不可用。
仅 HTTP 轮询与正向 WebSocket 可用。
建议安装 ASGI 服务器,如 `uvicorn` 或 `hypercorn`。
在命令行键入:
    pip install uvicorn
或者
    pip install hypercorn
2022-12-14 13:16:56 - ERROR
[2022-12-14 13:16:56.185] base.py (43) - [ERROR] :
Exception in thread Thread-1 (run):
Traceback (most recent call last):
  File "Y:\OpenAIBotForQQ\python\lib\site-packages\websockets\legacy\client.py", line 666, in __await_impl__
    await protocol.handshake(
  File "Y:\OpenAIBotForQQ\python\lib\site-packages\websockets\legacy\client.py", line 332, 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 "Y:\OpenAIBotForQQ\python\lib\site-packages\websockets\legacy\client.py", line 680, in __await_impl__
    await protocol.wait_closed()
asyncio.exceptions.CancelledError

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "asyncio\tasks.py", line 456, in wait_for
asyncio.exceptions.CancelledError

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

Traceback (most recent call last):
  File "threading.py", line 1016, in _bootstrap_inner
  File "threading.py", line 953, in run
  File "Y:\OpenAIBotForQQ\python\lib\site-packages\mirai\bot.py", line 197, in run
    MiraiRunner(self).run(host, port, asgi_server, **kwargs)
  File "Y:\OpenAIBotForQQ\python\lib\site-packages\mirai\bot.py", line 274, in run
    asyncio.run(self._run())
  File "asyncio\runners.py", line 44, in run
  File "asyncio\base_events.py", line 649, in run_until_complete
  File "Y:\OpenAIBotForQQ\python\lib\site-packages\mirai\bot.py", line 238, in _run
    await self.startup()
  File "Y:\OpenAIBotForQQ\python\lib\site-packages\mirai\bot.py", line 226, in startup
    await asyncio.gather(*coros)
  File "Y:\OpenAIBotForQQ\python\lib\site-packages\mirai\bot.py", line 135, in startup
    await self._adapter.login(self.qq)
  File "Y:\OpenAIBotForQQ\python\lib\site-packages\mirai\adapters\base.py", line 35, in wrapped
    return await func(self, *args, **kwargs)
  File "Y:\OpenAIBotForQQ\python\lib\site-packages\mirai\adapters\websocket.py", line 187, in login
    self.connection = await connect(self.host_name, extra_headers=headers)
  File "Y:\OpenAIBotForQQ\python\lib\site-packages\websockets\legacy\client.py", line 659, in __await_impl_timeout__
    return await asyncio.wait_for(self.__await_impl__(), self.open_timeout)
  File "asyncio\tasks.py", line 458, in wait_for
asyncio.exceptions.TimeoutError

[BUG]登录mirai的时候使用ticket登录仍然存在安全问题。

运行环境

  • 部署方式:
    手动部署/自动部署/Docker部署
  • 系统环境:
    e.g. Centos x64
  • Python环境(仅手动部署填写):
    e.g. Python 3.10.9

描述漏洞
12月14日时,使用mirai登录无问题。

16日登录mirai发现需要重新验证。
使用ticket验证后,mirai仍然无法登录。

完整报错信息
image

[BUG] mirai的Pixiv插件兼容问题

运行环境

  • 部署方式:
    自动部署
  • 系统环境:
    Ubuntu 22.04 x86_64

描述漏洞
运行机器人后,mirai的插件Setting.yml内的编辑内容会被重置为默认,插件为https://github.com/Nekoer/mirai-plugins-pixiv。
https://mirai.mamoe.net/topic/461/pixiv%E6%8F%92%E4%BB%B6-%E6%9F%A5%E7%9C%8B%E6%8E%92%E8%A1%8C%E6%A6%9C-%E4%BB%A5%E5%9B%BE%E6%90%9C%E5%9B%BE-%E4%BB%A5%E5%9B%BE%E6%90%9C%E7%95%AA-%E6%9F%A5%E7%9C%8B%E5%8E%9F%E5%9B%BE-%E6%9F%A5%E7%9C%8B%E4%BD%9C%E8%80%85%E4%BD%9C%E5%93%81-%E6%90%9C%E6%A0%87%E7%AD%BE

完整报错
启动机器人后(./run-bot.sh),mirari文件夹下/config/com.hcyacg.pixiv/中,编辑过的的Setting.yml内容会被重置为默认。
启动mirai(./run-mirai.sh),Setting.yml内容不会变。

Did not receive a valid HTTP response

(base) [root@iZwz9clns9fhh6rwn6zeqgZ QChatGPT]# python3 main.py
2022-12-11 14:26:06 - WARNING  未找到可用的 ASGI 服务,反向 WebSocket 和 WebHook 上报将不可用。
仅 HTTP 轮询与正向 WebSocket 可用。
建议安装 ASGI 服务器,如 `uvicorn` 或 `hypercorn`。
在命令行键入:
    pip install uvicorn
或者
    pip install hypercorn
[2022-12-11 14:26:06.326] bot.py (262) - [WARNING] : 未找到可用的 ASGI 服务,反向 WebSocket 和 WebHook 上报将不可用。
仅 HTTP 轮询与正向 WebSocket 可用。
建议安装 ASGI 服务器,如 `uvicorn` 或 `hypercorn`。
在命令行键入:
    pip install uvicorn
或者
    pip install hypercorn
[2022-12-11 14:26:06.327] main.py (69) - [INFO] : 程序启动完成
2022-12-11 14:26:06 - ERROR    did not receive a valid HTTP response
[2022-12-11 14:26:06.331] base.py (43) - [ERROR] : did not receive a valid HTTP response
Exception in thread Thread-2:
Traceback (most recent call last):
  File "/root/anaconda3/lib/python3.9/site-packages/websockets/legacy/http.py", line 120, in read_response
    status_line = await read_line(stream)
  File "/root/anaconda3/lib/python3.9/site-packages/websockets/legacy/http.py", line 200, in read_line
    raise EOFError("line without CRLF")
EOFError: line without CRLF

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

Traceback (most recent call last):
  File "/root/anaconda3/lib/python3.9/site-packages/websockets/legacy/client.py", line 138, in read_http_response
    status_code, reason, headers = await read_response(self.reader)
  File "/root/anaconda3/lib/python3.9/site-packages/websockets/legacy/http.py", line 122, in read_response
    raise EOFError("connection closed while reading HTTP status line") from exc
EOFError: connection closed while reading HTTP status line

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

Traceback (most recent call last):
  File "/root/anaconda3/lib/python3.9/threading.py", line 980, in _bootstrap_inner
    self.run()
  File "/root/anaconda3/lib/python3.9/threading.py", line 917, in run
    self._target(*self._args, **self._kwargs)
  File "/root/anaconda3/lib/python3.9/site-packages/mirai/bot.py", line 199, in run
    MiraiRunner(self).run(host, port, asgi_server, **kwargs)
  File "/root/anaconda3/lib/python3.9/site-packages/mirai/bot.py", line 276, in run
    asyncio.run(self._run())
  File "/root/anaconda3/lib/python3.9/asyncio/runners.py", line 44, in run
    return loop.run_until_complete(main)
  File "/root/anaconda3/lib/python3.9/asyncio/base_events.py", line 647, in run_until_complete
    return future.result()
  File "/root/anaconda3/lib/python3.9/site-packages/mirai/bot.py", line 240, in _run
    await self.startup()
  File "/root/anaconda3/lib/python3.9/site-packages/mirai/bot.py", line 228, in startup
    await asyncio.gather(*coros)
  File "/root/anaconda3/lib/python3.9/site-packages/mirai/bot.py", line 137, in startup
    await self._adapter.login(self.qq)
  File "/root/anaconda3/lib/python3.9/site-packages/mirai/adapters/base.py", line 35, in wrapped
    return await func(self, *args, **kwargs)
  File "/root/anaconda3/lib/python3.9/site-packages/mirai/adapters/websocket.py", line 187, in login
    self.connection = await connect(self.host_name, extra_headers=headers)
  File "/root/anaconda3/lib/python3.9/site-packages/websockets/legacy/client.py", line 659, in __await_impl_timeout__
    return await asyncio.wait_for(self.__await_impl__(), self.open_timeout)
  File "/root/anaconda3/lib/python3.9/asyncio/tasks.py", line 479, in wait_for
    return fut.result()
  File "/root/anaconda3/lib/python3.9/site-packages/websockets/legacy/client.py", line 666, in __await_impl__
    await protocol.handshake(
  File "/root/anaconda3/lib/python3.9/site-packages/websockets/legacy/client.py", line 326, in handshake
    status_code, response_headers = await self.read_http_response()
  File "/root/anaconda3/lib/python3.9/site-packages/websockets/legacy/client.py", line 144, in read_http_response
    raise InvalidMessage("did not receive a valid HTTP response") from exc
websockets.exceptions.InvalidMessage: did not receive a valid HTTP response

手动部署遇到的一些问题

  • python环境3.9+
  • config.py 里面的localhost 改成用127.0.0.1,如果出现 含有::1的报错
  • _ssl模块 导入异常的话,安装

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.