Chrononeko 项目追踪器
chrononeko / bugtracker Goto Github PK
View Code? Open in Web Editor NEWChrononeko Bugtracker
Chrononeko Bugtracker
Chrononeko 项目追踪器
避免多开 QQNT 时导致的端口占用错误
目前来看,消息上报中并没有与身份相关的字段,无法判断发送者的身份
群组消息事件上报时roleType(发送者的身份)始终为null
使用miao-yunzai,通过ws-plugin接入
chronocat v0.0.52 docker版
miao-yunzai日志
10月 15 23:53:34 Bot node[18770]: [MiaoYz][23:53:34.368][ERRO] undefined
chronocat日志
[2023-10-15 15:54:54.912] [ERROR] [Main] undefined
(node:81) UnhandledPromiseRejectionWarning: undefined
(node:81) UnhandledPromiseRejectionWarning: Unhandled promise rejection. This error originated either by throwing inside of an async function without a catch block, or by rejecting a promise which was not handled with .catch(). To terminate the node process on unhandled promise rejection, use the CLI flag --unhandled-rejections=strict
(see https://nodejs.org/api/cli.html#cli_unhandled_rejections_mode). (rejection id: 54)
[2023-10-15 15:54:55.181] [ERROR] [Main] undefined
(node:81) UnhandledPromiseRejectionWarning: undefined
(node:81) UnhandledPromiseRejectionWarning: Unhandled promise rejection. This error originated either by throwing inside of an async function without a catch block, or by rejecting a promise which was not handled with .catch(). To terminate the node process on unhandled promise rejection, use the CLI flag --unhandled-rejections=strict
(see https://nodejs.org/api/cli.html#cli_unhandled_rejections_mode). (rejection id: 55)
[2023-10-15 15:56:06.666] [ERROR] [Main] undefined
(node:81) UnhandledPromiseRejectionWarning: undefined
(node:81) UnhandledPromiseRejectionWarning: Unhandled promise rejection. This error originated either by throwing inside of an async function without a catch block, or by rejecting a promise which was not handled with .catch(). To terminate the node process on unhandled promise rejection, use the CLI flag --unhandled-rejections=strict
(see https://nodejs.org/api/cli.html#cli_unhandled_rejections_mode). (rejection id: 56)
[2023-10-15 15:56:29.989] [ERROR] [Main] undefined
(node:81) UnhandledPromiseRejectionWarning: undefined
(node:81) UnhandledPromiseRejectionWarning: Unhandled promise rejection. This error originated either by throwing inside of an async function without a catch block, or by rejecting a promise which was not handled with .catch(). To terminate the node process on unhandled promise rejection, use the CLI flag --unhandled-rejections=strict
(see https://nodejs.org/api/cli.html#cli_unhandled_rejections_mode). (rejection id: 57)
在Chronocat 0.0.42 的版本更新中收到的消息事件里 senderUid 的字段已经丢弃了
但是在发送消息后返回值里,senderUid字段仍然存在,并且缺失 senderUin 与 peerUin 字段
另外,发送合并转发消息后的返回值现在仍然是 {"result": ""} 的形式
建议美少女加入功能 允许将新加群申请提醒作为ws包回传,或者直接提供接口获取当前所有待审核的加群申请
ubuntu 22.04 linuxqq_3.1.2-13107_amd64.deb LiteLoader 0.5.3 chronocat 0.0.45
有其他群友提醒我这是32为qq造成的bug,但linux的包似乎就只有64的。
使用的是 liteloader的 chronocat插件
版本 0.0.40
red协议收到的包中无roleType字段(半个月前曾经是有的,现在没有了),无法获取发送者的身份
启动错误日志如下:
Failed to inject hooks Error: Failed to load cmnative-linux-arm64.node
at /llqqnt/plugins/LiteLoaderQQNT-Plugin-Chronocat/src/main.js:1:130286
at Object.readFileAsync (/llqqnt/plugins/LiteLoaderQQNT-Plugin-Chronocat/src/main.js:1:35488)
at V (/llqqnt/plugins/LiteLoaderQQNT-Plugin-Chronocat/src/main.js:1:130256)
at new Promise (<anonymous>)
at xe (/llqqnt/plugins/LiteLoaderQQNT-Plugin-Chronocat/src/main.js:1:130142)
at dl (/llqqnt/plugins/LiteLoaderQQNT-Plugin-Chronocat/src/main.js:255:1468)
at K0 (/llqqnt/plugins/LiteLoaderQQNT-Plugin-Chronocat/src/main.js:255:20898)
at $0 (/llqqnt/plugins/LiteLoaderQQNT-Plugin-Chronocat/src/main.js:255:21188)
at Object.<anonymous> (/llqqnt/plugins/LiteLoaderQQNT-Plugin-Chronocat/src/main.js:255:23130)
at Module._compile (node:internal/modules/cjs/loader:1120:14)
另外想问一下目前此项目支援 linux-arm64 吗
QQNT版本: 9.9.2-16183 (x64)
LiteLoaderQQNT版本: 0.5.3
chronocat版本: 0.0.39
LiteLoaderQQNT日志
[Launcher] 开始启动QQ...
[app]module file name: D:\Programs\Tencent\QQNT\QQ.exe
50d3e6a32e99ec96b270574e70caf7ed0b4476eafe62daec9274876496fe87ed
c48457ac24c9ad33bd2e0250f734116535df7e8caeb043a6d3164fd6ea65046c
643a4a860c15c91827bf0f2a77510172a980fc5d3a18ef73ffec757ec3086463
05aa17dcc96655b9cd8184cc9c47cfeac4473e4c938d0417796d3f98dabb9982
[LiteLoader] Initializing...
[LiteLoader] Found QQNT installation at D:\Programs\Tencent\QQNT.
[LiteLoader] Start loading plugins.
[LiteLoader] Found plugin: LiteLoader 配置界面
[LiteLoader] Found plugin: LiteLoader 样式框架
[LiteLoader] Found plugin: LiteLoader 插件市场
[LiteLoader] Found plugin: 防撤回
[LiteLoader] Found plugin: Chronocat
[LiteLoader] Found plugin: LLAPI
[LiteLoader] Found plugin: QQ增强
[LiteLoader] Done! 7 plugins loaded!
[LiteLoader] Preprocessing plugins' preloads...
[LiteLoader] Preprocessing plugins' preloads done!
[LiteLoader] Starting QQNT...
[2023/9/10 15:33:14][INFO] D:\Programs\Tencent\QQNT\resources\app\versions\config.json 存在
[2023/9/10 15:33:14][INFO] D:\Programs\Tencent\QQNT\resources\app\versions\9.9.2-16183.zip 不存在,无法执行解压操作
[2023/9/10 15:33:14][INFO] 从版本目录加载主进程代码: D:\Programs\Tencent\QQNT\resources\app\versions\9.9.2-16183\application\background.js, {
"curVersion": "9.9.2-16183",
"mainProcessFileName": "application\\background.js"
}
[2023/9/10 15:33:14][INFO]
---------- 华丽的分割线 ----------
输出日志之后程序异常退出
经测试0.0.38版本没有以上问题
root@hcss-ecs-ccfa:~/chronocat# docker run -it --name chronocat -p 16530:16530 -p 5500:5500 -p 16340:16340 -v ./config:/chrono/.chronocat/config -v ./qq:/chrono/.config/QQ chronoc/at
*** Running /etc/my_init.d/00_regen_ssh_host_keys.sh...
*** Running /etc/my_init.d/10_syslog-ng.init...
Oct 11 15:42:08 0d52b845b75b syslog-ng[14]: syslog-ng starting up; version='3.35.1'
*** Running /etc/my_init.d/20_setuser...
设置用户 chronocat 为 911:1000
usermod: no changes
设置 UMASK 为 002
设置用户文件夹所有者
设置用户文件夹权限
*** Booting runit daemon...
*** Runit started as PID 40
_XSERVTransmkdir: ERROR: euid != 0,directory /tmp/.X11-unix will not be created.
Oct 11 15:42:09 0d52b845b75b cron[47]: (CRON) INFO (pidfile fd = 3)
Oct 11 15:42:09 0d52b845b75b cron[47]: (CRON) INFO (Running @reboot jobs)
Openbox-Message: Unable to find a valid menu file "/var/lib/openbox/debian-menu.xml"
Failed to launch bus: Failed to connect to session bus[LiteLoader] Initializing...
[LiteLoader] Found QQNT installation at /opt/QQ.
[LiteLoader] Start loading plugins.
[LiteLoader] Found plugin: LiteLoader 配置界面
[LiteLoader] Found plugin: LiteLoader 样式框架
[LiteLoader] Found plugin: LiteLoader 插件市场
访问此链接以登录:
http://127.0.0.1:16340/login#127.0.0.1:16340@c6c76ad96b22934ed498ce40399ece3152442f792a8a107cee3bfaf532cc3568
[LiteLoader] Found plugin: Chronocat
[LiteLoader] Done! 4 plugins loaded!
[LiteLoader] Preprocessing plugins' preloads...
[LiteLoader] Preprocessing plugins' preloads done!
[LiteLoader] Starting QQNT...
Failed to inject hooks Error: Failed to load cmnative-linux-x64.node
at /llqqnt/plugins/LiteLoaderQQNT-Plugin-Chronocat/src/main.js:1:130286
at Object.readFileAsync (/llqqnt/plugins/LiteLoaderQQNT-Plugin-Chronocat/src/main.js:1:35488)
at V (/llqqnt/plugins/LiteLoaderQQNT-Plugin-Chronocat/src/main.js:1:130256)
at new Promise (<anonymous>)
at xe (/llqqnt/plugins/LiteLoaderQQNT-Plugin-Chronocat/src/main.js:1:130142)
at dl (/llqqnt/plugins/LiteLoaderQQNT-Plugin-Chronocat/src/main.js:255:1468)
at K0 (/llqqnt/plugins/LiteLoaderQQNT-Plugin-Chronocat/src/main.js:255:20898)
at $0 (/llqqnt/plugins/LiteLoaderQQNT-Plugin-Chronocat/src/main.js:255:21188)
at Object.<anonymous> (/llqqnt/plugins/LiteLoaderQQNT-Plugin-Chronocat/src/main.js:255:23130)
at Module._compile (node:internal/modules/cjs/loader:1120:14)
[86:1011/154211.787089:ERROR:bus.cc(398)] Failed to connect to the bus: Failed to connect to socket /run/dbus/system_bus_socket: No such file or directory
[86:1011/154211.806628:ERROR:bus.cc(398)] Failed to connect to the bus: Failed to connect to socket /run/dbus/system_bus_socket: No such file or directory
[86:1011/154211.808714:ERROR:bus.cc(398)] Failed to connect to the bus: Could not parse server address: Unknown address type (examples of valid types are "tcp" and on UNIX "unix")
[86:1011/154211.809326:ERROR:bus.cc(398)] Failed to connect to the bus: Could not parse server address: Unknown address type (examples of valid types are "tcp" and on UNIX "unix")
[134:1011/154211.821397:ERROR:gpu_init.cc(486)] Passthrough is not supported, GL is disabled, ANGLE is
[86:1011/154211.838487:ERROR:bus.cc(398)] Failed to connect to the bus: Could not parse server address: Unknown address type (examples of valid types are "tcp" and on UNIX "unix")
[86:1011/154211.857561:ERROR:bus.cc(398)] Failed to connect to the bus: Could not parse server address: Unknown address type (examples of valid types are "tcp" and on UNIX "unix")
[86:1011/154211.862515:ERROR:bus.cc(398)] Failed to connect to the bus: Failed to connect to socket /run/dbus/system_bus_socket: No such file or directory
[86:1011/154211.862699:ERROR:bus.cc(398)] Failed to connect to the bus: Failed to connect to socket /run/dbus/system_bus_socket: No such file or directory
[86:1011/154211.862867:ERROR:bus.cc(398)] Failed to connect to the bus: Failed to connect to socket /run/dbus/system_bus_socket: No such file or directory
[86:1011/154211.863104:ERROR:bus.cc(398)] Failed to connect to the bus: Failed to connect to socket /run/dbus/system_bus_socket: No such file or directory
[86:1011/154211.880468:ERROR:object_proxy.cc(623)] Failed to call method: org.freedesktop.login1.Manager.Inhibit: object_path= /org/freedesktop/login1: unknown error type:
(qq:86): libappindicator-WARNING **: 15:42:11.882: Unable to get the session bus: Unknown or unsupported transport “disabled” for address “disabled:”
(qq:86): LIBDBUSMENU-GLIB-WARNING **: 15:42:11.883: Unable to get session bus: Unknown or unsupported transport “disabled” for address “disabled:”
日志如下
’’’
[LiteLoader] Found plugin: LiteLoader 插件市场
访问此链接以登录:
http://127.0.0.1:16340/login#127.0.0.1:16340@4c800319bdb1eb00b9b787a5efd9a3c6a990c8d981a62a23fd0b78cad4d69591
[LiteLoader] Found plugin: Chronocat
[LiteLoader] Done! 4 plugins loaded!
[LiteLoader] Preprocessing plugins' preloads...
[LiteLoader] Preprocessing plugins' preloads done!
[LiteLoader] Starting QQNT...
Failed to inject hooks Error: Failed to load cmnative-linux-x64.node
at /llqqnt/plugins/LiteLoaderQQNT-Plugin-Chronocat/src/main.js:1:130286
at Object.readFileAsync (/llqqnt/plugins/LiteLoaderQQNT-Plugin-Chronocat/src/main.js:1:35488)
at V (/llqqnt/plugins/LiteLoaderQQNT-Plugin-Chronocat/src/main.js:1:130256)
at new Promise ()
at xe (/llqqnt/plugins/LiteLoaderQQNT-Plugin-Chronocat/src/main.js:1:130142)
at dl (/llqqnt/plugins/LiteLoaderQQNT-Plugin-Chronocat/src/main.js:255:1468)
at K0 (/llqqnt/plugins/LiteLoaderQQNT-Plugin-Chronocat/src/main.js:255:20789)
at $0 (/llqqnt/plugins/LiteLoaderQQNT-Plugin-Chronocat/src/main.js:255:21079)
at Object. (/llqqnt/plugins/LiteLoaderQQNT-Plugin-Chronocat/src/main.js:255:22990)
at Module._compile (node:internal/modules/cjs/loader:1120:14)
[80:1011/145111.012414:ERROR:bus.cc(398)] Failed to connect to the bus: Failed to connect to socket /run/dbus/system_bus_socket: No such file or directory
[80:1011/145111.012513:ERROR:bus.cc(398)] Failed to connect to the bus: Failed to connect to socket /run/dbus/system_bus_socket: No such file or directory
[80:1011/145111.034371:ERROR:bus.cc(398)] Failed to connect to the bus: Could not parse server address: Unknown address type (examples of valid types are "tcp" and on UNIX "unix")
[80:1011/145111.034423:ERROR:bus.cc(398)] Failed to connect to the bus: Could not parse server address: Unknown address type (examples of valid types are "tcp" and on UNIX "unix")
[128:1011/145111.053720:ERROR:gpu_init.cc(486)] Passthrough is not supported, GL is disabled, ANGLE is
[80:1011/145111.084891:ERROR:bus.cc(398)] Failed to connect to the bus: Could not parse server address: Unknown address type (examples of valid types are "tcp" and on UNIX "unix")
[80:1011/145111.105421:ERROR:bus.cc(398)] Failed to connect to the bus: Could not parse server address: Unknown address type (examples of valid types are "tcp" and on UNIX "unix")
[80:1011/145111.110596:ERROR:bus.cc(398)] Failed to connect to the bus: Failed to connect to socket /run/dbus/system_bus_socket: No such file or directory
[80:1011/145111.115028:ERROR:bus.cc(398)] Failed to connect to the bus: Failed to connect to socket /run/dbus/system_bus_socket: No such file or directory
[80:1011/145111.115260:ERROR:bus.cc(398)] Failed to connect to the bus: Failed to connect to socket /run/dbus/system_bus_socket: No such file or directory
[80:1011/145111.115793:ERROR:bus.cc(398)] Failed to connect to the bus: Failed to connect to socket /run/dbus/system_bus_socket: No such file or directory
(qq:80): libappindicator-WARNING **: 14:51:11.126: Unable to get the session bus: Unknown or unsupported transport “disabled” for address “disabled:”
(qq:80): LIBDBUSMENU-GLIB-WARNING **: 14:51:11.126: Unable to get session bus: Unknown or unsupported transport “disabled” for address “disabled:”
[80:1011/145111.127066:ERROR:object_proxy.cc(623)] Failed to call method: org.freedesktop.login1.Manager.Inhibit: object_path= /org/freedesktop/login1: unknown error type:
quickLogin error: cannot find single quick login btn
linux-bugly: init bugly ...
[BuglyManager.cpp][InitBuglyManager][198]InitBuglyManager path: /chrono/.config/QQ/crash_files/
[BuglyService.cpp][registBugly][589]set signal stack
[BuglyService.cpp][registSignalHandler][520]regist native handler
[BuglyService.cpp][setParam][618]setParam, key:appVersion, value:3.1.2-13107..
signal success
linux-bugly: init bugly done.
Chronocat login service stopped due to authorization
[130:1011/145218.477552:ERROR:broker_posix.cc(46)] Received unexpected number of handles
[130:1011/145218.482091:ERROR:broker_posix.cc(46)] Received unexpected number of handles
[130:1011/145218.486166:ERROR:broker_posix.cc(46)] Received unexpected number of handles
14:52:21.737 › [HotUpdater][clearOldVersions] start clear old version files
[80:1011/145221.995052:ERROR:bus.cc(398)] Failed to connect to the bus: Could not parse server address: Unknown address type (examples of valid types are "tcp" and on UNIX "unix")
[80:1011/145221.995162:ERROR:bus.cc(398)] Failed to connect to the bus: Could not parse server address: Unknown address type (examples of valid types are "tcp" and on UNIX "unix")
[BuglyManager.cpp][UploadBugly][107]!!!in UploadBugly.
[NativeCrashHandler.cpp][getCrashDetailBeanFromRecord][52]!!!! in NativeCrashHandler getCrashDetailBeanFromRecord, open file error!!!,dumpFilePath:/chrono/.config/QQ/crash_files/rqd_record.eup.
[NativeCrashHandler.cpp][uploadCrashEvent][331]get null crashDetailBean, return!
’’’
启动服务(docker)时候给出如下输出,把登录链接中的127.0.0.1更换成域名(公网ip也尝试了),成功加载扫码登录,且扫码成功。随后浏览器中显示server disconnect,
刷新无法打开登录前页面(加载不出且无日志输出)
重启docker后再试,出现了快捷登录对应账号的按钮,但是点击后同样给出如上报错且手机浏览器表现一致(无法加载出页面)
1.版本:
QQNT: 9.9.0.14619(64 位)windows
LiteLoaderQQNT: 0.5.3
框架: nonebot
协议适配器: adapter-red
2.问题:
使用bot.send_group_message(group_id, MessageSegment.file(Path(file_path)))向qq群发送文件会直接导致QQNT本体崩溃
QQ 版本:9.9.3-17260
猫猫版本:0.0.49
文档上写的是在用户目录下,但没有
❤️建议美少女加入指定群号,Uin修改自身or他人群名片功能❤️
版本: 0.0.38
QQ 版本:9.9.3-17260
猫猫版本:0.0.49
getMemberList在get的时候 如果不在ui中选中目标群 就会返回空集合,其次 如果没有手动滑动群列表 加载完所有群员 就只会返回一部分信息(30个) Version:0.0.45
当前 Chronocat 不支持发送合并转发消息,希望支持此功能。
当前实现会吞掉消息中所有的换行和空格, 实现 换行<br>
后至少可以使消息换行.
如果实现 段落<p>
则可以保留段落中的空格
使用 message::send 发送消息后,better-qqnt 就会崩溃,可能是发送的 json 字段有错误?但是没有崩溃日志,无从下手
nonebot/adapter-red#21
这是adapter-red的issue
使用的是wav格式的音频,测试过使用pydub+pilk转换为silk格式后问题仍然存在,只不过在电脑NTQQ上有一小部分可以正常播放而已
发送语音至群聊内时:
NTQQ侧的表现为:
语音显示正常,但点击提示:"InitFromFile Fail"
普通PC侧QQ的表现为:
呈现一个图片的造型_(:з」∠)_也点不开
安卓QQ的表现为:
语音显示正常,播放正常
发送语音至好友内,NTQQ侧的表现为:
语音显示正常,但点击提示:"InitFromFile Fail"
普通PC侧QQ的表现为:
语音显示正常,但点击后无任何反应,也没有声音
安卓QQ的表现为:
语音显示正常,播放正常
silk格式的语音也一样会有显示上和播放上的问题,安卓手机上都是正常可播放的
可能的实现方法:
有时候需要判断输入请求命令发送者是否有足够权限执行命令(
现在获取合并转发只能得到xml格式的消息且只显示前几条纯文本信息,希望能加入获取合并转发消息全部内容的功能
似乎cbronocat并没有这个功能(只有上传功能),如果需要对图片进行操作的话需要自己另写功能
刚接触这个,想着先实现个复读机,使用http发然后报错。
发的内容:
2.指定container(容器)名称为mysql,并以3306端口访问,映射本机3306端口,可以根据自己的实际情况修改。并配置目录挂载。设置mysql密码为123456(可以根据自己的情况修改)。并且设置了重启策略。
2.1.此时,你的docker部署mysql已经完成了。下面进行开启远程访问权限。否则没法远程用数据库软件如Navicat进行远程连接。
docker exec -it mysql /bin/bash
3.进入mysql的container容器中。
mysql -uroot -p123456
4.使用步骤2设置的密码“123456”登录mysql。
ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY '123456';
使用docker运行LiteLoaderQQNT时使用此插件无法从外部连接。
前提:语音是标准的tencent要求的silk语音类型,语音头已经正确转换为:"\x02#!SILK_V3"的格式
使用gocqhttp直接将silk以"cq=record"的形式发送至群组时是正常可以读取并播放的(电脑和安卓手机均可以正常发送并播放)
使用chrononeko发送时至群组时,电脑端显示为一张图片但无法点开,手机端正常显示为语音且可以正常播放
看起来是这一块的报错:
有一说一没看明白这是怎么报错的,顺便问一下开发环境怎么整呢?
Unable to send the rendered images when using the element (supported by puppeteer service), and there no error messages in the console.
System:
OS: Linux 6.2 Ubuntu 22.04.2 LTS 22.04.2 LTS (Jammy Jellyfish)
CPU: (64) x64 Genuine Intel(R) CPU
Binaries:
Node: 19.8.1
Yarn: 1.22.19
Koishi:
Core: 4.14.6
Console: 5.14.4
*Chroncat running in windows server 2021
https://github.com/chrononeko/chronocat/blob/master/packages/core/src/routes/group/getMemberList.ts
按照源码来看,最终返回的值应该包含用户的uid,index和detail,但我不管通过POST还是WebSocket都只能获取到index的值,甚至响应中不存在uid和detail这两个键
环境:
LiteLoaderQQNT: 0.5.3
Chronocat: 0.0.41
系统:Ubuntu 22.04
QQ: 3.1.2-13107
可作为 ws 包传输
使用/api/group/getMemberList
获取成员列表,在QQNT窗口中打开需要获取的群时可以正常返回,若未打开需要获取的群,会返回空数组。
QQ版本:QQ9.9.2.16183_x64
机器人身份:群管
群的特殊设置:加群方式为“不允许任何人加入”
协议:satori协议
群主邀请成员入群后,ws无法接收到进群事件
改为“需要验证消息”后,可以正常获得进群消息
(这个BUG并不严重,比它严重的多的是:satori协议的/guild.member.list无法使用,希望实现这个接口,如果有这个接口,用户实际上可以通过定期刷新群成员列表来判断进群退群,远比QQ自带的事件稳定的多)
建议将 @chronocat/core
发布到 npm,方便使用其他注入器注入
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.