# @animalabs/discord-mcpl 中文文档

规范地址：https://npmcn.com/package/%40animalabs/discord-mcpl/

版本：0\.6\.0
npm 元数据更新时间：2026-10-30T01:39:17.450Z
中文译文更新时间：2026-11-06T06:52:25.925Z
软件包许可：未声明

本文由上游 README 翻译，可能存在偏差，请结合原文核对 API、命令与配置。版权与许可归原作者所有。

原始 npm 页面：https://www.npmjs.com/package/%40animalabs/discord-mcpl
原文对照：https://npmcn.com/package/%40animalabs/discord-mcpl/?lang=original
项目主页：https://github.com/anima-research/discord-mcpl#readme
源码仓库：https://github.com/anima-research/discord-mcpl

## 关键信息（来自 npm 元数据）

- 包体积（解压后）：5.6 MB，323 个文件
- 模块格式：ES Module
- TypeScript 类型：包内自带
- Node.js 要求：\>=22\.12\.0
- 运行依赖：8 个
- 首次发布：2026-07-13T15:42:24.613Z
- 最新版本发布：2026-10-30T01:39:17.115Z
- 近 30 天下载量：4306（2026-10-06 至 2026-11-04，npm 官方下载统计）
- 已发布版本数：14（近 12 个月 14 个）

## 中文简介

不和-mcpl通过一个bot账户将一个AI代理在Discord上. 这是一个 [MCPL 互联网档案馆的存檔,存档日期2013-12-02](https://github.com/anima-research/mcpl) 服务器。 MCPL( MCP Live) 扩展 [示范背景协议](https://modelcontextprotocol.io/) 这样服务器就可以注册频道w

## 安装

```sh
npm install @animalabs/discord-mcpl
```

也可以使用：`pnpm add @animalabs/discord-mcpl`、`yarn add @animalabs/discord-mcpl`、`bun add @animalabs/discord-mcpl`

## README

# 不和 mcpl 数据

不和-mcpl通过一个bot账户将一个AI代理在Discord上. 这是一个 [MCPL 互联网档案馆的存檔,存档日期2013-12-02](https://github.com/anima-research/mcpl) 服务器。 MCPL( MCP Live) 扩展 [示范背景协议](https://modelcontextprotocol.io/) 这样服务器除了提供工具外,还可以将频道与主机注册,并推向它的事件. 通过不和-mcpl,代理读取并张贴在Discord频道和DMs中,以及提及bot,回复它或DM的信息,甚至从代理尚未打开的频道到达代理主机.

在康乃馨堆叠, [连接主机](https://github.com/anima-research/connectome-host) 运行代理 [代理框架](https://github.com/anima-research/agent-framework),它开始不和 -mcpl 作为一个孩子的过程, 和它说话 通过stdio。 MCP客户端也可以运行它,作为只提供工具的服务器. 它的协议代码来自 [`@animalabs/mcpl-core`](https://github.com/anima-research/mcpl-core-ts),以及 [微缩磁盘](https://github.com/anima-research/slack-mcpl) 财务报告和审定财务报表 [电报-mcpL](https://github.com/anima-research/telegram-mcpL) 是Slack和Telegram的对手.

## 它会做什么

-   **海峡报.** discord 频道以 MCPL 为主机 [频道](https://github.com/anima-research/mcpl/blob/main/SPEC.md#14-channels-of-communication),带有表格的标识 `discord:<guildId>:<channelId>`,或 `discord:dm:<channelId>` 一个德国马克。 (一行是Discord的API所称的服务器. ) 主机打开并关闭了频道,不和-mcpl在到达时发送在开通频道中发布的消息,除非代理机已经关闭.
-   **给机器人的讯息.** 不和-mcpl还发出一条信息,提及了bot或它自己的角色,回复了bot的一通信息,或者作为DM而来,无论它的频道是否打开,只要过滤器承认它,并且代理商没有关闭该频道. 抵达时发送的信息携带MCPL [事件标记](https://github.com/anima-research/mcpl/blob/main/SPEC.md#16-event-tags),例如 `chat:mention`, (中文(简体) ), `chat:reply`, (中文(简体) ), `chat:dm`, (中文(简体) ), `chat:ambient` 财务报告和审定财务报表 `chat:from-bot`,主持人的醒悟政策可以与之相匹配. 编辑时在旁边带有相同的地址标签 `chat:edited`,从消息中读取为编辑,除非其地址不为人知:编辑消息不和.js只保留部分内容,或编辑目标Discord没有发送的回信,不带任何内容.
-   **编辑,删除和反应.** 不相容-mcpl提供DMs和开通频道的编辑和删除,除非代理机已经变音,以及来自正在显示反应能见度的服务器频道的反应. 打开一个频道 毒剂没有关闭它的反应能见度, 关闭它关闭它 `set_reaction_visibility`. 不和-mcpl不要求Discord的DM反应事件,因此DMs中的反应从未到来.
-   **附录.** 图像到达了内线,仍然有图像缩小到最长一端的1568像素. 文本文件被内入到一个大小限制,默认为5 KiB. 其他文件,以及无法内入的图像,作为带有文件名称,大小和URL的注释而来.
-   **休息后补习.** 与 `DISCORD_WATERMARK_FILE` 设置, 不相容- mcpl 为它发送的每个频道保存一个追赶位置, 这是它发送或扫描过的最新消息 。 在第一个主机连接后,它读取到 `DISCORD_CATCHUP_LIMIT` 在每个保存位置后发送当前过滤器所承认位置的信息。 在DMs和开放频道中,这些频道都是全部,在其他频道中,每个频道都提到机器人,两边最多有7条信息. 代理商哑音的频道没有 发送时主机没有接收的信息 也保存在那里, 稍后发送, 因为Discord有它.
-   **过滤器.** 环境变量或JSON过滤文件选择代理服务器,频道和DM发送器从哪一个接收. 编辑到文件在秒内生效,随着文件的配置,代理服务器和DM列表可以更改 `filters_update`。没有设置过滤器, 代理从每一个服务器听到 机器人在, 以及任何谁DM它.
-   **行政指挥.** 在列表中的 Discord 用户 `DISCORD_ADMIN_USERS` 可以运行五个斜线命令。 每个都要求主办方通过 `host/command` 。代理架构只为配置设置的服务器执行 `allowHostCommands: true`,否则拒绝.
    -   `/undo [messages] [marks]` 从代理上下文中去除上一封信件(1个默认,最多50个).
    -   `/hide message [to] [marks]` 删除信件, 或从信件中删除范围 `to`从代理的背景。 都取一个消息链接或ID.
    -   `marks` 打开 `/undo` 选择删除的消息获得qq认知标记 : `none`,默认, `addressed`或 `all`。宿主放置这些标记,所以 `/undo` 需要其代理框架具有 `marks` 主机命令(aima-research/agent-framework#250),并在旧主机上被拒绝.
    -   `marks` 打开 `/hide` 实值 `none`,默认值,或 `all`,它为每个隐藏消息添加了QQ。 这些标记是不和谐的Mcpl自己的,在任何主机上,在主机的分类账外: `/marks` 而不列出它们, 收回只到达一个 在一个消息中.
    -   `/marks action:list [target:<id>] [page:<n>]` 显示宿主对预定标记的认识分类账, `/marks action:cancel target:<id>` 停止它没有发送 `/marks action:retract target:<id>` 排队删除批次标记,或分类账中的每个标记 `target:all`它需要与 `/undo`。 。 。 .
    -   `/nudge` 运行当前上下文上的代理,没有新事件.
    -   `/unstick [max]` 倒转拒绝背后的转折 并再次运行代理 直到模型停止拒绝,最多 `max` 时间.
-   **声音.** 可选的是,不和-mcpl加入一个语音频道,通过"11Labs"来表达代理商的回复,作为主机流. 它在说话前等待沉默,当一个人谈论它时停止,并告诉特工什么是没有听到的. 不译出演说.
-   **倒转.** 这个 `discord.messaging` 特性集支持 MCPL [倒滚](https://github.com/anima-research/mcpl/blob/main/SPEC.md#8-state-management)返回检查点后删除、删除和删除后张贴的不协调信息 `send_message`, (中文(简体) ), `reply_message` 或东道主的 `channels/publish`不和谐的mcpl在记忆中保留着检查站,所以它们无法从重启中活下来.

## 工具

| 特性集 | 工具 |
| --- | --- |
| `discord.messaging` | `send_message`, (中文(简体) ), `reply_message`, (中文(简体) ), `send_dm`, (中文(简体) ), `add_reaction`, (中文(简体) ), `remove_reaction`, (中文(简体) ), `edit_message`, (中文(简体) ), `delete_message`, (中文(简体) ), `list_emojis` |
| `discord.history` | `fetch_history`, (中文(简体) ), `fetch_around` |
| `discord.channels` | `create_text_channel`, (中文(简体) ), `delete_channel` |
| `discord.subscriptions` | `mute_channel`, (中文(简体) ), `unmute_channel`, (中文(简体) ), `set_reaction_visibility`, (中文(简体) ), `list_subscriptions`, (中文(简体) ), `channel_missed` |
| 没有设置特性 | `list_guilds`, (中文(简体) ), `list_channels`, (中文(简体) ), `list_channel_members`, (中文(简体) ), `refresh_channels`, (中文(简体) ), `filters_get`, (中文(简体) ), `filters_update` |

在MCPL模式下,由主机决定哪些功能集被启用. 不和- mcpl 拒绝功能集已禁用的工具, 并禁用 `discord.messaging` 还阻止Discord消息到达主机. 任何功能集以外的工具总是可用的. MCP客户端获得每个工具,没有Discord消息.

[`docs/tool-reference.md`](https://npmcn.com/package/%40animalabs/discord-mcpl/docs/tool-reference.md) 向代理解释如何命名频道,选择要操作的信件并附加文件.

## 设置

### 1\. 创建机器人

1.  在那个 [Discord 开发者门户](https://discord.com/developers/applications),创建应用程序,并从它的 Bot 页面复制此令牌。 这是 `DISCORD_TOKEN`。 。 。 .
2.  在同一页,在Privileged Gateway Intents下,打开服务器成员意图和信件内容意图. 不和-mcpl 要求Discord为两者服务.
3.  将机器人邀请到您的服务器 `bot` 财务报告和审定财务报表 `applications.commands` 瞄准镜。 第二个让不和- mcpl 注册管理员斜线命令 。 在bot应该工作的频道中,允许它查看频道,读取消息历史,发送消息(也用线程),附加文件并添加反应. 与另一服务器的emojis反应,也需要使用外部Emojis, `create_text_channel` 财务报告和审定财务报表 `delete_channel` 需要管理频道(管理线索来删除一条线索),语音需要连接和说话.

### 2\. 安装

不和-mcpl需要节点22.12.0或更后.

npm有标记的释放:

```sh
npm install @animalabs/discord-mcpl
```

服务器就是了 `node_modules/@animalabs/discord-mcpl/dist/src/index.js`,哪个 `npx @animalabs/discord-mcpl` 运行.

运行 `main` 无论是现在还是现在,或为此,都从以下来源建立:

```sh
git clone https://github.com/anima-research/discord-mcpl.git
cd discord-mcpl
npm ci
npm run build
```

服务器就是了 `dist/src/index.js`。 。 。 .

### 3\. 运行

```sh
DISCORD_TOKEN=... npx @animalabs/discord-mcpl --stdio
DISCORD_TOKEN=... npx @animalabs/discord-mcpl --tcp 9040
```

从源检出, 运行 `node dist/src/index.js` 与同旗相会. `npm start -- --stdio` 运行 TypeScript 源码,通过 tsx 不构建.

-   与 `--stdio`,一个主机开始不和-mcpl 和它说话 与stdin和stdout。 当主机关闭连接时不协调- mcpl 退出 .
-   与 `--tcp <port>`,不和-mcpl只听127.0.0.1,一次为一个主机服务,拒绝同时连接的任何其他主机. 它继续登录到主机之间的Discord. 在没有主机连接的情况下到达的信息被丢弃,只有后期读取历史,如第一个主机连接后的赶来,才能带回. 当一个主机开始运行时,它已经在路上被保存到下一个主机,最多一分钟,每次64个消息:主机对一个消息没有回答,在没有说明理由的情况下拒绝,或者拒绝在启动之前的许可,就如同同一事件一样,再次发送给一个已完成启动的主机,广告活动联合,并且可以在它建成时接收这个事件(从未通过一个频道发送过前一个主机打开的);等待其消息的编辑或删除也会被发送到它(见CHANGELOG).

不和- mcpl 将其日志写入 stderr .

用连接主机,在食谱上加入一个条目 `mcpServers`,正如连接主机的README在"MCP服务器"下所描述的那样. 路径在 `args` 是服务器的 `dist/src/index.js`,在源代码或下 `node_modules/@animalabs/discord-mcpl/`数字 :

```json
"mcpServers": {
  "discord": {
    "command": "node",
    "args": ["/absolute/path/to/dist/src/index.js", "--stdio"],
    "env": {
      "DISCORD_TOKEN": "${DISCORD_TOKEN}",
      "DISCORD_WATERMARK_FILE": "/absolute/path/to/data/discord-watermarks.json"
    },
    "allowHostCommands": true
  }
}
```

`allowHostCommands` 让代理框架执行管理员的斜线命令,没有它,代理框架拒绝执行.

默认情况下, connectome-host 给出了 stdio 服务器代理-framework的系统变量允许列表(`PATH`, (中文(简体) ), `HOME`, 区域设置等),其条目名称 `env`和两个它自己设置。 一个是 `AGENT_TIMEZONE`中替换任何值的 `env`连接主机从食谱中取出 `agent.timezone`,除此之外 `AGENT_TIMEZONE`,则来自其系统时区。 另一个是 `DISCORD_SUPPRESSED_REACTIONS_BASELINE`,设置为代理框架的拒绝-反应列表,该列表在 `env` 替换。 命名每个其它可变的不和- mcpl 应见于 `env`。 。 。 .

## 配置

不匹配- mcpl 从环境变量读取其配置, 并且只 `DISCORD_TOKEN` 需要时间。 它不载一 `.env` 存档. [`.env.example`](https://npmcn.com/package/%40animalabs/discord-mcpl/.env.example) 提供过滤器和反应-压制变量的更详细信息.

### 过滤器

| 变量 | 它会做什么 | 未设定时 |
| --- | --- | --- |
| `DISCORD_GUILD_ID` | 逗号分离的 Discord 服务器, 代理服务器从中听到 。 一个条目是一个服务器ID, 它承认它的所有频道,或者 `serverId:channelId+channelId`它只收录那些频道和线索 列出一个类别即承认其下的频道. | 每一个服务器的机器人. |
| `DISCORD_DM_USERS` | 以逗号分隔的用户ID,这些用户可能会对代理进行DM. 不协调的McPL不会从别人那里送去一个DM. 列表只过滤输入的 DMs, 不读取 . | 谁都行. |
| `DISCORD_FILTERS_FILE` | 一个JSON文件持有相同的过滤器,加上下面的反应-抑制列表. 如果启动时文件缺失, 不相容- mcpl 从上面的两个变量创建它 。 如果它存在,它取代它们。 编辑在3秒内生效,以及 `filters_update` 可以更改其服务器和DM列表. 启动时无法解析的文件如出一辙,两个变量应用到固定为止. 错误的编辑会让过滤器生效 . | 上述两个变量适用,仅在重新启动时更改. |

一个过滤器文件允许一个服务器的每个频道,另一个频道和来自一个用户的DMs:

```json
{
  "guildIds": ["111111111111111111", "222222222222222222"],
  "guildChannels": { "222222222222222222": ["333333333333333333"] },
  "dmUsers": ["444444444444444444"]
}
```

服务器的频道列表只在 `guildIds` 列出服务器.

服务器列表决定了哪些服务器的频道不匹配-mcpl 注册并发送信件. 服务器的频道列表也限制代理在那里读取的内容 : `list_channels` 留下一条通道, `list_channel_members`, (中文(简体) ), `fetch_history`, (中文(简体) ), `fetch_around` 和主机的打开 有回滚拒绝一个, 一个频道名称只解决 它内部的频道. `latestFrom`,哪个 `reply_message`, (中文(简体) ), `add_reaction` 财务报告和审定财务报表 `remove_reaction` 替换信件ID, 仅在频道中选择信件, 过滤器所允许的 DMs 。 发送到其数字ID给出的频道的信号没有过滤.

当DM名单拒绝DM时,代理商可以通过打电话让发件人知道 `filters_update` 与 `setDmNotice: true`。默认情况下取消通知。 他们每24小时最多一次前往每个发送者,所有发送者最多每小时一起前往10次.

### 存储状态

这些文件允许状态超过重新启动 。 文件没有路径的状态会留在内存中,重启会丢失它.

| 变量 | 它所持有的 | 未设定时 |
| --- | --- | --- |
| `DISCORD_WATERMARK_FILE` | 每个频道的追赶位置(传送或扫描的最新消息),DM频道的不和-mcpl知道,计数 `channel_missed` 报告,以及主机没有接收的信息,这些信息是后来发送的(`owed`,只在有一些时才显示). | 固定在内存中,没有追赶;主机没有接收到的消息只在进程运行时稍后才发送. |
| `DISCORD_SUBSCRIPTIONS_FILE` | 遗事. 一个 JSON 的频道 ID 阵列,它一启动就发送消息, 将它们登记为初始打开, 除了代理已关闭的频道。 它读过文件一次,从来没有写过。 文件的路径也设置了后两个文件的默认路径. | 没有频道. |
| `DISCORD_MUTED_CHANNELS_FILE` | 频道变弱了 `mute_channel`。 。 。 . | 除了订阅文件( E)`subs.json` 给 `subs.muted.json`),或者在记忆中,如果这是未设置的也. |
| `DISCORD_REACTION_CHANNELS_FILE` | 反应能见度的渠道,截至其最后的节省. `set_reaction_visibility`, (中文(简体) ), `mute_channel` 并关闭频道保存;打开频道不会. | 除了订阅文件( E)`subs.json` 给 `subs.reactions.json`),或者在记忆中,如果这是未设置的也. |
| `DISCORD_DM_NOTICES_FILE` | 是否在DM通知上,以及每个发送者的通知限制,没有消息文本. 在文件无法读取或写入时,通知停止. | `$XDG_STATE_HOME/discord-mcpl/<bot user ID>/dm-notices.json`,与 `~/.local/state` 替换 `$XDG_STATE_HOME` 当它是未设置. |

### 历史和附件

| 变量 | 它会做什么 | 未设定时 |
| --- | --- | --- |
| `DISCORD_BACKSCROLL_LIMIT` | 有多少更早的消息(回滚)会带来从一个DM频道发送的第一个消息,每个注册频道的历史大小会提供主机(`capabilities.history.maxMessages`),虽然一个宿主的开放回报最多为500. 从一到一万. | 80个 |
| `DISCORD_BACKSCROLL_CHANNELS` | 按逗号分隔的每个通道限制 `channelId:n` 双对 `n` 从0到10000。 对于上市频道, `n` 替换 `DISCORD_BACKSCROLL_LIMIT`,它也盖 `fetch_history`, (中文(简体) ), `fetch_around` (它总是至少返回它所中心的信息)和主机在打开频道时要求的历史. | 无每道所限. |
| `DISCORD_CATCHUP_LIMIT` | 每一个频道都会读到最多的信息。 从一到一万. | 3000个 |
| `DISCORD_ATTACHMENT_INLINE_MAX_BYTES` | 内含的最大文本附件, 以字节表示 . `0` 关闭文本内衬,超过 262144 的值等于 262144,无效的值记录出错并给出默认值。 图像没有受到影响. | 第5120号 |

不和- mcpl 读取 `DISCORD_BACKSCROLL_LIMIT` 财务报告和审定财务报表 `DISCORD_CATCHUP_LIMIT`,而范围外的值给出了默认值.

### 管理员命令

| 变量 | 它会做什么 | 未设定时 |
| --- | --- | --- |
| `DISCORD_ADMIN_USERS` | 可运行用户的逗号分隔ID `/undo`, (中文(简体) ), `/hide`, (中文(简体) ), `/marks`, (中文(简体) ), `/nudge` 财务报告和审定财务报表 `/unstick`。 。 。 . | 没有人可以. |

### 反应抑制

抑制使所选择的反应的emojis脱离了物剂所看到的:活的反应事件,取出历史和回旋. 与 `DISCORD_FILTERS_FILE` 设置,列表存在于该文件中为 `suppressedReactionEmojis`,只修改了文件的编辑。 当不和- mcpl 创建文件时,它会写入适用于它的列表. 启动时无法解析的过滤器文件会将每个反应扣住直到固定. 没有文件,下面的变量会提供列表. 不和- mcpl 在启动时读取了两个变量一次 .

| 变量 | 它会做什么 | 未设定时 |
| --- | --- | --- |
| `DISCORD_SUPPRESSED_REACTIONS_BASELINE` | 当过滤器文件没有列表时, 逗号分隔的 emojis 以压制 `DISCORD_SUPPRESS_REACTION_EMOJIS` 完全没有设定。 设定为空, 该变量关闭基线 . | 没有基线. |
| `DISCORD_SUPPRESS_REACTION_EMOJIS` | 堕地. 列表作为逗号分隔变量, 当过滤器文件没有时使用 `suppressedReactionEmojis` 键. | 没有使用. |

### 时间戳

| 变量 | 它会做什么 | 未设定时 |
| --- | --- | --- |
| `AGENT_TIMEZONE` | IANA时区,例如 `Europe/Berlin`,用于写入后补和后补文本的时间。 协议时间戳留在协调世界时. 无效的区域日志警告并给出默认值 . | 系统时区,或UTC. |
| `AGENT_TIMESTAMP_STYLE` | 那些时候的样子如何: `full` (单位:千美元)`2026-01-15T04:34:56-08:00 [America/Los_Angeles]`, (中文(简体) ), `compact` (单位:千美元)`2026-01-15 04:34`, (中文(简体) ), `time` (单位:千美元)`04:34`)或(或) `none`。无效的值记录一个警告并给出 `full`。 。 。 . | `full` |

### 诊断

| 变量 | 它会做什么 | 未设定时 |
| --- | --- | --- |
| `DISCORD_MCPL_DEBUG_LOG` | 一个可写取的绝对路径,不相通-mcpl附加符会给诊断线打上时间戳. 它们包括信息文本的节选,每个可达80个字符. | 没有日志. |

### 语音

声音关闭,除非 `DISCORD_VOICE_CHANNEL_ID` ,设置它也需要接下来的四个变量。 如果其中的任何一个缺失,或者语音设置失败,不和谐-mcpl日志为什么和运行没有语音. 有声音,不和-mcpl告诉主机 它需要流化的答复(`channels.streaming`),它会说回音随着流出。 主机仍然照常张贴文本.

| 变量 | 它会做什么 | 未设定时 |
| --- | --- | --- |
| `DISCORD_VOICE_CHANNEL_ID` | 要发言的语音频道的ID. 把声音打开. | 声音关闭了. |
| `DISCORD_VOICE_GUILD_ID` | 语音频道所在的 Discord 服务器的ID . | 语音需要. |
| `DISCORD_VOICE_REGISTRY_FILE` | 一个JSON文件, 在 [语音设备](https://github.com/anima-research/voice-kit)注册格式, 将名称映射到 11Labs 声音 . | 语音需要. |
| `DISCORD_VOICE_NAME` | 登记声音,配以其密钥或 `discordName`,忽略大小写并跳过条目 `enabled: false`当无相匹配时,不匹配-mcpl使用注册簿的 `defaultBotVoice`。 。 。 . | 语音需要. |
| `ELEVENLABS_API_KEY` | 十一Labs API 语音合成键. | 语音需要. |
| `DISCORD_VOICE_TEXT_CHANNELS` | 以逗号分隔的回答的文本频道的ID. | 每个频道的答复,包括模式草案. |
| `DISCORD_VOICE_VAD_DB` | 在dBFS中,声音的响度,在语音频道的某个人算作说话的上方. | \-45岁 |
| `DISCORD_VOICE_MAX_HOLD_MS` | 最长的回复等待沉默。 不和-mcpl 丢掉一个等待时间更长,不说话的回覆,并告诉特工它没有被听到. | 答如来等已. |

最小的注册名称为一个语音 :

```json
{ "voices": { "my-agent": { "voiceId": "your-elevenlabs-voice-id" } } }
```

用它,设置 `DISCORD_VOICE_NAME=my-agent`。 。 。 .

## 发展

```sh
npm run typecheck
npm test                              # test/*.test.ts in one node --test process, through tsx
npm run build
node --test dist/test/server.test.js  # the built server
```

CI在Ubuntu上用22.12.0节点运行这些. 在有22.12.0节点和最新发行的macOS上,在有24节点和最新发行的Ubuntu上,它安装,构建并检查已建成的服务器在启动时加载所导入的每个模块并到达其检查对象,其语音模块加载.

`npm test` 在一个过程中运行每个测试文件( q)`--experimental-test-isolation=none`,节点22.8或以后),并期望服务器自己的 `DISCORD_*` 变量未设置, 如 CI 有。 因此,测试可以回击它改变的任何全过程状态,例如环境变量,全球或 `console`钩子放进去 `describe`: 在文件的顶层, a `beforeEach` 或者说 `afterEach` 环绕每个文件的测试,a `before` 或者说 `after` 整个运行中一次. `test/top-level-hooks.test.ts` 在一个行失败 `.ts` 文件输入 `test/` 从其中任何一项开始:

-   钩叫,名字,别名a `node:test` 导入给它,或者通过诸如 `test.before`· ;
-   转让 `process.env`, (中文(简体) ), `console`, (中文(简体) ), `globalThis` 或者说 `global`,或直接写在其中之一的财产,例如: `globalThis.fetch` 或者说 `process.env['X']`· ;
-   (单位:千美元) `delete` 任何一种,或任何一种;
-   (单位:千美元) `process` 添加到监听器 `on`, (中文(简体) ), `once`, (中文(简体) ), `addListener`, (中文(简体) ), `prependListener` 或者说 `prependOnceListener`。 。 。 .

它只读出从其中一种平面形式开始的行,所以它看不到一个缩入的行(在顶层块内,或者在被叫作顶层的函数内),在另一个语句后写出,一个通过一个铸件或更长路径的任务(Cast)`(globalThis as any).fetch`, (中文(简体) ), `globalThis.process.env.X`),或通过 `Object.assign` 或者说 `Object.defineProperty`。 。 。 .

`scripts/voice-smoke.ts` 在没有主机的直播语音频道中尝试语音输出 。 与 `DISCORD_TOKEN`, (中文(简体) ), `ELEVENLABS_API_KEY` 财务报告和审定财务报表 `DISCORD_VOICE_REGISTRY_FILE` 设定, `npx tsx scripts/voice-smoke.ts --guild <serverId> --vc <voiceChannelId> --voice <registry name>` 说每行你打, 你可以谈论它,看到它停止. `--list` 打印服务器和频道.

[变动情况](https://npmcn.com/package/%40animalabs/discord-mcpl/CHANGELOG.md) 自2026-07-29起记录更改操作员通知.

## 常见问题

### @animalabs/discord-mcpl 是什么？

不和-mcpl通过一个bot账户将一个AI代理在Discord上\. 这是一个 MCPL 互联网档案馆的存檔,存档日期2013-12-02 服务器。 MCPL\( MCP Live\) 扩展 示范背景协议 这样服务器就可以注册频道w

### 如何安装 @animalabs/discord-mcpl？

在项目目录运行 npm install @animalabs/discord-mcpl，或使用 pnpm add / yarn add / bun add。它还提供命令行工具 discord-mcpl，可以用 npx discord-mcpl 直接运行。

### @animalabs/discord-mcpl 支持 TypeScript 吗？

支持。包内自带 TypeScript 类型声明（package\.json 声明了 types 入口），安装后即可获得类型提示，无需再安装 @types 包。

### @animalabs/discord-mcpl 支持 ESM 还是 CommonJS？

以 ES Module 形式发布，推荐使用 import 引入。在 CommonJS 项目中，Node\.js 20\.19\+ / 22\.12\+ 可以直接 require\(\) 不含顶层 await 的 ES Module，更早的版本需要改用动态 import\(\)。

### @animalabs/discord-mcpl 需要什么版本的 Node\.js？

package\.json 的 engines 字段要求 Node\.js \>=22\.12\.0。版本不符时 npm 默认只给出警告，开启 engine-strict 后会拒绝安装。

### @animalabs/discord-mcpl 可以商用吗？

@animalabs/discord-mcpl 使用 未声明 许可。package\.json 没有声明许可证。没有许可证的代码默认保留全部权利，商用前请联系作者或查看仓库中的 LICENSE 文件。以上为概括，不构成法律意见，请以许可原文为准。

### @animalabs/discord-mcpl 的下载量有多少？

根据 npm 官方下载统计，@animalabs/discord-mcpl 在 2026/10/06 – 2026/11/04 这 30 天内被下载 4,306 次，日均约 144 次。下载量会把 CI 构建、镜像同步和作为其他包依赖的安装一并计入，适合横向比较热度，不能直接等同于使用人数。

### @animalabs/discord-mcpl 还在维护吗？

最新版本 0\.6\.0 发布于 2026/10/30（8 天前）；至今共发布 14 个版本，其中过去 12 个月发布了 14 个；首次发布于 2026/07/13。发布频率只是参考信号：功能稳定的工具可能很少需要更新，建议结合源码仓库的 issue 和提交记录判断。

