lcjqyml / wechatbot Goto Github PK
View Code? Open in Web Editor NEWA chatbot for wechat.
License: GNU Affero General Public License v3.0
A chatbot for wechat.
License: GNU Affero General Public License v3.0
提交 issue 前,请先确认:
表现
描述 BUG 的表现情况
运行环境:
复现步骤
描述你是如何触发这个 BUG 的
手机扫码确认后这个报错
wechatbot_1 | uncaughtException AssertionError [ERR_ASSERTION]: 1 == 0
wechatbot_1 | at Object.equal (/app/node_modules/wechat4u/src/util/global.js:53:14)
wechatbot_1 | at /app/node_modules/wechat4u/src/core.js:194:16
wechatbot_1 | at processTicksAndRejections (node:internal/process/task_queues:96:5) {
wechatbot_1 | code: 2,
wechatbot_1 | details: 'AssertionError [ERR_ASSERTION]: 1 == 0\n' +
wechatbot_1 | ' at Object.equal (/app/node_modules/wechat4u/src/util/global.js:53:14)\n' +
wechatbot_1 | ' at /app/node_modules/wechat4u/src/core.js:194:16\n' +
wechatbot_1 | ' at processTicksAndRejections (node:internal/process/task_queues:96:5)'
wechatbot_1 | }
该项目能不能支持发送base64格式图片给机器人,方便机器人对图片进行二次处理
cause: Error: read ECONNRESET
at TLSWrap.onStreamRead (node:internal/stream_base_commons:217:20) {
errno: -104,
code: 'ECONNRESET',
syscall: 'read'
},
tips: '上传媒体文件失败'
如果不可以,是否得一直挂着该微信号。
提交 issue 前,请先确认:
表现
描述 BUG 的表现情况
运行环境:
微信掉线后怎么重新登录
无论在[response]段中将buffer_delay设置为0还是600,它均会分段,估计是在wechat bot中没有增加这个设置功能,作者可否加一下,感谢!
是否可以支持在vercel或者railway中部署该项目
搜狐视频提供的二维码 api,已稳定五年以上。
https://my.tv.sohu.com/user/a/wvideo/getQRCode.do?text= https://www.abc.com
qrserver 提供的二维码 api,国外服务,已稳定五年以上。
https://api.qrserver.com/v1/create-qr-code/?size=150×150&data= https://www.abc.com
微信使用案例 替换后面url就可以如下
https://my.tv.sohu.com/user/a/wvideo/getQRCode.do?text=https%3A%2F%2Flogin.weixin.qq.com%2Fl%2F4dUvawyZHA%3D%3D
uncaughtException GError: getaddrinfo EAI_AGAIN webpush.wx2.qq.com
at Function.AxiosError.from (/app/node_modules/axios/lib/core/AxiosError.js:89:14)
at RedirectableRequest.handleRequestError (/app/node_modules/axios/lib/adapters/http.js:577:25)
at RedirectableRequest.emit (node:events:525:35)
at RedirectableRequest.emit (node:domain:489:12)
at ClientRequest.eventHandlers. (/app/node_modules/follow-redirects/index.js:14:24)
at ClientRequest.emit (node:events:513:28)
at ClientRequest.emit (node:domain:489:12)
at TLSSocket.socketErrorListener (node:_http_client:494:9)
at TLSSocket.emit (node:events:513:28)
at TLSSocket.emit (node:domain:489:12) {
code: 2,
details: 'Error: getaddrinfo EAI_AGAIN webpush.wx2.qq.com\n' +
' at Function.AxiosError.from (/app/node_modules/axios/lib/core/AxiosError.js:89:14)\n' +
' at RedirectableRequest.handleRequestError (/app/node_modules/axios/lib/adapters/http.js:577:25)\n' +
' at RedirectableRequest.emit (node:events:525:35)\n' +
' at RedirectableRequest.emit (node:domain:489:12)\n' +
' at ClientRequest.eventHandlers. (/app/node_modules/follow-redirects/index.js:14:24)\n' +
' at ClientRequest.emit (node:events:513:28)\n' +
' at ClientRequest.emit (node:domain:489:12)\n' +
' at TLSSocket.socketErrorListener (node:_http_client:494:9)\n' +
' at TLSSocket.emit (node:events:513:28)\n' +
' at TLSSocket.emit (node:domain:489:12)'
}
uncaughtException GError: 状态同步超过193.536s未响应,5s后尝试重启
at Wechat.checkPolling (/app/node_modules/wechat4u/src/wechat.js:248:17)
at Timeout._onTimeout (/app/node_modules/wechat4u/src/wechat.js:268:51)
at listOnTimeout (node:internal/timers:559:17)
at processTimers (node:internal/timers:502:7) {
code: 2,
details: 'Error: 状态同步超过193.536s未响应,5s后尝试重启\n' +
' at Wechat.checkPolling (/app/node_modules/wechat4u/src/wechat.js:248:17)\n' +
' at Timeout._onTimeout (/app/node_modules/wechat4u/src/wechat.js:268:51)\n' +
' at listOnTimeout (node:internal/timers:559:17)\n' +
' at processTimers (node:internal/timers:502:7)'
}
npm ERR! path /app
npm ERR! command failed
npm ERR! signal SIGTERM
npm ERR! command sh -c -- nodemon --exec node --watch config.yaml --loader ts-node/esm src/main.ts
npm ERR! A complete log of this run can be found in:
npm ERR! /root/.npm/_logs/2023-05-03T05_18_07_735Z-debug-0.log
[email protected] dev
nodemon --exec node --watch config.yaml --loader ts-node/esm src/main.ts
如题
#!/bin/bash
# 检测docker logs输出内容
if docker logs --tail=20 wx-bot | grep -q "details: 'Error:"; then
# 如果包含指定字样,则执行docker restart命令
docker restart wx-bot
echo "微信机器人已重启"
else
# 如果没有指定字样,则输出无故障信息
echo "微信机器人无故障"
fi
创建一个脚本,用crontab,每5分钟检测一次log,如果包含details: 'Error:这个字样,则自动重启
描述:chatgpt-mirai-qq-bot和 WeChatBot 在同一个docker下启动 WeChatBot 无法连接chatgpt-mirai-qq-bot
1, WeChatBot 配置信息
chatbotProxy: "http://127.0.0.1:8234"
autoAcceptFriendShip: "true"
autoAcceptRoomInvite: "true"
privateChatTrigger: ""
groupChatTrigger: ""
responseQuote: "true"
2,chatgpt-mirai-qq-bot -> docker-compose.yaml 配置信息
version: '3.4'
services:
mirai:
image: lss233/mirai-http:latest
restart: always
environment:
LANG: 'C.UTF-8'
volumes:
- ./mirai/bots:/app/bots
- ./mirai/config:/app/config
- ./mirai/data:/app/data
# - ./mirai/config.json:/app/config.json # 如果你要修改 mcl 的设置,就解除这个注释
chatgpt:
image: lss233/chatgpt-mirai-qq-bot:browser-version
ports:
- 8234:8234 # <----- 主要就是加这一项
restart: always
environment:
LANG: 'C.UTF-8'
volumes:
- ./config.cfg:/app/config.cfg
- ./data:/app/data
- ./presets:/app/presets
# - ./fonts:/app/fonts # 如果你想自定义字体,就解除注释
watchtower: # [可选] 自动更新
image: containrrr/watchtower
volumes: # 如果启动失败,请修改下面这条:
- /var/run/docker.sock:/var/run/docker.sock
3,报错内容
[12/28/2023, 5:35:26 AM] AxiosError: connect ECONNREFUSED 127.0.0.1:8234
2023-12-28 13:35:26 at Function.AxiosError.from (file:///app/node_modules/axios/lib/core/AxiosError.js:89:14)
2023-12-28 13:35:26 at RedirectableRequest.handleRequestError (file:///app/node_modules/axios/lib/adapters/http.js:577:25)
2023-12-28 13:35:26 at RedirectableRequest.emit (node:events:513:28)
2023-12-28 13:35:26 at RedirectableRequest.emit (node:domain:489:12)
2023-12-28 13:35:26 at ClientRequest.eventHandlers. (/app/node_modules/follow-redirects/index.js:14:24)
2023-12-28 13:35:26 at ClientRequest.emit (node:events:513:28)
2023-12-28 13:35:26 at ClientRequest.emit (node:domain:489:12)
2023-12-28 13:35:26 at Socket.socketErrorListener (node:_http_client:494:9)
2023-12-28 13:35:26 at Socket.emit (node:events:513:28)
2023-12-28 13:35:26 at Socket.emit (node:domain:489:12) {
2023-12-28 13:35:26 port: 8234,
2023-12-28 13:35:26 address: '127.0.0.1',
2023-12-28 13:35:26 syscall: 'connect',
2023-12-28 13:35:26 code: 'ECONNREFUSED',
2023-12-28 13:35:26 errno: -111,
2023-12-28 13:35:26 config: {
2023-12-28 13:35:26 transitional: {
2023-12-28 13:35:26 silentJSONParsing: true,
2023-12-28 13:35:26 forcedJSONParsing: true,
2023-12-28 13:35:26 clarifyTimeoutError: false
2023-12-28 13:35:26 },
2023-12-28 13:35:26 adapter: [ 'xhr', 'http' ],
2023-12-28 13:35:26 transformRequest: [ [Function: transformRequest] ],
2023-12-28 13:35:26 transformResponse: [ [Function: transformResponse] ],
2023-12-28 13:35:26 timeout: 0,
2023-12-28 13:35:26 xsrfCookieName: 'XSRF-TOKEN',
2023-12-28 13:35:26 xsrfHeaderName: 'X-XSRF-TOKEN',
2023-12-28 13:35:26 maxContentLength: -1,
2023-12-28 13:35:26 maxBodyLength: -1,
2023-12-28 13:35:26 env: { FormData: [Function], Blob: null },
2023-12-28 13:35:26 validateStatus: [Function: validateStatus],
2023-12-28 13:35:26 headers: AxiosHeaders {
2023-12-28 13:35:26 Accept: 'application/json, text/plain, /',
2023-12-28 13:35:26 'Content-Type': 'application/json',
2023-12-28 13:35:26 'User-Agent': 'axios/1.3.6',
2023-12-28 13:35:26 'Content-Length': '62',
2023-12-28 13:35:26 'Accept-Encoding': 'gzip, compress, deflate, br'
2023-12-28 13:35:26 },
2023-12-28 13:35:26 method: 'post',
2023-12-28 13:35:26 url: 'http://127.0.0.1:8234/v2/chat',
2023-12-28 13:35:26 data: '{"message":"1","session_id":"friend-LiuTC","username":"LiuTC"}'
2023-12-28 13:35:26 },
2023-12-28 13:35:26 request: <ref *1> Writable {
2023-12-28 13:35:26 _writableState: WritableState {
2023-12-28 13:35:26 objectMode: false,
2023-12-28 13:35:26 highWaterMark: 16384,
2023-12-28 13:35:26 finalCalled: false,
2023-12-28 13:35:26 needDrain: false,
2023-12-28 13:35:26 ending: false,
2023-12-28 13:35:26 ended: false,
2023-12-28 13:35:26 finished: false,
2023-12-28 13:35:26 destroyed: false,
2023-12-28 13:35:26 decodeStrings: true,
2023-12-28 13:35:26 defaultEncoding: 'utf8',
2023-12-28 13:35:26 length: 0,
2023-12-28 13:35:26 writing: false,
2023-12-28 13:35:26 corked: 0,
2023-12-28 13:35:26 sync: true,
2023-12-28 13:35:26 bufferProcessing: false,
2023-12-28 13:35:26 onwrite: [Function: bound onwrite],
2023-12-28 13:35:26 writecb: null,
2023-12-28 13:35:26 writelen: 0,
2023-12-28 13:35:26 afterWriteTickInfo: null,
2023-12-28 13:35:26 buffered: [],
2023-12-28 13:35:26 bufferedIndex: 0,
2023-12-28 13:35:26 allBuffers: true,
2023-12-28 13:35:26 allNoop: true,
2023-12-28 13:35:26 pendingcb: 0,
2023-12-28 13:35:26 constructed: true,
2023-12-28 13:35:26 prefinished: false,
2023-12-28 13:35:26 errorEmitted: false,
2023-12-28 13:35:26 emitClose: true,
2023-12-28 13:35:26 autoDestroy: true,
2023-12-28 13:35:26 errored: null,
2023-12-28 13:35:26 closed: false,
2023-12-28 13:35:26 closeEmitted: false,
2023-12-28 13:35:26 [Symbol(kOnFinished)]: []
2023-12-28 13:35:26 },
2023-12-28 13:35:26 _events: [Object: null prototype] {
2023-12-28 13:35:26 response: [Function: handleResponse],
2023-12-28 13:35:26 error: [Function: handleRequestError],
2023-12-28 13:35:26 socket: [Function: handleRequestSocket]
2023-12-28 13:35:26 },
2023-12-28 13:35:26 _eventsCount: 3,
2023-12-28 13:35:26 _maxListeners: undefined,
2023-12-28 13:35:26 _options: {
2023-12-28 13:35:26 maxRedirects: 21,
2023-12-28 13:35:26 maxBodyLength: Infinity,
2023-12-28 13:35:26 protocol: 'http:',
2023-12-28 13:35:26 path: '/v2/chat',
2023-12-28 13:35:26 method: 'POST',
2023-12-28 13:35:26 headers: [Object: null prototype],
2023-12-28 13:35:26 agents: [Object],
2023-12-28 13:35:26 auth: undefined,
2023-12-28 13:35:26 beforeRedirect: [Function: dispatchBeforeRedirect],
2023-12-28 13:35:26 beforeRedirects: [Object],
2023-12-28 13:35:26 hostname: '127.0.0.1',
2023-12-28 13:35:26 port: '8234',
2023-12-28 13:35:26 agent: undefined,
2023-12-28 13:35:26 nativeProtocols: [Object],
2023-12-28 13:35:26 pathname: '/v2/chat'
2023-12-28 13:35:26 },
2023-12-28 13:35:26 _ended: false,
2023-12-28 13:35:26 _ending: true,
2023-12-28 13:35:26 _redirectCount: 0,
2023-12-28 13:35:26 _redirects: [],
2023-12-28 13:35:26 _requestBodyLength: 62,
2023-12-28 13:35:26 _requestBodyBuffers: [ [Object] ],
2023-12-28 13:35:26 _onNativeResponse: [Function (anonymous)],
2023-12-28 13:35:26 _currentRequest: ClientRequest {
2023-12-28 13:35:26 _events: [Object: null prototype],
2023-12-28 13:35:26 _eventsCount: 7,
2023-12-28 13:35:26 _maxListeners: undefined,
2023-12-28 13:35:26 outputData: [],
2023-12-28 13:35:26 outputSize: 0,
2023-12-28 13:35:26 writable: true,
2023-12-28 13:35:26 destroyed: false,
2023-12-28 13:35:26 _last: true,
2023-12-28 13:35:26 chunkedEncoding: false,
2023-12-28 13:35:26 shouldKeepAlive: false,
2023-12-28 13:35:26 maxRequestsOnConnectionReached: false,
2023-12-28 13:35:26 _defaultKeepAlive: true,
2023-12-28 13:35:26 useChunkedEncodingByDefault: true,
2023-12-28 13:35:26 sendDate: false,
2023-12-28 13:35:26 _removedConnection: false,
2023-12-28 13:35:26 _removedContLen: false,
2023-12-28 13:35:26 _removedTE: false,
2023-12-28 13:35:26 strictContentLength: false,
2023-12-28 13:35:26 _contentLength: '62',
2023-12-28 13:35:26 _hasBody: true,
2023-12-28 13:35:26 _trailer: '',
2023-12-28 13:35:26 finished: false,
2023-12-28 13:35:26 _headerSent: true,
2023-12-28 13:35:26 _closed: false,
2023-12-28 13:35:26 socket: [Socket],
2023-12-28 13:35:26 _header: 'POST /v2/chat HTTP/1.1\r\n' +
2023-12-28 13:35:26 'Accept: application/json, text/plain, /\r\n' +
2023-12-28 13:35:26 'Content-Type: application/json\r\n' +
2023-12-28 13:35:26 'User-Agent: axios/1.3.6\r\n' +
2023-12-28 13:35:26 'Content-Length: 62\r\n' +
2023-12-28 13:35:26 'Accept-Encoding: gzip, compress, deflate, br\r\n' +
2023-12-28 13:35:26 'Host: 127.0.0.1:8234\r\n' +
2023-12-28 13:35:26 'Connection: close\r\n' +
2023-12-28 13:35:26 '\r\n',
2023-12-28 13:35:26 _keepAliveTimeout: 0,
2023-12-28 13:35:26 _onPendingData: [Function: nop],
2023-12-28 13:35:26 agent: [Agent],
2023-12-28 13:35:26 socketPath: undefined,
2023-12-28 13:35:26 method: 'POST',
2023-12-28 13:35:26 maxHeaderSize: undefined,
2023-12-28 13:35:26 insecureHTTPParser: undefined,
2023-12-28 13:35:26 path: '/v2/chat',
2023-12-28 13:35:26 _ended: false,
2023-12-28 13:35:26 res: null,
2023-12-28 13:35:26 aborted: false,
2023-12-28 13:35:26 timeoutCb: null,
2023-12-28 13:35:26 upgradeOrConnect: false,
2023-12-28 13:35:26 parser: null,
2023-12-28 13:35:26 maxHeadersCount: null,
2023-12-28 13:35:26 reusedSocket: false,
2023-12-28 13:35:26 host: '127.0.0.1',
2023-12-28 13:35:26 protocol: 'http:',
2023-12-28 13:35:26 _redirectable: [Circular *1],
2023-12-28 13:35:26 [Symbol(kCapture)]: false,
2023-12-28 13:35:26 [Symbol(kBytesWritten)]: 0,
2023-12-28 13:35:26 [Symbol(kEndCalled)]: false,
2023-12-28 13:35:26 [Symbol(kNeedDrain)]: false,
2023-12-28 13:35:26 [Symbol(corked)]: 0,
2023-12-28 13:35:26 [Symbol(kOutHeaders)]: [Object: null prototype],
2023-12-28 13:35:26 [Symbol(kUniqueHeaders)]: null
2023-12-28 13:35:26 },
2023-12-28 13:35:26 _currentUrl: 'http://127.0.0.1:8234/v2/chat',
2023-12-28 13:35:26 [Symbol(kCapture)]: false
2023-12-28 13:35:26 },
2023-12-28 13:35:26 cause: Error: connect ECONNREFUSED 127.0.0.1:8234
2023-12-28 13:35:26 at TCPConnectWrap.afterConnect [as oncomplete] (node:net:1278:16) {
2023-12-28 13:35:26 errno: -111,
2023-12-28 13:35:26 code: 'ECONNREFUSED',
2023-12-28 13:35:26 syscall: 'connect',
2023-12-28 13:35:26 address: '127.0.0.1',
2023-12-28 13:35:26 port: 8234
2023-12-28 13:35:26 }
2023-12-28 13:35:26 }
因为chatgpt for qq项目已经有群聊的触发器功能了,建议增加一个群聊的全部交转模式,不做群聊的关键字触发过滤,将全部的内容交给后端。
提交 issue 前,请先确认:
表现
当wechatbot和chatgpt运行不在一个服务器上时图片无法正常发送
运行环境:
root@iZj6c38nbfy7ormrcal544Z:~# docker version
Client:
Version: 20.10.12
API version: 1.41
Go version: go1.16.2
Git commit: 20.10.12-0ubuntu2~20.04.1
Built: Wed Apr 6 02:14:38 2022
OS/Arch: linux/amd64
Context: default
Experimental: true
Server:
Engine:
Version: 20.10.12
API version: 1.41 (minimum version 1.12)
Go version: go1.16.2
Git commit: 20.10.12-0ubuntu2~20.04.1
Built: Thu Feb 10 15:03:35 2022
OS/Arch: linux/amd64
Experimental: false
containerd:
Version: 1.5.9-0ubuntu1~20.04.4
GitCommit:
runc:
Version: 1.1.0-0ubuntu1~20.04.1
GitCommit:
docker-init:
Version: 0.19.0
GitCommit:
chatgpt端docker版本:
root@VM-4-8-ubuntu:~/chatgpt-qq# docker version
Client: Docker Engine - Community
Version: 23.0.3
API version: 1.42
Go version: go1.19.7
Git commit: 3e7cbfd
Built: Tue Apr 4 22:06:10 2023
OS/Arch: linux/amd64
Context: default
Server: Docker Engine - Community
Engine:
Version: 23.0.3
API version: 1.42 (minimum version 1.12)
Go version: go1.19.7
Git commit: 59118bf
Built: Tue Apr 4 22:06:10 2023
OS/Arch: linux/amd64
Experimental: false
containerd:
Version: 1.6.20
GitCommit: 2806fc1057397dbaeefbea0e4e17bddfbd388f38
runc:
Version: 1.1.5
GitCommit: v1.1.5-0-gf19387a
docker-init:
Version: 0.19.0
GitCommit: de40ad0
root@iZj6c38nbfy7ormrcal544Z:~# docker image ls
REPOSITORY TAG IMAGE ID CREATED SIZE
lcjqyml/wechatbot latest 680cfddd4d7c 2 days ago 1.32GB
chatgpt
root@VM-4-8-ubuntu:~# docker image ls
REPOSITORY TAG IMAGE ID CREATED SIZE
lss233/chatgpt-mirai-qq-bot browser-version 89ff487fa491 33 hours ago 991MB
复现步骤
描述你是如何触发这个 BUG 的
config.cfg中配置了以下内容:
[text_to_image]
# 文字转图片
# 是否强制开启,设置后所有的消息强制以图片发送,减小风控概率
always = true
然后登陆微信,尝试触发,出现无法发送图片bug
预期行为
正常发送返回内容图片
截图
chatgpt端日志:
chatgpt-qq-chatgpt-1 | 2023-05-10 14:54:39.331 | INFO | platforms.http_service:construct_bot_request:174 - Get message from friend-[]:
chatgpt-qq-chatgpt-1 | 1
chatgpt-qq-chatgpt-1 | 2023-05-10 14:54:39.332 | DEBUG | platforms.http_service:process_request:101 - Start to process bot request 1683730479332.
chatgpt-qq-chatgpt-1 | 2023-05-10 14:54:39.332 | DEBUG | middlewares.concurrentlock:handle_request:25 - [Concurrent] 使用 Adapter 内部的 Queue
chatgpt-qq-chatgpt-1 | 2023-05-10 14:54:39.332 | DEBUG | middlewares.concurrentlock:handle_request:27 - [Concurrent] 排队中,前面还有 0 个人!
chatgpt-qq-chatgpt-1 | 2023-05-10 14:54:39.332 | DEBUG | middlewares.concurrentlock:handle_request:40 - [Concurrent] 排队中,前面还有 0 个人!
chatgpt-qq-chatgpt-1 | 2023-05-10 14:54:39.333 | DEBUG | middlewares.concurrentlock:handle_request:42 - [Concurrent] 排到了!
chatgpt-qq-chatgpt-1 | INFO:quart.serving:ip:37788 POST /v2/chat 1.1 200 13 2726
chatgpt-qq-chatgpt-1 | [2023-05-10 14:54:39,334] ip:37788 POST /v2/chat 1.1 200 13 2726
chatgpt-qq-chatgpt-1 | [2023-05-10 14:54:39,334] ip:37788 POST /v2/chat 1.1 200 13 2726
chatgpt-qq-chatgpt-1 | 2023-05-10 14:54:39.334 | DEBUG | middlewares.timeout:create_timeout_task:55 - [Timeout] 开始计时……
chatgpt-qq-chatgpt-1 | 2023-05-10 14:54:41.646 | DEBUG | platforms.http_service:v2_chat_response:151 - Bot request 1683730479332 response ->
chatgpt-qq-chatgpt-1 | {"result": "SUCCESS", "message": [], "voice": [], "image": []}
chatgpt-qq-chatgpt-1 | INFO:quart.serving:ip:37796 GET /v2/chat/response 1.1 200 62 1441
chatgpt-qq-chatgpt-1 | [2023-05-10 14:54:41,647] ip:37796 GET /v2/chat/response 1.1 200 62 1441
chatgpt-qq-chatgpt-1 | [2023-05-10 14:54:41,647] ip:37796 GET /v2/chat/response 1.1 200 62 1441
chatgpt-qq-chatgpt-1 | 2023-05-10 14:54:42.295 | DEBUG | adapter.chatgpt.web:ask:97 - [ChatGPT-Web] 59788fc0-bf33-4954-af27-1f6b4e565430 - I'm sorry, but I still don't understand what you're looking for. Can you please provide more information or ask a specific question? I'm here to help.
chatgpt-qq-chatgpt-1 | 2023-05-10 14:54:42.701 | DEBUG | platforms.onebot_bot:_:178 - 丢弃群聊消息:真的难受啊(原因:不符合触发前缀)
chatgpt-qq-chatgpt-1 | 2023-05-10 14:54:43.198 | DEBUG | middlewares.timeout:handle_respond:46 - [Timeout] 取消计时……
chatgpt-qq-chatgpt-1 | 2023-05-10 14:54:43.198 | INFO | platforms.http_service:response:86 - Got response msg -> <class 'graia.ariadne.message.chain.MessageChain'> -> [图片]
chatgpt-qq-chatgpt-1 | 2023-05-10 14:54:43.204 | DEBUG | middlewares.timeout:create_timeout_task:55 - [Timeout] 开始计时……
chatgpt-qq-chatgpt-1 | 2023-05-10 14:54:43.205 | DEBUG | platforms.http_service:process_request:115 - Bot request 1683730479332 done.
chatgpt-qq-chatgpt-1 | 2023-05-10 14:54:43.647 | DEBUG | platforms.http_service:v2_chat_response:151 - Bot request 1683730479332 response ->
chatgpt-qq-chatgpt-1 | {"result": "DONE", "message": [], "voice": [], "image": ["data:image/png;base64,iVBORw0KGgoAAAANSUhE
chatgpt-qq-chatgpt-1 | INFO:quart.serving:ip:37800 GET /v2/chat/response 1.1 200 69887 2025
chatgpt-qq-chatgpt-1 | QStandardPaths: XDG_RUNTIME_DIR not set, defaulting to '/tmp/runtime-root'
chatgpt-qq-chatgpt-1 | Loading page (1/2)
Rendering (2/2) ] 0%
Done ] 0%
chatgpt-qq-chatgpt-1 | [2023-05-10 14:54:43,649] ip:37800 GET /v2/chat/response 1.1 200 69887 2025
chatgpt-qq-chatgpt-1 | [2023-05-10 14:54:43,649] ip:37800 GET /v2/chat/response 1.1 200 69887 2025
wechatbot端日志:
[5/10/2023, 2:54:39 PM] 🎯 ChatGPT triggered: /cchat 1
[5/10/2023, 2:54:39 PM] 🎯 Chatbot triggered: http://(ip):(port)/v2/chat
[5/10/2023, 2:54:39 PM] 🎯 Got request id: 1683730479332
[5/10/2023, 2:54:41 PM] 🎯 Wait response: http://(ip):(port)/v2/chat/response?request_id=1683730479332
[5/10/2023, 2:54:41 PM] 🎯 Got response data data length 55 -> {"result":"SUCCESS","message":[],"voice":[],"image":[]}
[5/10/2023, 2:54:43 PM] 🎯 Wait response: http://(ip):(port)/v2/chat/response?request_id=1683730479332
[5/10/2023, 2:54:44 PM] 🎯 Got response data data length 69880 -> {"result":"DONE","message":[],"voice":[],"image":["data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAABRQ
[5/10/2023, 2:54:44 PM] Reply image.png -> data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAABRQA
uncaughtException AssertionError [ERR_ASSERTION]: 1204 == 0
at Object.equal (/app/node_modules/wechat4u/src/util/global.js:53:14)
at /app/node_modules/wechat4u/src/core.js:694:16
at processTicksAndRejections (node:internal/process/task_queues:96:5)
at async PuppetWechat4u.messageSendFile (file:///app/node_modules/wechaty-puppet-wechat4u/src/puppet-wechat4u.ts:800:5)
at async file:///app/node_modules/wechaty/src/sayable/deliver-sayable.ts:41:13
at async WechatifiedUserClass.say (file:///app/node_modules/wechaty/src/user-modules/contact.ts:338:19)
at async ChatBot.replyImage (file:///app/src/chatbot.ts:241:7)
at async ChatBot.reply (file:///app/src/chatbot.ts:261:9)
at async file:///app/src/chatbot.ts:272:7 {
generatedMessage: true,
code: 'ERR_ASSERTION',
actual: 1204,
expected: 0,
operator: '==',
response: [Object],
tips: '发送图片失败'
}
其他内容
此处填写其他内容,没有可跳过
Status: Downloaded newer image for lcjqyml/wechatbot:latest
WARNING: IPv4 forwarding is disabled. Networking will not work.
[email protected] dev
nodemon --exec node --watch config.yaml --loader ts-node/esm src/main.ts
[nodemon] 2.0.22
[nodemon] to restart at any time, enter rs
[nodemon] watching path(s): config.yaml
[nodemon] watching extensions: ts
[nodemon] starting node --loader ts-node/esm src/main.ts
(node:32) ExperimentalWarning: Custom ESM Loaders is an experimental feature. This feature could change at any time
(Use node --trace-warnings ...
to show where the warning was created)
[5/10/2023, 5:26:26 AM] Config ->
[5/10/2023, 5:26:26 AM] chatbotProxy: http://127.0.0.1:8023
[5/10/2023, 5:26:26 AM] autoAcceptFriendShip: false
[5/10/2023, 5:26:26 AM] autoAcceptRoomInvite: false
[5/10/2023, 5:26:26 AM] chatbotTriggerKeyword:
[5/10/2023, 5:26:26 AM] responseQuote: false
uncaughtException GError: getaddrinfo EAI_AGAIN login.wx.qq.com
at Function.AxiosError.from (/app/node_modules/axios/lib/core/AxiosError.js:89:14)
at RedirectableRequest.handleRequestError (/app/node_modules/axios/lib/adapters/http.js:577:25)
at RedirectableRequest.emit (node:events:525:35)
at RedirectableRequest.emit (node:domain:489:12)
at ClientRequest.eventHandlers. (/app/node_modules/follow-redirects/index.js:14:24)
at ClientRequest.emit (node:events:513:28)
at ClientRequest.emit (node:domain:489:12)
at TLSSocket.socketErrorListener (node:_http_client:494:9)
at TLSSocket.emit (node:events:513:28)
at TLSSocket.emit (node:domain:489:12) {
code: 2,
details: 'Error: getaddrinfo EAI_AGAIN login.wx.qq.com\n' +
' at Function.AxiosError.from (/app/node_modules/axios/lib/core/AxiosError.js:89:14)\n' +
' at RedirectableRequest.handleRequestError (/app/node_modules/axios/lib/adapters/http.js:577:25)\n' +
' at RedirectableRequest.emit (node:events:525:35)\n' +
' at RedirectableRequest.emit (node:domain:489:12)\n' +
' at ClientRequest.eventHandlers. (/app/node_modules/follow-redirects/index.js:14:24)\n' +
' at ClientRequest.emit (node:events:513:28)\n' +
' at ClientRequest.emit (node:domain:489:12)\n' +
' at TLSSocket.socketErrorListener (node:_http_client:494:9)\n' +
' at TLSSocket.emit (node:events:513:28)\n' +
' at TLSSocket.emit (node:domain:489:12)'
}
提交 issue 前,请先确认:
表现
终端的二维码图片扫不出来,wechaty.js.org这个网址连接不上
运行环境:
复现步骤
描述你是如何触发这个 BUG 的
预期行为
浏览器打开扫码网址
截图
相关日志、聊天记录的截图,没有可跳过
其他内容
此处填写其他内容,没有可跳过
网页的微信太容易掉线,有什么办法解决吗
表现
偶尔有报错 Client network socket disconnected before secure TLS connection was established
得重启才能正常工作
运行环境:
复现步骤
偶现,频率有点高
预期行为
描述你认为正常情况下应该看见的情况
截图
web_1 | [5/25/2023, 8:26:05 AM] autoAcceptFriendShip: false
web_1 | [5/25/2023, 8:26:05 AM] autoAcceptRoomInvite: true
web_1 | [5/25/2023, 8:26:05 AM] privateChatTrigger:
web_1 | [5/25/2023, 8:26:05 AM] groupChatTrigger:
web_1 | [5/25/2023, 8:26:05 AM] responseQuote: true
web_1 | [5/25/2023, 8:26:05 AM] ✅ User Contact has logged in
web_1 | [5/25/2023, 8:26:07 AM] 📨 Skip message --> Message#Unknown[🗣Contact]
web_1 | uncaughtException GError: Client network socket disconnected before secure TLS connection was established
web_1 | at Function.AxiosError.from (/app/node_modules/axios/lib/core/AxiosError.js:89:14)
web_1 | at RedirectableRequest.handleRequestError (/app/node_modules/axios/lib/adapters/http.js:577:25)
web_1 | at RedirectableRequest.emit (node:events:525:35)
web_1 | at RedirectableRequest.emit (node:domain:489:12)
web_1 | at ClientRequest.eventHandlers. (/app/node_modules/follow-redirects/index.js:14:24)
web_1 | at ClientRequest.emit (node:events:513:28)
web_1 | at ClientRequest.emit (node:domain:489:12)
web_1 | at TLSSocket.socketErrorListener (node:_http_client:494:9)
web_1 | at TLSSocket.emit (node:events:513:28)
web_1 | at TLSSocket.emit (node:domain:489:12) {
web_1 | code: 2,
web_1 | details: 'Error: Client network socket disconnected before secure TLS connection was established\n' +
web_1 | ' at Function.AxiosError.from (/app/node_modules/axios/lib/core/AxiosError.js:89:14)\n' +
web_1 | ' at RedirectableRequest.handleRequestError (/app/node_modules/axios/lib/adapters/http.js:577:25)\n' +
web_1 | ' at RedirectableRequest.emit (node:events:525:35)\n' +
web_1 | ' at RedirectableRequest.emit (node:domain:489:12)\n' +
web_1 | ' at ClientRequest.eventHandlers. (/app/node_modules/follow-redirects/index.js:14:24)\n' +
web_1 | ' at ClientRequest.emit (node:events:513:28)\n' +
web_1 | ' at ClientRequest.emit (node:domain:489:12)\n' +
web_1 | ' at TLSSocket.socketErrorListener (node:_http_client:494:9)\n' +
web_1 | ' at TLSSocket.emit (node:events:513:28)\n' +
web_1 | ' at TLSSocket.emit (node:domain:489:12)'
其他内容
此处填写其他内容,没有可跳过
默认情况下在群组里会引用问题
不希望它引用
因此尝试在[response]段中设置quote:
[response]
quote = false
但这个设置无效,在群组里,仍然会引用,重置会话依然如此。
已经核查有且只有一个[response],格式与拼写都没问题。
按照教程一步步操作,扫码登录后,不管发送什么消息
回复都是:机器人异常,请稍候再试
我是跟chatgpt-qq项目放在同一个服务器,腾讯云的轻量服务器
麻烦指点一下,是哪里搞错了
这一步都是成功的:... Running on http://0.0.0.0:8080 (CTRL + C to quit)
就是最后一步:
docker run -e CHATBOT_PROXY="http://chatgpt-qq-chatgpt-1:8080" --network chatgpt-qq_default lcjqyml/wechatbot:latest
http://chatgpt-qq-chatgpt-1:8080" --network chatgpt-qq_default 这两个是在哪里看的?是否需要修改?
我看运行的名字是这三个呀
chatgpt-qq_gocqhttp_1 ... done
chatgpt-qq_chatgpt_1 ... done
chatgpt-qq_watchtower_1 ... done
运行环境:
[7/26/2023, 3:41:57 PM] 🎯 ChatGPT triggered: 你是谁
[7/26/2023, 3:41:57 PM] 🎯 Chatbot triggered: http://chatgpt-qq-chatgpt-1:8080/v2/chat
[7/26/2023, 3:41:57 PM] Reply text -> 机器人异常,请稍后再试或联系管理员!
[7/26/2023, 3:41:57 PM] AxiosError: getaddrinfo ENOTFOUND chatgpt-qq-chatgpt-1
at Function.AxiosError.from (file:///app/node_modules/axios/lib/core/AxiosError.js:89:14)
at RedirectableRequest.handleRequestError (file:///app/node_modules/axios/lib/adapters/http.js:577:25)
at RedirectableRequest.emit (node:events:513:28)
at RedirectableRequest.emit (node:domain:489:12)
at ClientRequest.eventHandlers.<computed> (/app/node_modules/follow-redirects/index.js:14:24)
at ClientRequest.emit (node:events:513:28)
at ClientRequest.emit (node:domain:489:12)
at Socket.socketErrorListener (node:_http_client:494:9)
at Socket.emit (node:events:513:28)
at Socket.emit (node:domain:489:12) {
hostname: 'chatgpt-qq-chatgpt-1',
syscall: 'getaddrinfo',
code: 'ENOTFOUND',
errno: -3008,
config: {
transitional: {
silentJSONParsing: true,
forcedJSONParsing: true,
clarifyTimeoutError: false
},
adapter: [ 'xhr', 'http' ],
transformRequest: [ [Function: transformRequest] ],
transformResponse: [ [Function: transformResponse] ],
timeout: 0,
xsrfCookieName: 'XSRF-TOKEN',
xsrfHeaderName: 'X-XSRF-TOKEN',
maxContentLength: -1,
maxBodyLength: -1,
env: { FormData: [Function], Blob: null },
validateStatus: [Function: validateStatus],
headers: AxiosHeaders {
Accept: 'application/json, text/plain, */*',
'Content-Type': 'application/json',
'User-Agent': 'axios/1.3.6',
'Content-Length': '110',
'Accept-Encoding': 'gzip, compress, deflate, br'
},
method: 'post',
url: 'http://chatgpt-qq-chatgpt-1:8080/v2/chat',
data: '{"message":"你是谁","session_id":"friend-tang2song4yuan2ming2qing1","username":"tang2song4yuan2ming2qing1"}'
},
request: <ref *1> Writable {
_writableState: WritableState {
objectMode: false,
highWaterMark: 16384,
finalCalled: false,
needDrain: false,
ending: false,
ended: false,
finished: false,
destroyed: false,
decodeStrings: true,
defaultEncoding: 'utf8',
length: 0,
writing: false,
corked: 0,
sync: true,
bufferProcessing: false,
onwrite: [Function: bound onwrite],
writecb: null,
writelen: 0,
afterWriteTickInfo: null,
buffered: [],
bufferedIndex: 0,
allBuffers: true,
allNoop: true,
pendingcb: 0,
constructed: true,
prefinished: false,
errorEmitted: false,
emitClose: true,
autoDestroy: true,
errored: null,
closed: false,
closeEmitted: false,
[Symbol(kOnFinished)]: []
},
_events: [Object: null prototype] {
response: [Function: handleResponse],
error: [Function: handleRequestError],
socket: [Function: handleRequestSocket]
},
_eventsCount: 3,
_maxListeners: undefined,
_options: {
maxRedirects: 21,
maxBodyLength: Infinity,
protocol: 'http:',
path: '/v2/chat',
method: 'POST',
headers: [Object: null prototype],
agents: [Object],
auth: undefined,
beforeRedirect: [Function: dispatchBeforeRedirect],
beforeRedirects: [Object],
hostname: 'chatgpt-qq-chatgpt-1',
port: '8080',
agent: undefined,
nativeProtocols: [Object],
pathname: '/v2/chat'
},
_ended: false,
_ending: true,
_redirectCount: 0,
_redirects: [],
_requestBodyLength: 110,
_requestBodyBuffers: [ [Object] ],
_onNativeResponse: [Function (anonymous)],
_currentRequest: ClientRequest {
_events: [Object: null prototype],
_eventsCount: 7,
_maxListeners: undefined,
outputData: [],
outputSize: 0,
writable: true,
destroyed: false,
_last: true,
chunkedEncoding: false,
shouldKeepAlive: false,
maxRequestsOnConnectionReached: false,
_defaultKeepAlive: true,
useChunkedEncodingByDefault: true,
sendDate: false,
_removedConnection: false,
_removedContLen: false,
_removedTE: false,
strictContentLength: false,
_contentLength: '110',
_hasBody: true,
_trailer: '',
finished: false,
_headerSent: true,
_closed: false,
socket: [Socket],
_header: 'POST /v2/chat HTTP/1.1\r\n' +
'Accept: application/json, text/plain, */*\r\n' +
'Content-Type: application/json\r\n' +
'User-Agent: axios/1.3.6\r\n' +
'Content-Length: 110\r\n' +
'Accept-Encoding: gzip, compress, deflate, br\r\n' +
'Host: chatgpt-qq-chatgpt-1:8080\r\n' +
'Connection: close\r\n' +
'\r\n',
_keepAliveTimeout: 0,
_onPendingData: [Function: nop],
agent: [Agent],
socketPath: undefined,
method: 'POST',
maxHeaderSize: undefined,
insecureHTTPParser: undefined,
path: '/v2/chat',
_ended: false,
res: null,
aborted: false,
timeoutCb: null,
upgradeOrConnect: false,
parser: null,
maxHeadersCount: null,
reusedSocket: false,
host: 'chatgpt-qq-chatgpt-1',
protocol: 'http:',
_redirectable: [Circular *1],
[Symbol(kCapture)]: false,
[Symbol(kBytesWritten)]: 0,
[Symbol(kEndCalled)]: false,
[Symbol(kNeedDrain)]: false,
[Symbol(corked)]: 0,
[Symbol(kOutHeaders)]: [Object: null prototype],
[Symbol(kUniqueHeaders)]: null
},
_currentUrl: 'http://chatgpt-qq-chatgpt-1:8080/v2/chat',
[Symbol(kCapture)]: false
},
cause: Error: getaddrinfo ENOTFOUND chatgpt-qq-chatgpt-1
at GetAddrInfoReqWrap.onlookup [as oncomplete] (node:dns:109:26) {
errno: -3008,
code: 'ENOTFOUND',
syscall: 'getaddrinfo',
hostname: 'chatgpt-qq-chatgpt-1'
}
}
无法退出呀.
centos7 登录成功了, ctrl+c 无法结束. 要咋办?
微信可以引用对话来回复,Wechaty是不是没有引用回复和@功能,所以只能把问题复制一次?
提交 issue 前,请先确认:
表现
群聊@本群昵称无反应
运行环境:
复现步骤
描述你是如何触发这个 BUG 的
可以避免在私聊中只要对话便会触发GPT的情况发生。
目前如果设置了前缀,在群聊中不仅需要艾特,还需要添加前缀才能触发GPT。
谢谢大佬!
微信扫码登录时提示失败,换过账号同样提示
在微信里,拉别人进群是不需要别人同意
提交 issue 前,请先确认:
表现
wechatbot日志
2023-05-12T16:41:25.355355953Z [5/12/2023, 4:41:25 PM] 🎯 Got response data data length 667035 -> {"result":"DONE","message":[],"voice":[],"image":["data:image/png;base64,/9j/4AAQSkZJRgABAQEAYABgAAD
2023-05-12T16:41:25.355906116Z [5/12/2023, 4:41:25 PM] Reply image.png -> data:image/png;base64,/9j/4AAQSkZJRgABAQEAYABgAAD/
2023-05-12T16:41:26.489906395Z uncaughtException AssertionError [ERR_ASSERTION]: 1205 == 0
2023-05-12T16:41:26.489945756Z at Object.equal (/app/node_modules/wechat4u/src/util/global.js:53:14)
2023-05-12T16:41:26.489951156Z at /app/node_modules/wechat4u/src/core.js:694:16
2023-05-12T16:41:26.489954476Z at processTicksAndRejections (node:internal/process/task_queues:96:5)
2023-05-12T16:41:26.489957516Z at async PuppetWechat4u.messageSendFile (file:///app/node_modules/wechaty-puppet-wechat4u/src/puppet-wechat4u.ts:800:5)
2023-05-12T16:41:26.489960636Z at async file:///app/node_modules/wechaty/src/sayable/deliver-sayable.ts:41:13
2023-05-12T16:41:26.489963556Z at async WechatifiedUserClass.say (file:///app/node_modules/wechaty/src/user-modules/contact.ts:338:19)
2023-05-12T16:41:26.489966516Z at async ChatBot.replyImage (file:///app/src/chatbot.ts:241:7)
2023-05-12T16:41:26.489970596Z at async ChatBot.reply (file:///app/src/chatbot.ts:261:9)
2023-05-12T16:41:26.489973676Z at async file:///app/src/chatbot.ts:272:7 {
2023-05-12T16:41:26.489976956Z generatedMessage: true,
2023-05-12T16:41:26.489979596Z code: 'ERR_ASSERTION',
2023-05-12T16:41:26.489982876Z actual: 1205,
2023-05-12T16:41:26.489985876Z expected: 0,
2023-05-12T16:41:26.489988556Z operator: '==',
2023-05-12T16:41:26.489991156Z response: [Object],
2023-05-12T16:41:26.489993796Z tips: '发送图片失败'
2023-05-12T16:41:26.489996956Z }
chatgpt bot 日志
2023-05-12T16:34:48.575155864Z 2023-05-12 16:34:48.574 | DEBUG | adapter.ms.bing:text_to_img:137 - [Bing Image] Response: ['https://tse1.mm.bing.net/th/id/OIG.05bM24y0vaF5pg_WznrI', 'https://tse4.mm.bing.net/th/id/OIG.7qNkDVL.9.3WmqUyniBs', 'https://tse1.mm.bing.net/th/id/OIG.ghFSHkqGAWDUSdCUIOMi', 'https://tse3.mm.bing.net/th/id/OIG.9YQTMwFgRNp05.fb0tks']
2023-05-12T16:34:48.575190184Z 2023-05-12 16:34:48.575 | DEBUG | adapter.ms.bing:__download_image:150 - [Bing AI] 下载图片:https://tse1.mm.bing.net/th/id/OIG.05bM24y0vaF5pg_WznrI
2023-05-12T16:34:48.575658226Z 2023-05-12 16:34:48.575 | DEBUG | adapter.ms.bing:__download_image:150 - [Bing AI] 下载图片:https://tse4.mm.bing.net/th/id/OIG.7qNkDVL.9.3WmqUyniBs
2023-05-12T16:34:48.575984268Z 2023-05-12 16:34:48.575 | DEBUG | adapter.ms.bing:__download_image:150 - [Bing AI] 下载图片:https://tse1.mm.bing.net/th/id/OIG.ghFSHkqGAWDUSdCUIOMi
2023-05-12T16:34:48.576345870Z 2023-05-12 16:34:48.576 | DEBUG | adapter.ms.bing:__download_image:150 - [Bing AI] 下载图片:https://tse3.mm.bing.net/th/id/OIG.9YQTMwFgRNp05.fb0tks
2023-05-12T16:34:48.777111402Z 2023-05-12 16:34:48.776 | DEBUG | platforms.http_service:v2_chat_response:151 - Bot request 1683909270746 response ->
2023-05-12T16:34:48.777134442Z {"result": "SUCCESS", "message": [], "voice": [], "image": []}
2023-05-12T16:34:48.777818565Z INFO:quart.serving:130.162.139.153:38248 GET /v2/chat/response 1.1 200 62 1431
2023-05-12T16:34:48.778102047Z ..[2023-05-12 16:34:48,777] 130.162.139.153:38248 GET /v2/chat/response 1.1 200 62 1431
2023-05-12T16:34:48.851566428Z 2023-05-12 16:34:48.851 | DEBUG | adapter.ms.bing:__download_image:155 - [Bing AI] 下载完成:image/jpeg https://tse3.mm.bing.net/th/id/OIG.9YQTMwFgRNp05.fb0tks
2023-05-12T16:34:48.854779923Z 2023-05-12 16:34:48.854 | DEBUG | adapter.ms.bing:__download_image:155 - [Bing AI] 下载完成:image/jpeg https://tse4.mm.bing.net/th/id/OIG.7qNkDVL.9.3WmqUyniBs
2023-05-12T16:34:48.865177171Z 2023-05-12 16:34:48.864 | DEBUG | adapter.ms.bing:__download_image:155 - [Bing AI] 下载完成:image/jpeg https://tse1.mm.bing.net/th/id/OIG.05bM24y0vaF5pg_WznrI
2023-05-12T16:34:48.869561112Z 2023-05-12 16:34:48.869 | DEBUG | adapter.ms.bing:__download_image:155 - [Bing AI] 下载完成:image/jpeg https://tse1.mm.bing.net/th/id/OIG.ghFSHkqGAWDUSdCUIOMi
结果就是没反应
最终我重启容器没效果
于是我手机上点退出登录 然后再扫码登录又可以了
提交 issue 前,请先确认:
表现
十分钟后显示超时就掉线了。
运行环境:
复现步骤
描述你是如何触发这个 BUG 的
每次都是登录十分钟后就开始显示超时,然后就退出了。
本人不是职业编程工作者,仅能在windows或macos环境下部署lss233大大的chatgpt-mirai-qq-bot项目,为了挂个微信安装乌班图环境是办公机不能承受之重,目前wechatbot无法在常规的win环境下部署,困扰中
增加一个环境变量啥的 符合环境变量的才会触发回答 因为微信要手机保持登录才能挂着机器人,平常有人给发私聊就会触发,比较麻烦
老是新设备登录,微信账号容易出现风控,可否像正常的电脑微信一样,把登录记录保存下来。
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.