# 额外功能 (/docs/themes/shiro/extra)

# 额外功能

## 扩展的 Markdown 语法

参考 https://shiro.innei.in/#/markdown

**对于 LinkCard 的解析，某些需要你填写 API Key，以下的键值都是填写在 .env 环境变量中**

- GitHub，默认直接用浏览器访问，可能受到 rate limit，可以填写 `GH_TOKEN` 以保证 API 可达性。
- TMDB，必须填写 `TMDB_API_KEY` 才可以正确解析 tmdb 的链接。参考 https://post.smzdm.com/p/a5op4w33/ 这里获取 TOKEN

## 我的动态（ProcessReporter / Yohaku Companion）

Shiro 可以在页面顶部显示博主当前使用的应用和媒体状态。这条兼容路径仍由 Mix Space 云函数保存状态，再由桌面客户端发送更新。

macOS 客户端已经从 ProcessReporter 演进并更名为 **Yohaku Companion**。新版工具在 [Innei/YohakuCompanion](https://github.com/Innei/YohakuCompanion) 完整开源；Windows 与 Linux 继续使用社区客户端。

<ToGithubGroup>
<ToGithub repo="Innei/YohakuCompanion" />
<ToGithub repo="TNXG/ProcessReporterWinpy" />
<ToGithub repo="ttimochan/processforlinux" />
</ToGithubGroup>

<Callout type="info">
  Yohaku 主题用户应优先使用 Yohaku Companion 的一方 Live Desk 连接。它直接使用 Companion Protocol v2，不需要本节的云函数。具体配置参见 [Yohaku 配置文档](/docs/themes/yohaku/config)。
</Callout>

<Callout type="warning">
  本节仅描述 Shiro `activity` 模块的兼容方案。旧 ProcessReporter 与 Yohaku Companion 使用独立的应用身份、设置、历史和凭据；新版不会自动迁移旧应用数据。
</Callout>

<Steps>

<Step>
### 配置 Shiro 活动云函数

进入后台，点击左侧菜单栏的「集成 - 代码片段」（原 配置与云函数），然后点击新建按钮，在选项卡中填入以下信息：

- 名称：`update`
- 引用：`ps`
- 数据类型：`Function`
- 请求方式：`POST`

这个地方还需要设置一个密钥，在 Secret 中填入 `key`，在 Value 中填入你自己的密钥。

<Callout type="warning">
这个密钥将用于验证你的软件是否有权限更新博主的动态，所以请务必设置一个复杂的密钥。

**密钥在后面的步骤中还需要用到，所以请务必记住。**

</Callout>

上方没有提到的选项都不需要填写，然后在右侧的代码编辑器中填入下面链接中的代码：

<ToGithub repo="mx-space/snippets/blob/main/shiro/functions/ps.ts" />

点击保存按钮，云函数就配置完成了。

<Callout type="info">
  请关注此代码的更新，它可能会随时变化，你需要及时更新它们
</Callout>
</Step>

<Step>
### 配置 Shiro 主题

继续「集成 - 代码片段」页面（原 配置与云函数），找到「theme -> shiro」配置，点击编辑，进入编辑页面，在代码中找到 `module`，加入 activity 配置，如下：（高亮部分）

```json {14,15,16,17}
{
  "module": {
    "donate": {
      "enable": false,
      "link": "https://afdian.net/@Innei",
      "qrcode": [
        "https://cdn.jsdelivr.net/gh/Innei/img-bed@master/20191211132347.png",
        "https://cdn.innei.ren/bed/2023/0424213144.png"
      ]
    },
    "bilibili": {
      "liveId": 1434499
    },
    "activity": {
      "enable": true,
      "endpoint": "fn/ps/update"
    }
  }
}
```
</Step>

<Step>
### 配置客户端

前往对应操作系统的 GitHub 仓库，下载并打开客户端。
<ToGithubGroup>
<ToGithub repo="Innei/YohakuCompanion" />
<ToGithub repo="TNXG/ProcessReporterWinpy" />
<ToGithub repo="ttimochan/processforlinux" />
</ToGithubGroup>
由于不同平台有不同的使用方法，不同的软件我们会在下方具体讲述。
</Step>

</Steps>

### macOS：Yohaku Companion

1. 在 [Releases](https://github.com/Innei/YohakuCompanion/releases/latest) 下载 DMG，将 Yohaku Companion 移入「应用程序」并启动。
2. 打开 **Settings → Destinations → MixSpace**，填写：

   - Endpoint：`{你的 API 地址}/fn/ps/update`，例如 `https://api.example.com/api/v3/fn/ps/update`
   - API Token：填入云函数 Secret 中设置的 `key`
   - Request Method：`POST`

3. 先检查 **Sanitized Request Preview**，使用 **Send Test Presence…** 验证真实写入，再保存并启用 MixSpace destination。
4. 返回 **Settings → General**，按需启用 Applications、Window Titles 与 Media Playback，并打开 **Share to Bridges**。
5. 在 **Privacy & Rules** 中确认全局默认值和应用级 Share、Hide、Alias 规则。

Yohaku Companion 的 **Settings → Yohaku** 是一方 Live Desk 配对入口，与本节 Shiro 云函数方案彼此独立；只使用 Shiro `activity` 时无需完成 Yohaku 配对。

<Callout type="info">
  Window Titles 默认关闭，只有显式启用后才会请求辅助功能权限。媒体状态可由内置 provider 获取；可选的 `media-control` 仅用于补充更丰富的进程和封面信息。
</Callout>

### ProcessReporter `Windows`

Windows 版本的使用问题，请前往 [TNXG/ProcessReporterWinpy](https://github.com/TNXG/ProcessReporterWinpy#readme) 查看。

#### 使用 GUI 版本

在 [Releases](https://github.com/TNXG/ProcessReporterWinpy/releases) 页面下载 `ProcessReporterWinpy_Launcher.exe`
，配置好 `config.yml` 文件，然后运行 `ProcessReporterWinpy_Launcher.exe` 即可。

`config.yml` 配置具体配置项以及说明请参考 [TNXG/ProcessReporterWinpy](https://github.com/TNXG/ProcessReporterWinpy#readme)。

#### 使用预编译的二进制文件

在 [Releases](https://github.com/TNXG/ProcessReporterWinpy/releases) 页面下载 `ProcessReporterWinpy.exe`，配置好 `config.yml` 文件后，在终端运行即可，示例如下

```powershell
ProcessReporterWinpy.exe --path "运行目录的路径"
```

`config.yml` 配置具体配置项以及说明请参考 [TNXG/ProcessReporterWinpy](https://github.com/TNXG/ProcessReporterWinpy#readme)。

#### 使用源代码

下载代码后，修改 `config.yml` 文件，填入你的信息：

- api_url：`{你的API地址}/fn/ps/update` （请将 `{你的API地址}` 替换为你的 API 地址，如：`https://api.example.com/api/v3`）
- api_key：填入你刚刚在云函数中设置的密钥
- report_time: 上报间隔（单位：秒）

接着运行程序即可。如果一切正常，刷新一下你的博客你就可以在博客顶部看到你的动态了。

### ProcessReporter `Linux`

<ToGithub repo="ttimochan/processforlinux#readme" />

在仓库的 [Releases](https://github.com/ttimochan/processforlinux/releases) 页面下载对应的二进制包，解压运行即可，具体请参照项目的 README 进行配置运行。

安装完成后，新建 `.env.process` 文件，填入你的信息：

```yaml
# 你的 key
API_KEY=your_key
# 你的云函数地址
API_URL={你的API地址}/fn/ps/update
# 上报时间间隔，单位为秒
REPORT_TIME=30
# 是否开启媒体状态上报
MEDIA_ENABLE=true
# 是否打印日志
LOG_ENABLE=true
```

然后执行程序即可。如果一切正常，刷新一下你的博客你就可以在博客顶部看到你的动态了。

如果有什么疑问，可以去阅读该项目的 [README](https://github.com/ttimochan/processforlinux#readme)


## 个人状态展示

![](/assets/images/themes/shiro/status.webp)

设置当前的状态。

### 配置云函数

进入后台，点击左侧菜单栏的「集成 - 代码片段」（原 配置与云函数）中，然后点击新建按钮，在选项卡中填入以下信息：

- 名称：`status`
- 引用：`shiro`
- 数据类型：`Function`
- 请求方式：`ALL`

这个地方还需要设置一个密钥，在 Secret 中填入 `key`，在 Value 中填入你自己的密钥。

<Callout type="warn">
这个密钥将用于验证你的软件是否有权限更新当前状态，所以请务必设置一个复杂的密钥。

**密钥在后面的步骤中还需要用到，所以请务必记住。**

</Callout>

上方没有提到的选项都不需要填写，然后在右侧的代码编辑器中填入下面链接中的代码：

<ToGithub repo="mx-space/snippets/blob/main/shiro/functions/status.ts" />

点击保存按钮，云函数就配置完成了。

<Callout type="info">
  请关注此代码的更新，它可能会随时变化，你需要及时更新它们
</Callout>

### 设置状态

在主页登录之后，你可以点击此头像的右下方设置状态。