docs: add chinese docs
@ -0,0 +1,14 @@
|
||||
{
|
||||
"title": {
|
||||
"message": "Blog",
|
||||
"description": "The title for the blog used in SEO"
|
||||
},
|
||||
"description": {
|
||||
"message": "Blog",
|
||||
"description": "The description for the blog used in SEO"
|
||||
},
|
||||
"sidebar.title": {
|
||||
"message": "Recent posts",
|
||||
"description": "The label for the left sidebar"
|
||||
}
|
||||
}
|
@ -0,0 +1,46 @@
|
||||
{
|
||||
"version.label": {
|
||||
"message": "Next",
|
||||
"description": "The label for version current"
|
||||
},
|
||||
"sidebar.tutorialSidebar.category.应用部署": {
|
||||
"message": "应用部署",
|
||||
"description": "The label for category 应用部署 in sidebar tutorialSidebar"
|
||||
},
|
||||
"sidebar.tutorialSidebar.category.运维操作": {
|
||||
"message": "运维操作",
|
||||
"description": "The label for category 运维操作 in sidebar tutorialSidebar"
|
||||
},
|
||||
"sidebar.tutorialSidebar.category.插件列表": {
|
||||
"message": "插件列表",
|
||||
"description": "The label for category 插件列表 in sidebar tutorialSidebar"
|
||||
},
|
||||
"sidebar.tutorialSidebar.category.进阶使用": {
|
||||
"message": "进阶使用",
|
||||
"description": "The label for category 进阶使用 in sidebar tutorialSidebar"
|
||||
},
|
||||
"sidebar.tutorialSidebar.category.命令行终端": {
|
||||
"message": "命令行终端",
|
||||
"description": "The label for category 命令行终端 in sidebar tutorialSidebar"
|
||||
},
|
||||
"sidebar.tutorialSidebar.category.视频会议": {
|
||||
"message": "视频会议",
|
||||
"description": "The label for category 视频会议 in sidebar tutorialSidebar"
|
||||
},
|
||||
"sidebar.tutorialSidebar.category.开发插件": {
|
||||
"message": "开发插件",
|
||||
"description": "The label for category 开发插件 in sidebar tutorialSidebar"
|
||||
},
|
||||
"sidebar.tutorialSidebar.category.API 接口": {
|
||||
"message": "API 接口",
|
||||
"description": "The label for category API 接口 in sidebar tutorialSidebar"
|
||||
},
|
||||
"sidebar.tutorialSidebar.category.项目贡献": {
|
||||
"message": "项目贡献",
|
||||
"description": "The label for category 项目贡献 in sidebar tutorialSidebar"
|
||||
},
|
||||
"sidebar.tutorialSidebar.category.开发文档": {
|
||||
"message": "开发文档",
|
||||
"description": "The label for category 开发文档 in sidebar tutorialSidebar"
|
||||
}
|
||||
}
|
@ -0,0 +1,4 @@
|
||||
{
|
||||
"label": "进阶使用",
|
||||
"position": 30
|
||||
}
|
After Width: | Height: | Size: 83 KiB |
After Width: | Height: | Size: 116 KiB |
@ -0,0 +1,52 @@
|
||||
---
|
||||
sidebar_position: 2
|
||||
title: Github 集成
|
||||
---
|
||||
|
||||

|
||||
|
||||
## 普通用户使用
|
||||
|
||||
### 在项目安装应用
|
||||
|
||||
地址: https://github.com/apps/tailchat
|
||||
|
||||
安装到项目仓库中。
|
||||
|
||||
### 在项目中进行配置
|
||||
|
||||
在根目录创建`.tailchat/topic.json` 文件:
|
||||
```json
|
||||
{
|
||||
"groupId": "<your-notify-group-id>",
|
||||
"panelId": "<your-topic-panel-id>"
|
||||
}
|
||||
```
|
||||
|
||||
## 自部署配置
|
||||
|
||||
|
||||
应用启动前需要在github中注册一个应用:
|
||||
|
||||

|
||||
|
||||
部署时需要配置以下环境变量:
|
||||
- `APP_ID`: 来自github 应用设置
|
||||
- `WEBHOOK_SECRET`: 来自github 应用设置
|
||||
- `PRIVATE_KEY`: 来自github 应用设置
|
||||
- `TAILCHAT_APP_ID`: Tailchat 开放平台的id
|
||||
- `TAILCHAT_APP_SECRET`: Tailchat 开放平台的秘钥
|
||||
- `TAILCHAT_API_URL`: Tailchat 后台地址
|
||||
|
||||
为获取 `TAILCHAT_APP_ID` 与 `TAILCHAT_APP_SECRET` 需要在 Tailchat 开放平台中创建一个开放平台应用
|
||||
|
||||
同时开启机器人权限,并设置消息回调地址: `https://<your_app_url>/message/webhook`
|
||||
|
||||
### 部署开放平台应用
|
||||
|
||||
> 源码: [https://github.com/msgbyte/tailchat/tree/master/apps/github-app](https://github.com/msgbyte/tailchat/tree/master/apps/github-app)
|
||||
|
||||
拉取源码后部署到可供访问的线上,提供两种方式:
|
||||
|
||||
- 独立应用: `npm run build` 后执行 `node lib/index.js`运行应用
|
||||
- Vercel: 直接推送到Vercel即可
|
@ -0,0 +1,34 @@
|
||||
---
|
||||
sidebar_position: 1
|
||||
title: 富文本语法
|
||||
---
|
||||
|
||||
## 对于普通用户
|
||||
|
||||
Tailchat 内置了 `com.msgbyte.bbcode` 插件用于对富文本消息做支持(且是默认安装的)。
|
||||
|
||||
以下是目前 `bbcode` 插件支持的语法列表:
|
||||
|
||||
| 关键字 | 描述 | 用法示例 | 预览 |
|
||||
| ------ | ----- | ------ | ----- |
|
||||
| b | 文本加粗 | `[b]foo[/b]` | <b>foo</b> |
|
||||
| i | 文本倾斜 | `[i]foo[/i]` | <i>foo</i> |
|
||||
| u | 文本下划线 | `[u]foo[/u]` | <ins>foo</ins> |
|
||||
| s | 文本删除线 | `[s]foo[/s]` | <del>foo</del> |
|
||||
| url | 超链接 | <div style={{width: 400}}>`[url]https://tailchat.msgbyte.com[/url]` / `[url=https://tailchat.msgbyte.com]官网[/url]`</div> | <a>https://tailchat.msgbyte.com</a> / <a href="https://tailchat.msgbyte.com">官网</a> |
|
||||
| img | 图片 | `[img]https://tailchat.msgbyte.com/img/logo.svg[/img]` | <div style={{width: 60}}><img src="https://tailchat.msgbyte.com/img/logo.svg" /></div> |
|
||||
| at | 提及 | `[at=<hereisuserid>]moonrailgun[/at]` | - |
|
||||
| emoji | 表情 | `[emoji]smile[/emoji]` | - |
|
||||
| markdown / md | markdown语法支持 | `[markdown]## Heading[/markdown]` | - |
|
||||
|
||||
## 对于插件开发者
|
||||
|
||||
如果你的插件需要使用统一的富文本支持,请在你的渲染函数中这样实现:
|
||||
|
||||
```jsx
|
||||
import { getMessageRender } from '@capital/common';
|
||||
|
||||
const Component = (text: string) => {
|
||||
return <div>{getMessageRender(text)}</div>
|
||||
}
|
||||
```
|
@ -0,0 +1,12 @@
|
||||
---
|
||||
sidebar_position: 3
|
||||
title: 系统架构
|
||||
---
|
||||
|
||||
## 服务端架构
|
||||
|
||||

|
||||
|
||||
## 插件机制架构
|
||||
|
||||

|
@ -0,0 +1,4 @@
|
||||
{
|
||||
"label": "命令行终端",
|
||||
"position": 40
|
||||
}
|
@ -0,0 +1,33 @@
|
||||
---
|
||||
sidebar_position: 1
|
||||
title: 命令行工具 tailchat-cli
|
||||
---
|
||||
|
||||
## 安装
|
||||
|
||||
```bash
|
||||
npm install -g tailchat-cli@latest # 安装与更新同一命令
|
||||
```
|
||||
|
||||
或直接使用
|
||||
```bash
|
||||
npx tailchat-cli <command>
|
||||
```
|
||||
|
||||
安装成功后输入`tailchat` 后返回如下
|
||||
|
||||
```bash
|
||||
tailchat <command>
|
||||
|
||||
Commands:
|
||||
tailchat create [template] 创建 Tailchat 项目代码
|
||||
tailchat connect 连接到 Tailchat 节点网络
|
||||
tailchat app Tailchat cli 版本(WIP)
|
||||
tailchat bench 压力测试
|
||||
tailchat declaration <source> Tailchat 插件类型声明
|
||||
tailchat docker Tailchat 镜像管理
|
||||
|
||||
Options:
|
||||
--version Show version number [boolean]
|
||||
-h, --help Show help [boolean]
|
||||
```
|
@ -0,0 +1,4 @@
|
||||
{
|
||||
"label": "项目贡献",
|
||||
"position": 90
|
||||
}
|
@ -0,0 +1,4 @@
|
||||
{
|
||||
"label": "开发文档",
|
||||
"position": 2
|
||||
}
|
@ -0,0 +1,54 @@
|
||||
---
|
||||
sidebar_position: 1
|
||||
title: 贡献指南
|
||||
---
|
||||
|
||||
`Tailchat` 是一个非常开放的项目,欢迎来自各种不同背景、任何形式的贡献。其插件的形式意味着允许`Tailchat` 可以承载任何想法的实现。
|
||||
|
||||
我们期望 `Tailchat` 不仅仅是一个简单的聊天应用,更是一个连接不同工具、不同想法的空间。
|
||||
|
||||
Github 地址: https://github.com/msgbyte/tailchat
|
||||
|
||||
-----------
|
||||
|
||||
目前 `Tailchat` 所急需要贡献者角色:
|
||||
|
||||
### 前端插件开发者
|
||||
|
||||
- 熟悉 React 的使用
|
||||
- 拥有一定的抽象化思维
|
||||
- 有基本的审美能力
|
||||
- 对开源项目抱有热情
|
||||
|
||||
### 后端插件开发者
|
||||
|
||||
- 熟悉 Nodejs 的使用
|
||||
- 对微服务有基本的认知
|
||||
- 对开源项目抱有热情
|
||||
|
||||
### electron 应用开发者
|
||||
|
||||
- 了解跨平台的开发
|
||||
- 熟悉代码注入,能够实现 render 进程与 main 进行数据交互
|
||||
- 对开源项目抱有热情
|
||||
|
||||
### uniapp w2a 应用开发者
|
||||
|
||||
- 熟悉uniapp应用的开发
|
||||
- 熟悉unipush2的开发
|
||||
- 对开源项目抱有热情
|
||||
|
||||
### 运营同学
|
||||
|
||||
- 了解基本的运营能力,有当过大群群主的经验
|
||||
- 了解开源项目的宣传渠道与方式
|
||||
- 沟通能力强
|
||||
|
||||
### 其他
|
||||
|
||||
更多的一切可能性...
|
||||
|
||||
|
||||
:::info
|
||||
联系方式: 发送邮件到`moonrailgun@gmail.com` 或 [加入TailchatNightly频道](https://nightly.paw.msgbyte.com/invite/8Jfm1dWb)
|
||||
:::
|
@ -0,0 +1,4 @@
|
||||
{
|
||||
"label": "应用部署",
|
||||
"position": 10
|
||||
}
|
@ -0,0 +1,34 @@
|
||||
---
|
||||
sidebar_position: 9
|
||||
title: 部署管理后台(可选)
|
||||
---
|
||||
|
||||
:::info
|
||||
管理后台的功能还在不断迭代中,目前正处于前期体验版
|
||||
后续会不断丰富内部的内容
|
||||
:::
|
||||
|
||||
从`github`获取最新的管理后台配置:
|
||||
```bash
|
||||
wget https://raw.githubusercontent.com/msgbyte/tailchat/master/docker/admin.yml
|
||||
```
|
||||
|
||||
在环境变量 `docker-compose.env` 中设置管理后台的账号和密码:
|
||||
```ini
|
||||
ADMIN_USER=tailchat
|
||||
ADMIN_PASS=<这里写入独立的后台密码, 不要告知其他人>
|
||||
```
|
||||
|
||||
然后使用[多文件方式](https://docs.docker.com/compose/extends/#understanding-multiple-compose-files)启动应用:
|
||||
```bash
|
||||
docker compose -f docker-compose.yml -f admin.yml up -d
|
||||
```
|
||||
|
||||
*注意先后顺序,因为`admin.yml`依赖`docker-compose.yml`所以要放在后面*
|
||||
|
||||
此时访问后台地址后面追加`/admin/`即可访问:
|
||||
```
|
||||
https://tailchat.example.com/admin/
|
||||
```
|
||||
|
||||
*注意不要忘记在最后有一个`/`*
|
After Width: | Height: | Size: 41 KiB |
@ -0,0 +1,45 @@
|
||||
---
|
||||
sidebar_position: 8
|
||||
title: 搭建 https 网关(可选)
|
||||
---
|
||||
|
||||
在 `Tailchat` 中,有一些服务是强依赖 `https` 的,比如音视频通话、嵌入外部的 `https` 媒体资源与网页等。
|
||||
|
||||
同时为了用户的安全性,我们非常建议将 `Tailchat` 对外以 `https` 服务的形式提供。
|
||||
|
||||

|
||||
|
||||
如果你没有相关的经验,且在同一台机器上只部署了 `Tailchat` 服务(没有占用 **80**/**443** 端口),那么我们推荐从 `Tailchat` 自带的 `swag` 配置开始。
|
||||
|
||||
:::info
|
||||
你可以在 [Github](https://github.com/msgbyte/tailchat/tree/master/docker) 看到原始的配置内容
|
||||
:::
|
||||
|
||||
通过以下命令直接拉取所需要的配置文件
|
||||
```bash
|
||||
wget https://raw.githubusercontent.com/msgbyte/tailchat/master/docker/swag.yml
|
||||
wget https://raw.githubusercontent.com/msgbyte/tailchat/master/docker/swag.env.example -O swag.env
|
||||
mkdir config
|
||||
wget https://raw.githubusercontent.com/msgbyte/tailchat/master/docker/config/nginx.conf -O ./config/nginx.conf
|
||||
```
|
||||
|
||||
完成后应该会在在当前目录看到以下三个文件:
|
||||
- `swag.yml`
|
||||
- `swag.env`
|
||||
- `config/nginx.conf`
|
||||
|
||||
修改`swag.env`的内容,将 `URL` 的值改为域名, 如: `URL=tailchat.example.com`
|
||||
|
||||
:::info
|
||||
`https`协议是依赖域名做证书校验的,因此需要提前分配一个域名指向目标服务器
|
||||
:::
|
||||
|
||||
域名的地址需要在购买域名的管理后台创建一条A指向记录。
|
||||
|
||||
在分配好域名后我们就可以启动服务了。
|
||||
|
||||
```bash
|
||||
docker compose -f ./swag.yml up -d
|
||||
```
|
||||
|
||||
如果一切顺利的话,此时`swag`服务已经自动为你申请了一个证书并启动了反向代理服务,此时在浏览器访问 `https://tailchat.example.com` 的话可以看到熟悉的界面已经出现了。
|
@ -0,0 +1,79 @@
|
||||
---
|
||||
sidebar_position: 2
|
||||
title: 安装docker环境
|
||||
---
|
||||
|
||||
> 因为 `Tailchat` 的环境对于初学者来说有一些些复杂,因此提供了 `docker` 为主的一键环境搭建配置。但是对于`docker`不熟的同学来说可能`docker`本身也是一种复杂度。
|
||||
|
||||
> 因此为了方便大家可以快速搭建 `Tailchat`,提供了本文作为引导。对于 `docker` 有一定了解的同学可以跳过本篇
|
||||
|
||||
> 本文以 `linux centos` 为例,目标是方便大家直接在服务器上部署。对于想要在其他系统(`windows`, `mac`) 使用的同学可以参考官方文档进行`docker`的安装
|
||||
|
||||
## 一键安装 docker
|
||||
|
||||
官方维护的一键安装 `Docker` 脚本, 适合不喜欢研究细节的同学
|
||||
|
||||
在服务器终端按照以下操作依次执行即可
|
||||
|
||||
```bash
|
||||
curl -fsSL https://get.docker.com -o get-docker.sh
|
||||
sudo sh get-docker.sh
|
||||
```
|
||||
|
||||
如果安装成功的话就可以跳过后续内容了。
|
||||
|
||||
## 手动安装docker与docker compose
|
||||
|
||||
官方文档: [https://docs.docker.com/engine/install/](https://docs.docker.com/engine/install/)
|
||||
|
||||
```bash
|
||||
# 如果之前有安装过docker可以执行以下命令删除旧的
|
||||
sudo yum remove docker \
|
||||
docker-client \
|
||||
docker-client-latest \
|
||||
docker-common \
|
||||
docker-latest \
|
||||
docker-latest-logrotate \
|
||||
docker-logrotate \
|
||||
docker-engine
|
||||
```
|
||||
|
||||
|
||||
```bash
|
||||
sudo yum install -y yum-utils # yum-utils 提供了 yum-config-manager 命令
|
||||
|
||||
sudo yum-config-manager \
|
||||
--add-repo \
|
||||
https://download.docker.com/linux/centos/docker-ce.repo
|
||||
```
|
||||
|
||||
<!-- 安装docker 与 docker-compose 插件 -->
|
||||
```bash
|
||||
sudo yum install -y docker-ce docker-ce-cli containerd.io docker-compose-plugin
|
||||
```
|
||||
|
||||
*PS: `docker-compose-plugin`提供了`docker compose`命令,用法同`docker-compose`*
|
||||
|
||||
> 如果`docker ps`显示守护进程没有启动(Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon running?)的话可以执行以下命令启动: `sudo systemctl start docker`
|
||||
|
||||
## 单独安装 docker-compose
|
||||
|
||||
如果购买的服务器已经预装了docker, 想要单独安装docker-compose的话可以看本节内容:
|
||||
|
||||
官方文档: [https://docs.docker.com/compose/install/](https://docs.docker.com/compose/install/)
|
||||
|
||||
```bash
|
||||
curl -SL https://github.com/docker/compose/releases/download/v2.4.1/docker-compose-linux-x86_64 -o /usr/local/bin/docker-compose # 下载二进制文件
|
||||
sudo chmod +x /usr/local/bin/docker-compose # 给予执行权限
|
||||
sudo ln -s /usr/local/bin/docker-compose /usr/bin/docker-compose # 软链接到path, 可以直接调用
|
||||
docker-compose --version # 该行命令返回版本号则成功安装
|
||||
```
|
||||
|
||||
## NOTICE
|
||||
|
||||
因为历史原因,`docker compose` 拥有`docker`插件版本与 `docker compose` 独立版本。一般意义上可以认为 `docker compose xxx` 与 `docker-compose xxx` 是等价的
|
||||
|
||||
## 参考文档
|
||||
|
||||
- [Docker](https://docs.docker.com/engine/install/)
|
||||
- [Docker Compose](https://docs.docker.com/compose/install/)
|
@ -0,0 +1,20 @@
|
||||
---
|
||||
sidebar_position: 1
|
||||
title: 快速开始
|
||||
---
|
||||
|
||||
## 演示环境
|
||||
|
||||
演示环境会持续部署最新前端代码和不定期更新后端代码
|
||||
|
||||
[https://nightly.paw.msgbyte.com/](https://nightly.paw.msgbyte.com/)
|
||||
|
||||
## 部署方式
|
||||
|
||||
强烈推荐使用 `docker-compose` 部署 `tailchat`
|
||||
|
||||
教程请翻阅: [Docker Compose 部署](./docker-compose.mdx)
|
||||
|
||||
## 系统架构
|
||||
|
||||
见 [系统架构](../architecture.md)
|
@ -0,0 +1,4 @@
|
||||
{
|
||||
"label": "运维操作",
|
||||
"position": 15
|
||||
}
|
@ -0,0 +1,4 @@
|
||||
{
|
||||
"label": "视频会议",
|
||||
"position": 60
|
||||
}
|
@ -0,0 +1,93 @@
|
||||
---
|
||||
sidebar_position: 10
|
||||
title: 声网插件部署指南
|
||||
---
|
||||
|
||||
:::info
|
||||
声网插件需要确保您的 `tailchat` 镜像版本在 1.4.0+
|
||||
:::
|
||||
|
||||
## 在声网平台申请项目
|
||||
|
||||
Tailchat 声网集成是依赖声网服务实现的音视频通话功能,因此在使用前需要在声网平台上注册。
|
||||
|
||||
声网官方: [https://www.agora.io/](https://www.agora.io/)
|
||||
|
||||
### 获取配置参数
|
||||
|
||||
注册完毕后/登录后会自动跳转到控制台。在控制台中可以进行项目配置
|
||||
|
||||

|
||||
|
||||
如果没有创建项目则需要先创建项目。如下图所示
|
||||
|
||||

|
||||
|
||||
建议使用安全模式以避免被其他人盗用。
|
||||
|
||||
接下来我们需要获取一些配置项用于配置`Tailchat`的声网插件。
|
||||
|
||||

|
||||
|
||||
在项目配置中我们可以获取 `appid` 和`app cert`。这两个分别是我们之后要用到的环境变量 `AGORA_APP_ID` 和 `AGORA_APP_CERT`
|
||||
|
||||
|
||||
### 获取客户凭证
|
||||
|
||||
另外我们还需要在右上角的 `RESTful API` 处获得客户的权限,
|
||||
|
||||
操作如图所示:
|
||||
|
||||

|
||||
|
||||

|
||||
|
||||
这样我们就拿到了另外两个环境变量: `AGORA_CUSTOMER_KEY` 和 `AGORA_CUSTOMER_SECRET`。
|
||||
|
||||
我们初步的准备工作就完成了
|
||||
|
||||
## 安装插件
|
||||
|
||||
目前声网插件的服务端插件已经被默认安装,您无需做任何事情。但是为了正常使用需要配置环境变量
|
||||
|
||||
### 配置环境变量
|
||||
|
||||
配置环境变量请见 [环境变量](../deployment/environment.md)
|
||||
|
||||
声网插件需要环境变量如下:
|
||||
|
||||
- `AGORA_APP_ID`: 声网项目应用id
|
||||
- `AGORA_APP_CERT`: 声网项目证书
|
||||
- `AGORA_CUSTOMER_KEY`: 声网客户id
|
||||
- `AGORA_CUSTOMER_SECRET`: 声网客户秘钥
|
||||
|
||||
这些环境变量都可以在上面的教程中获取。
|
||||
|
||||
配置环境变量完毕后即可
|
||||
|
||||
## 申请服务状态回调
|
||||
|
||||
为了使通话状态能够同步给`Tailchat`, 需要在声网中申请服务端回调。
|
||||
|
||||
在项目配置中,我们需要在`服务配置` 中启用`消息通知服务`
|
||||
|
||||

|
||||
|
||||
需要订阅以下事件:
|
||||
|
||||
- channel create=101
|
||||
- channel destroy=102
|
||||
- broadcaster join channel=103
|
||||
- broadcaster leave channel=104
|
||||
|
||||
接收服务器 URL 一般为: `https://<YOUR SERVER DOMAIN>/api/plugin:com.msgbyte.agora/webhook`, 其中`<YOUR SERVER DOMAIN>` 换成你的 `Tailchat` 域名。
|
||||
|
||||
:::info
|
||||
声网的服务会对服务器做连通性检查,因此需要配置好环境变量启动服务后再执行本次步骤。
|
||||
|
||||
另外声网需要配置`https` 且 `webrtc`服务也依赖`https`, 因此需要确保服务器网关支持`https`协议
|
||||
:::
|
||||
|
||||
配置完成后你会看到如下提示。等待声网工作人员确认完毕后即可生效。
|
||||
|
||||

|
@ -0,0 +1,9 @@
|
||||
---
|
||||
sidebar_position: 99
|
||||
title: SDK设计文档
|
||||
draft: true
|
||||
---
|
||||
|
||||
## 基本路径
|
||||
|
||||
用户基本操作路径是: 加入房间 —— 监听变更/推送本地媒体流 —— 离开房间这样完整的生命周期。
|
After Width: | Height: | Size: 38 KiB |
After Width: | Height: | Size: 52 KiB |
After Width: | Height: | Size: 28 KiB |
After Width: | Height: | Size: 11 KiB |
After Width: | Height: | Size: 26 KiB |
After Width: | Height: | Size: 78 KiB |
After Width: | Height: | Size: 11 KiB |
@ -0,0 +1,36 @@
|
||||
---
|
||||
sidebar_position: 1
|
||||
title: 概述
|
||||
---
|
||||
|
||||
`Tailchat` 提供两套方案用于视频语音通话,可以根据实际情况自行选择:
|
||||
- `tailchat-meeting` 自部署视频会议(WIP)
|
||||
- `agora` 声网集成, 详细说明见: [声网插件部署指南](./agora.md)
|
||||
|
||||
## Tailchat Meeting
|
||||
|
||||
视频会议模块是 `Tailchat` 系列的一套重要组成部分。提供能力如下:
|
||||
- 语音通信
|
||||
- 视频会话
|
||||
- 屏幕共享
|
||||
- 虚拟背景
|
||||
- 文件传输
|
||||
- 聊天记录
|
||||
|
||||
同时 `tailchat-meeting` 还可以作为独立单品存在,无需登录即可快速发起/加入会议
|
||||
|
||||
### 项目仓库
|
||||
|
||||
- 开源地址: [https://github.com/msgbyte/tailchat-meeting](https://github.com/msgbyte/tailchat-meeting)
|
||||
- 开源协议: GPL-3.0
|
||||
|
||||
:::info 开源声明
|
||||
本项目基于 [edumeet](https://github.com/edumeet/edumeet) 和 [mediasoup](https://github.com/versatica/mediasoup) 进行二次开发而来。
|
||||
|
||||
在此基础上进行了功能追加与SDK实现以及代码优化。如果想要找到开源协议更加宽松(MIT + ISC 协议)的实现可以看一下这两个项目
|
||||
:::
|
||||
|
||||
|
||||
### 项目架构
|
||||
|
||||

|
@ -0,0 +1,6 @@
|
||||
---
|
||||
sidebar_position: 3
|
||||
title: 插件部署
|
||||
---
|
||||
|
||||
TODO
|
@ -0,0 +1,6 @@
|
||||
---
|
||||
sidebar_position: 4
|
||||
title: SDK
|
||||
---
|
||||
|
||||
TODO
|
@ -0,0 +1,4 @@
|
||||
{
|
||||
"label": "插件列表",
|
||||
"position": 20
|
||||
}
|
@ -0,0 +1,180 @@
|
||||
---
|
||||
sidebar_position: 1
|
||||
title: 纯前端插件 (22)
|
||||
---
|
||||
|
||||
### com.msgbyte.bbcode BBCode 消息解释器
|
||||
|
||||
一个用于支持bbcode语法解释富文本消息的插件
|
||||
|
||||
- [插件源码](https://github.com/msgbyte/tailchat/blob/master/client/web/plugins/com.msgbyte.bbcode)
|
||||
- [manifest.json](https://github.com/msgbyte/tailchat/blob/master/client/web/plugins/com.msgbyte.bbcode/manifest.json)
|
||||
|
||||
|
||||
### com.msgbyte.biggerfont 字号放大
|
||||
|
||||
为Tailchat增加放大字号的功能,方便不同用户群体
|
||||
|
||||
- [插件源码](https://github.com/msgbyte/tailchat/blob/master/client/web/plugins/com.msgbyte.biggerfont)
|
||||
- [manifest.json](https://github.com/msgbyte/tailchat/blob/master/client/web/plugins/com.msgbyte.biggerfont/manifest.json)
|
||||
|
||||
|
||||
### com.msgbyte.draw 绘图插件
|
||||
|
||||
允许发送自定义绘图
|
||||
|
||||
- [插件源码](https://github.com/msgbyte/tailchat/blob/master/client/web/plugins/com.msgbyte.draw)
|
||||
- [manifest.json](https://github.com/msgbyte/tailchat/blob/master/client/web/plugins/com.msgbyte.draw/manifest.json)
|
||||
|
||||
|
||||
### com.msgbyte.env.rn ReactNative支持
|
||||
|
||||
在Tailchat添加对ReactNative环境的支持
|
||||
|
||||
- [插件源码](https://github.com/msgbyte/tailchat/blob/master/client/web/plugins/com.msgbyte.env.rn)
|
||||
- [manifest.json](https://github.com/msgbyte/tailchat/blob/master/client/web/plugins/com.msgbyte.env.rn/manifest.json)
|
||||
|
||||
|
||||
### com.msgbyte.filepizza file.pizza
|
||||
|
||||
在聊天输入框快捷打开 filepizza 以支持p2p传输文件
|
||||
|
||||
- [插件源码](https://github.com/msgbyte/tailchat/blob/master/client/web/plugins/com.msgbyte.filepizza)
|
||||
- [manifest.json](https://github.com/msgbyte/tailchat/blob/master/client/web/plugins/com.msgbyte.filepizza/manifest.json)
|
||||
|
||||
|
||||
### com.msgbyte.filesend filesend
|
||||
|
||||
在聊天输入框快捷打开 Filesend 以支持传输文件
|
||||
|
||||
- [插件源码](https://github.com/msgbyte/tailchat/blob/master/client/web/plugins/com.msgbyte.filesend)
|
||||
- [manifest.json](https://github.com/msgbyte/tailchat/blob/master/client/web/plugins/com.msgbyte.filesend/manifest.json)
|
||||
|
||||
|
||||
### com.msgbyte.filesfm files.fm
|
||||
|
||||
在聊天输入框快捷打开 files.fm 以支持传输文件
|
||||
|
||||
- [插件源码](https://github.com/msgbyte/tailchat/blob/master/client/web/plugins/com.msgbyte.filesfm)
|
||||
- [manifest.json](https://github.com/msgbyte/tailchat/blob/master/client/web/plugins/com.msgbyte.filesfm/manifest.json)
|
||||
|
||||
|
||||
### com.msgbyte.genshin 原神工具箱
|
||||
|
||||
为Tailchat增加原神相关的娱乐能力
|
||||
|
||||
- [插件源码](https://github.com/msgbyte/tailchat/blob/master/client/web/plugins/com.msgbyte.genshin)
|
||||
- [manifest.json](https://github.com/msgbyte/tailchat/blob/master/client/web/plugins/com.msgbyte.genshin/manifest.json)
|
||||
|
||||
|
||||
### com.msgbyte.integration 第三方集成
|
||||
|
||||
用于在群组中集成第三方应用
|
||||
|
||||
- [插件源码](https://github.com/msgbyte/tailchat/blob/master/client/web/plugins/com.msgbyte.integration)
|
||||
- [manifest.json](https://github.com/msgbyte/tailchat/blob/master/client/web/plugins/com.msgbyte.integration/manifest.json)
|
||||
|
||||
|
||||
### com.msgbyte.intro 初始引导插件
|
||||
|
||||
为应用首次打开介绍应用的能力
|
||||
|
||||
- [插件源码](https://github.com/msgbyte/tailchat/blob/master/client/web/plugins/com.msgbyte.intro)
|
||||
- [manifest.json](https://github.com/msgbyte/tailchat/blob/master/client/web/plugins/com.msgbyte.intro/manifest.json)
|
||||
|
||||
|
||||
### com.msgbyte.miaolang 喵语言
|
||||
|
||||
允许发送喵语,安装插件后的双方加密对话,未安装插件的人看到的是 '喵'
|
||||
|
||||
- [插件源码](https://github.com/msgbyte/tailchat/blob/master/client/web/plugins/com.msgbyte.miaolang)
|
||||
- [manifest.json](https://github.com/msgbyte/tailchat/blob/master/client/web/plugins/com.msgbyte.miaolang/manifest.json)
|
||||
|
||||
|
||||
### com.msgbyte.music 在线听音乐
|
||||
|
||||
提供在线听音乐服务,内容来自网络
|
||||
|
||||
- [插件源码](https://github.com/msgbyte/tailchat/blob/master/client/web/plugins/com.msgbyte.music)
|
||||
- [manifest.json](https://github.com/msgbyte/tailchat/blob/master/client/web/plugins/com.msgbyte.music/manifest.json)
|
||||
|
||||
|
||||
### com.msgbyte.notify 消息通知插件
|
||||
|
||||
为应用增加通知的能力
|
||||
|
||||
- [插件源码](https://github.com/msgbyte/tailchat/blob/master/client/web/plugins/com.msgbyte.notify)
|
||||
- [manifest.json](https://github.com/msgbyte/tailchat/blob/master/client/web/plugins/com.msgbyte.notify/manifest.json)
|
||||
|
||||
|
||||
### com.msgbyte.openapi 开放平台插件
|
||||
|
||||
为应用提供开放平台的操作能力
|
||||
|
||||
- [插件源码](https://github.com/msgbyte/tailchat/blob/master/client/web/plugins/com.msgbyte.openapi)
|
||||
- [manifest.json](https://github.com/msgbyte/tailchat/blob/master/client/web/plugins/com.msgbyte.openapi/manifest.json)
|
||||
|
||||
|
||||
### com.msgbyte.posthog Posthog
|
||||
|
||||
Posthog 数据统计
|
||||
|
||||
- [插件源码](https://github.com/msgbyte/tailchat/blob/master/client/web/plugins/com.msgbyte.posthog)
|
||||
- [manifest.json](https://github.com/msgbyte/tailchat/blob/master/client/web/plugins/com.msgbyte.posthog/manifest.json)
|
||||
|
||||
|
||||
### com.msgbyte.sentry Sentry
|
||||
|
||||
Sentry 错误处理
|
||||
|
||||
- [插件源码](https://github.com/msgbyte/tailchat/blob/master/client/web/plugins/com.msgbyte.sentry)
|
||||
- [manifest.json](https://github.com/msgbyte/tailchat/blob/master/client/web/plugins/com.msgbyte.sentry/manifest.json)
|
||||
|
||||
|
||||
### com.msgbyte.snapdrop 隔空投送
|
||||
|
||||
隔空投送 —— 在同一网络发送文件与消息
|
||||
|
||||
- [插件源码](https://github.com/msgbyte/tailchat/blob/master/client/web/plugins/com.msgbyte.snapdrop)
|
||||
- [manifest.json](https://github.com/msgbyte/tailchat/blob/master/client/web/plugins/com.msgbyte.snapdrop/manifest.json)
|
||||
|
||||
|
||||
### com.msgbyte.toolwa 工具哇!
|
||||
|
||||
工具哇 —— 在线小工具
|
||||
|
||||
- [插件源码](https://github.com/msgbyte/tailchat/blob/master/client/web/plugins/com.msgbyte.toolwa)
|
||||
- [manifest.json](https://github.com/msgbyte/tailchat/blob/master/client/web/plugins/com.msgbyte.toolwa/manifest.json)
|
||||
|
||||
|
||||
### com.msgbyte.user.location 用户地理位置
|
||||
|
||||
为用户信息增加地理位置记录
|
||||
|
||||
- [插件源码](https://github.com/msgbyte/tailchat/blob/master/client/web/plugins/com.msgbyte.user.location)
|
||||
- [manifest.json](https://github.com/msgbyte/tailchat/blob/master/client/web/plugins/com.msgbyte.user.location/manifest.json)
|
||||
|
||||
|
||||
### com.msgbyte.webview 网页面板插件
|
||||
|
||||
为群组提供创建网页面板的功能
|
||||
|
||||
- [插件源码](https://github.com/msgbyte/tailchat/blob/master/client/web/plugins/com.msgbyte.webview)
|
||||
- [manifest.json](https://github.com/msgbyte/tailchat/blob/master/client/web/plugins/com.msgbyte.webview/manifest.json)
|
||||
|
||||
|
||||
### com.msgbyte.wenshushu wenshushu
|
||||
|
||||
在聊天输入框快捷打开 文叔叔 以支持传输文件
|
||||
|
||||
- [插件源码](https://github.com/msgbyte/tailchat/blob/master/client/web/plugins/com.msgbyte.wenshushu)
|
||||
- [manifest.json](https://github.com/msgbyte/tailchat/blob/master/client/web/plugins/com.msgbyte.wenshushu/manifest.json)
|
||||
|
||||
|
||||
### com.msgbyte.wormhole wormhole
|
||||
|
||||
在聊天输入框快捷打开 wormhole 以支持传输文件
|
||||
|
||||
- [插件源码](https://github.com/msgbyte/tailchat/blob/master/client/web/plugins/com.msgbyte.wormhole)
|
||||
- [manifest.json](https://github.com/msgbyte/tailchat/blob/master/client/web/plugins/com.msgbyte.wormhole/manifest.json)
|
||||
|
@ -0,0 +1,20 @@
|
||||
---
|
||||
sidebar_position: 2
|
||||
title: 自定义主题 (2)
|
||||
---
|
||||
|
||||
### com.msgbyte.theme.genshin 原神主题
|
||||
|
||||
原神主题
|
||||
|
||||
- [插件源码](https://github.com/msgbyte/tailchat/blob/master/client/web/plugins/com.msgbyte.theme.genshin)
|
||||
- [manifest.json](https://github.com/msgbyte/tailchat/blob/master/client/web/plugins/com.msgbyte.theme.genshin/manifest.json)
|
||||
|
||||
|
||||
### com.msgbyte.theme.miku Miku初音未来主题
|
||||
|
||||
初音未来主题,支持亮色与暗色
|
||||
|
||||
- [插件源码](https://github.com/msgbyte/tailchat/blob/master/client/web/plugins/com.msgbyte.theme.miku)
|
||||
- [manifest.json](https://github.com/msgbyte/tailchat/blob/master/client/web/plugins/com.msgbyte.theme.miku/manifest.json)
|
||||
|
@ -0,0 +1,4 @@
|
||||
{
|
||||
"label": "开发插件",
|
||||
"position": 70
|
||||
}
|
@ -0,0 +1,4 @@
|
||||
{
|
||||
"label": "API 接口",
|
||||
"position": 99
|
||||
}
|
@ -0,0 +1,249 @@
|
||||
---
|
||||
sidebar_position: 1
|
||||
title: "@capital/common"
|
||||
---
|
||||
|
||||
## 注册
|
||||
|
||||
### regGroupPanel
|
||||
|
||||
注册群组面板
|
||||
|
||||
```typescript
|
||||
regGroupPanel({
|
||||
name: `com.msgbyte.webview/grouppanel`,
|
||||
label: '网页面板',
|
||||
provider: PLUGIN_NAME,
|
||||
extraFormMeta: [{ type: 'text', name: 'url', label: '网址' }],
|
||||
render: GroupWebPanelRender,
|
||||
});
|
||||
```
|
||||
|
||||
参数类型: [PluginGroupPanel](#plugingrouppanel)
|
||||
|
||||
### regMessageInterpreter
|
||||
|
||||
注册消息解释器
|
||||
|
||||
```typescript
|
||||
regMessageInterpreter({
|
||||
name: '喵语翻译',
|
||||
explainMessage(message: string) {
|
||||
// 喵语 -> 人话
|
||||
if (!isMiao(message)) {
|
||||
return null;
|
||||
}
|
||||
|
||||
return decode(message);
|
||||
},
|
||||
});
|
||||
```
|
||||
|
||||
参数类型: [PluginMessageInterpreter](#pluginmessageinterpreter)
|
||||
|
||||
### regMessageRender
|
||||
|
||||
*注册多个仅生效最后一个*
|
||||
|
||||
注册消息渲染器, 输入消息文本返回渲染内容
|
||||
|
||||
```typescript
|
||||
regMessageRender((message) => {
|
||||
return <BBCode plainText={message} />;
|
||||
});
|
||||
```
|
||||
|
||||
### regChatInputAction
|
||||
|
||||
注册聊天输入框操作
|
||||
|
||||
```typescript
|
||||
regChatInputAction({
|
||||
label: '喵言喵语',
|
||||
onClick: (actions) => {
|
||||
openModal(createElement(SendMiaoModal, { actions }));
|
||||
},
|
||||
});
|
||||
```
|
||||
|
||||
参数类型: [ChatInputAction](#chatinputaction)
|
||||
|
||||
|
||||
### regPluginColorScheme
|
||||
|
||||
注册插件配色方案/主题
|
||||
|
||||
```typescript
|
||||
regPluginColorScheme({
|
||||
label: 'Miku 葱',
|
||||
name: 'light+miku',
|
||||
});
|
||||
```
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
## 工具函数
|
||||
|
||||
### useGroupPanelParams
|
||||
|
||||
在`hooks`中获取用户面板相关信息
|
||||
|
||||
```typescript
|
||||
import { useGroupPanelParams } from '@capital/common';
|
||||
|
||||
const { groupId, panelId } = useGroupPanelParams();
|
||||
```
|
||||
|
||||
### openModal
|
||||
|
||||
打开一个模态框
|
||||
|
||||
```typescript
|
||||
openModal(
|
||||
content: React.ReactNode,
|
||||
props?: Pick<ModalProps, 'closable' | 'maskClosable'>
|
||||
)
|
||||
```
|
||||
|
||||
类型:
|
||||
- [ModalProps](#modalprops)
|
||||
|
||||
|
||||
### ModalWrapper
|
||||
|
||||
模态框包装器
|
||||
|
||||
```jsx
|
||||
<ModalWrapper>
|
||||
<div></div>
|
||||
</ModalWrapper>
|
||||
```
|
||||
|
||||
### useModalContext
|
||||
|
||||
获取模态框上下文
|
||||
|
||||
```typescript
|
||||
const { closeModal } = useModalContext();
|
||||
```
|
||||
|
||||
### getGlobalState
|
||||
|
||||
获取全局 `Redux` 状态上下文
|
||||
|
||||
```typescript
|
||||
const state = getGlobalState();
|
||||
```
|
||||
|
||||
### getCachedUserInfo
|
||||
|
||||
获取用户信息, 缓存版本
|
||||
|
||||
```typescript
|
||||
const info = getCachedUserInfo(userId);
|
||||
```
|
||||
|
||||
### getCachedConverseInfo
|
||||
|
||||
获取会话信息
|
||||
|
||||
```typescript
|
||||
const info = getCachedConverseInfo(converseId);
|
||||
```
|
||||
|
||||
## 类型
|
||||
|
||||
### PluginGroupPanel
|
||||
|
||||
```typescript
|
||||
interface PluginGroupPanel {
|
||||
/**
|
||||
* 面板唯一标识
|
||||
* @example com.msgbyte.webview/grouppanel
|
||||
*/
|
||||
name: string;
|
||||
|
||||
/**
|
||||
* 面板显示名
|
||||
*/
|
||||
label: string;
|
||||
|
||||
/**
|
||||
* 插件提供者, 用于引导没有安装插件的用户安装插件
|
||||
*/
|
||||
provider: string;
|
||||
|
||||
/**
|
||||
* 额外的表单数据, 用于创建面板时使用
|
||||
*/
|
||||
extraFormMeta: FastFormFieldMeta[];
|
||||
|
||||
/**
|
||||
* 该面板如何渲染
|
||||
*/
|
||||
render: React.ComponentType;
|
||||
}
|
||||
```
|
||||
|
||||
### PluginMessageInterpreter
|
||||
|
||||
插件消息解释器
|
||||
|
||||
```typescript
|
||||
interface PluginMessageInterpreter {
|
||||
name?: string;
|
||||
explainMessage: (message: string) => React.ReactNode;
|
||||
}
|
||||
```
|
||||
|
||||
### ChatInputAction
|
||||
|
||||
消息输入框操作对象
|
||||
|
||||
```typescript
|
||||
interface ChatInputAction {
|
||||
label: string;
|
||||
onClick: (actions: ChatInputActionContextProps) => void;
|
||||
}
|
||||
```
|
||||
|
||||
|
||||
### GroupPanel
|
||||
|
||||
```typescript
|
||||
interface GroupPanel {
|
||||
id: string; // 在群组中唯一
|
||||
name: string;
|
||||
parentId?: string;
|
||||
type: GroupPanelType;
|
||||
provider?: string; // 面板提供者
|
||||
pluginPanelName?: string; // 插件面板名
|
||||
meta?: Record<string, unknown>;
|
||||
}
|
||||
```
|
||||
|
||||
|
||||
### ModalProps
|
||||
|
||||
```typescript
|
||||
interface ModalProps {
|
||||
visible?: boolean;
|
||||
onChangeVisible?: (visible: boolean) => void;
|
||||
|
||||
/**
|
||||
* 是否显示右上角的关闭按钮
|
||||
* @default false
|
||||
*/
|
||||
closable?: boolean;
|
||||
|
||||
/**
|
||||
* 遮罩层是否可关闭
|
||||
*/
|
||||
maskClosable?: boolean;
|
||||
}
|
||||
```
|
@ -0,0 +1,22 @@
|
||||
---
|
||||
sidebar_position: 2
|
||||
title: "@capital/component"
|
||||
---
|
||||
|
||||
### Button
|
||||
|
||||
组件来自 [antd](https://ant.design/)
|
||||
|
||||
组件文档: [Button](https://ant.design/components/button-cn/)
|
||||
|
||||
### TextArea
|
||||
|
||||
组件来自 [antd](https://ant.design/)
|
||||
|
||||
组件文档: [TextArea](https://ant.design/components/input-cn/#components-input-demo-textarea)
|
||||
|
||||
### Image
|
||||
|
||||
组件来自 [antd](https://ant.design/)
|
||||
|
||||
组件文档: [Image](https://ant.design/components/image-cn/)
|
@ -0,0 +1,9 @@
|
||||
---
|
||||
sidebar_position: 3
|
||||
title: 全局CSS变量
|
||||
---
|
||||
|
||||
- `--tc-primary-color`: 主色调
|
||||
- `--tc-background-image`: 背景图片
|
||||
- `--tc-content-background-image`: 内容页背景图片
|
||||
- `--tc-content-background-image-opacity`: 内容页背景图片透明度,默认 **0.15**
|
@ -0,0 +1,20 @@
|
||||
---
|
||||
sidebar_position: 2
|
||||
title: Icon 图标
|
||||
---
|
||||
|
||||
```ts
|
||||
import { Icon } from '@capital/component';
|
||||
```
|
||||
|
||||
`tailchat` 的 icon 解决方案来自 `iconify`
|
||||
|
||||
使用方法很简单:
|
||||
- 在下述网站中选择想要的图标: [https://icon-sets.iconify.design/](https://icon-sets.iconify.design/)
|
||||
- 复制选中的key。传给 `Icon` 组件, 示例:
|
||||
```tsx
|
||||
<Icon icon="mdi:account" />
|
||||
```
|
||||
|
||||
推荐使用`mdi`来统一化图标视觉设计:
|
||||
[https://icon-sets.iconify.design/mdi/](https://icon-sets.iconify.design/mdi/)
|
@ -0,0 +1,59 @@
|
||||
---
|
||||
sidebar_position: 1
|
||||
title: 开始开发插件
|
||||
---
|
||||
|
||||
## 认识 MiniStar
|
||||
|
||||
`MiniStar` 是一套完整的微内核架构开发工具链,`tailchat`的插件架构就是基于 `MiniStar` 进行开发。
|
||||
|
||||
关于更多的 `MiniStar` 相关问题可以查看 `MiniStar` 的官方文档: [https://ministar.moonrailgun.com/](https://ministar.moonrailgun.com/)
|
||||
|
||||
## 创建一个基础项目
|
||||
|
||||
首先创建一个基本的 npm 项目, 并全局安装 `MiniStar`
|
||||
|
||||
```bash
|
||||
npm install --global mini-star
|
||||
```
|
||||
|
||||
在项目中执行: `ministar createPlugin` 来创建一个基本的插件
|
||||
|
||||
在项目中执行: `ministar buildPlugin` 来编译插件
|
||||
|
||||
> 值得一提的是, 虽然 `Tailchat` 并没有强制规定插件命名规范,但是还是推荐使用 `反域名` 的命名方式(类似于java中的包命名), 然后对插件中的部件,使用 `/` 进行分割
|
||||
>
|
||||
> 如:
|
||||
> 插件名: `com.msgbyte.webview`
|
||||
>
|
||||
> 注册内容: `com.msgbyte.webview/grouppanel`
|
||||
|
||||
## 安装插件
|
||||
|
||||
### 手动安装插件
|
||||
|
||||
在不经过任何预设的情况下,一个通用的办法是自己构造一个 `manifest` 配置, 然后在 `tailchat` 提供手动安装插件 Tab 中将配置文件粘贴进去安装。
|
||||
|
||||
插件的url路径可以通过 `oss对象存储服务` / `static-server` 等办法代理
|
||||
|
||||
一个作为示例的`manifest.json`配置如下:
|
||||
|
||||
```json
|
||||
{
|
||||
"label": "网页面板插件",
|
||||
"name": "com.msgbyte.webview",
|
||||
"url": "/plugins/com.msgbyte.webview/index.js",
|
||||
"version": "0.0.0",
|
||||
"author": "msgbyte",
|
||||
"description": "为群组提供创建网页面板的功能",
|
||||
"requireRestart": false
|
||||
}
|
||||
```
|
||||
|
||||
## 其他有用的资源
|
||||
|
||||
- 插件化架构内核依赖库 [MiniStar](https://ministar.moonrailgun.com/)
|
||||
- 来自基础项目提供的API: [API 文档](./api/common)
|
||||
- 导出接口源码
|
||||
- [@capital/common](https://github.com/msgbyte/tailchat/blob/master/client/web/src/plugin/common/index.ts)
|
||||
- [@capital/component](https://github.com/msgbyte/tailchat/blob/master/client/web/src/plugin/component/index.tsx)
|
@ -0,0 +1,6 @@
|
||||
{
|
||||
"copyright": {
|
||||
"message": "Copyright © 2023 MsgByte, Inc. Built with Docusaurus and ❤.",
|
||||
"description": "The footer copyright"
|
||||
}
|
||||
}
|
@ -0,0 +1,18 @@
|
||||
{
|
||||
"title": {
|
||||
"message": "Tailchat",
|
||||
"description": "The title in the navbar"
|
||||
},
|
||||
"item.label.Docs": {
|
||||
"message": "文档",
|
||||
"description": "Navbar item with label Docs"
|
||||
},
|
||||
"item.label.Blog": {
|
||||
"message": "博客",
|
||||
"description": "Navbar item with label Blog"
|
||||
},
|
||||
"item.label.GitHub": {
|
||||
"message": "GitHub",
|
||||
"description": "Navbar item with label GitHub"
|
||||
}
|
||||
}
|