# @framers/agentos-ext-channel-discord 中文文档

规范地址：https://npmcn.com/package/%40framers/agentos-ext-channel-discord/

版本：0\.2\.1
npm 元数据更新时间：2026-11-11T07:51:18.830Z
中文译文更新时间：2026-11-15T12:06:58.855Z
软件包许可：Apache-2\.0

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

原始 npm 页面：https://www.npmjs.com/package/%40framers/agentos-ext-channel-discord
原文对照：https://npmcn.com/package/%40framers/agentos-ext-channel-discord/?lang=original
项目主页：https://github.com/framerslab/agentos-extensions/tree/master/registry/curated/channels/discord#readme
源码仓库：https://github.com/framerslab/agentos-extensions

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

- 包体积（解压后）：419 kB，44 个文件
- 模块格式：CommonJS
- TypeScript 类型：包内自带
- Node.js 要求：\>=22
- 运行依赖：1 个
- peer 依赖：@framers/agentos \>=0\.10\.40
- 首次发布：2026-02-08T04:22:26.916Z
- 最新版本发布：2026-11-11T07:51:18.387Z
- 近 30 天下载量：20984（2026-10-16 至 2026-11-14，npm 官方下载统计）
- 已发布版本数：10（近 12 个月 10 个）

## 中文简介

AgentOS 的 Discord 消息通道适配器 — 双向消息通过不和. js

## 安装

```sh
npm install @framers/agentos-ext-channel-discord
```

也可以使用：`pnpm add @framers/agentos-ext-channel-discord`、`yarn add @framers/agentos-ext-channel-discord`、`bun add @framers/agentos-ext-channel-discord`

## README

# Discord 频道扩展

AgentOS 的双向 Discord 消息通过 `discord.js`。 。 。 .

## 它提供什么

-   `discordChannelSendMessage`
-   `discordChannelSendMedia`
-   `discordChannel`
-   `createWebhookSender`,在Discord webhook上贴出一个纯文本的帖子,没有bot,也没有不和.js(见 [Webhook 发送者](https://npmcn.com/package/%40framers/agentos-ext-channel-discord/#readme-the-webhook-sender)(中文(简体) )

## 运行时间状态

-   这是全程频道节目.
-   频道保持选入,因为它们可以连接,民意调查,或接收网络呼声.
-   打开它 `createCuratedManifest({ channels: ['discord'] })` 或自定义扩展列表.

## 需要的秘密

-   `discord.botToken`

## 直接信件和未提及服务器信件

3个选项决定哪个消息到达主机,哪个包到达Discord. 每个都回到一个环境变量,然后到一个默认,使包的行为保持其一贯的:

| 选项 | 环境变量 | 数值 | 默认 |
| --- | --- | --- | --- |
| `directMessages` | `DISCORD_DIRECT_MESSAGES` | `ignore`, (中文(简体) ), `accept` | `ignore` |
| `channelMessages` | `DISCORD_CHANNEL_MESSAGES` | `delayed`, (中文(简体) ), `immediate` | `delayed` |
| `apiBase` | `DISCORD_API_BASE` | rEST API 的基础地址 | 不合情理,j是属于自己的, `https://discord.com/api` |

```ts
createExtensionPack({
  options: { botToken, directMessages: 'accept', channelMessages: 'immediate' },
});
```

**`directMessages`。 。 。 .** 与 `ignore`,包会丢掉每个直接消息(它的默认意图不要求Discord为他们),直接消息中发送的斜线命令会回答"在服务器频道(而不是DMs)中利用我". 与 `accept`,该包添加 `DirectMessages` 在登录时意图达到它的意图,默认或默认的意图 `intents` 选项名称,并打开不协调。 js's (英语) `Channel` 部分。 Discord只根据这一意图向一个机器人发出直接信息([网关意图](https://discord.com/developers/docs/events/gateway#list-of-intents)),这个标准意图不需要在开发者门户网站中切换,直接消息的内容到达时没有特权消息内容的意图. 不和.js 将信件丢入它没有缓存的频道, 除非 `Channel` 部分内容在播放,第一个来自任何人的直接信息都在这样的频道中。 每一个直接消息然后立即到达主机,与 `conversationType: 'direct'`,而直接发送的消息中的斜线命令会像在服务器频道中一样运行.

无 `DISCORD_GUILD_ID` 在Discord的默认上下文中, 包在全球登记其斜线命令, 就像它总是一样, 包括任何与它共享服务器的人与机器人直接通信。 与 `DISCORD_GUILD_ID` 设置它在服务器中注册它们,Discord在服务器中单独提供服务器的命令,从不直接发送消息(Discord)[应用程序命令](https://discord.com/developers/docs/interactions/application-commands#registering-a-command)) (中文(简体) ). 所以说 `DISCORD_GUILD_ID` 财务报告和审定财务报表 `accept`,该包还在全球注册同样的命令与 `BOT_DM` 单独上下文[互动背景](https://discord.com/developers/docs/interactions/application-commands#interaction-contexts):它们与bot一起出现在直接消息中,服务器不列出每个命令两次. 与 `ignore` 财务报告和审定财务报表 `DISCORD_GUILD_ID`,命令单独到服务器。 同步会创建或编辑命令, 并且永远不会删除命令, 所以命令更早 `accept` 直接信件已登记,在切换到 `ignore`,而运行一个消息的直接信息被回答"在服务器频道(而不是DMs)中利用我". 以后没有开始 `DISCORD_GUILD_ID`,或服务器同步失败并倒回全局指令的服务器,将每个这样的命令Discord的默认上下文(服务器,带bot的直接信件,以及其他直接和组消息)回放: Discord的编辑只更改它给出的字段([编辑全局应用程序命令](https://discord.com/developers/docs/interactions/application-commands#edit-global-application-command))),所以一个不命名上下文的编辑会将其从每个服务器中省出.

**`channelMessages`。 。 。 .** 这决定了服务器消息会发生什么,既未提及机器人,也未回复. 提及或答复总是同时到达主办方. 与 `delayed`,包会将这样的消息丢入信息通道(`#tech-news`, (中文(简体) ), `#world-news` 以及其它的适配器列表),或者当它打开一个问候词或填充词时,是五个字符或更少,或者是一个孤独的自定义的emoji或链接. 它持有任何其他的两分钟,当其他人先在该频道张贴时,它就会放弃。 与 `immediate`,每个这样的消息都会同时到达主机,没有被丢弃,持有或取消. 主机的输入护栏再看到每个bot能读到的信息,由代理商决定是否回答. 每个消息都是转动,所以在繁忙的服务器上 `immediate` 花费一个模型调用每一个张贴在机器人可以读取的信息.

**`apiBase`。 。 。 .** 这变成了不和。 Js's (英语) `rest.api`,而网关地址来自 `GET /gateway/bot` 那里,因为它来自迪斯科德。 测试指向一个站立的Discord.

未知值为 `directMessages` 或者说 `channelMessages`,在选项或环境中,由于给设置取名出错而失败了包的创建,因此一个错误的拼接策略从未作为默认运行. 环境值是修剪的,无论如何.

## 被拒绝的机器人标志

当Discord拒绝bot 令牌时,适配器会发出一个 `error` 每次服务开始时的事件,服务停止:

```ts
adapter.on((event) => {
  if (event.data?.code === 'auth_failed') {
    // event.data is { code: 'auth_failed', channel: 'discord' }: ask for a new token.
  }
}, ['error']);
```

Discord以三种方式拒绝一个符号,每个符号都算:

-   登录失败与不协调 。 js's (英语) `TokenInvalid` 错误, 因为网关查找( e)`GET /gateway/bot`回答401;开始以这个错误拒绝;
-   a 使用bot 令牌回答401(发送、取回、斜线命令同步)的 REST 呼叫; 交互响应使用相互作用本身的令牌而不计数;
-   网关以代码 4004 关闭会话, 认证失败; 不和. js 之后不会重新连接 .

事件命名频道, 并带有没有符号和信件文本 。 当包激活时拒绝一个令牌, 在主机订阅前被拒绝, 所以一个订阅的处理器 `error` 事件结束后,它会得到一次, 就在它订阅之后。 服务会写一个警告. `DiscordService` 曝光情况 `tokenRejected` 财务报告和审定财务报表 `onTokenRejected(handler)`,且包输出 `CHANNEL_AUTH_FAILED_CODE` 财务报告和审定财务报表 `isDiscordTokenRejected(err)`,它表示来自不和.js的错误是否是一个被拒绝的bot符号(一个交互器上的401或者一个webhook自己的路径不是).

服务器出错(500和上)或被丢弃的连接不是被拒绝的符号: REST客户端重复了5xx3次,如不和.js一样,频道持续运行.

Discord 以 401 拒绝时的斜线命令同步启动后, 就会以该错误拒绝开始; 与 `DISCORD_GUILD_ID` 设置,同步不会继续到全局命令。 如果同步因任何其他原因而失败, 服务会写出一个警告, 并且启动时没有它的斜线命令 .

## Webhook 发送者

包裹通过两种方式到达了Discord. 机器人客户端( O)`DiscordService`,适配器和上面的工具) 登录一个bot 令牌,并服务频道 一个代理谈话进入. `createWebhookSender` 通过 Webhook 的 URL 将纯文本发布到一个频道,用于产品员工的提示:没有bot和登录. 它的代码没有从不和.js中调用,也没有启动客户端,尽管导入软件包的根仍然会装入不和.js,这是bot客户端需要的.

```ts
import { createWebhookSender } from '@framers/agentos-ext-channel-discord';

// The URL is a secret the product reads from its secret store at build time.
const alerts = createWebhookSender({ url: webhookUrl, timeoutMs: 5_000, logger });

const answer = await alerts.post({ content: 'A request has waited 30 minutes.', signal });
if (answer.outcome === 'sent') {
  // answer.deliveryId is the id of the message Discord created.
} else if (answer.outcome === 'retry') {
  // Post again after answer.afterMs.
} else {
  // answer.kind is 'status' (answer.status names it), 'no_answer' or 'refused'.
}
```

每个邮件都发送 `POST <url>?wait=true` 与 `Content-Type: application/json` 和身体的颜色 `{ "content": "...", "allowed_mentions": { "parse": [] } }`它发送不 `username` 或者说 `avatar_url`,所以webhook自己的名字和图片显示.

-   **`wait=true`** 让Discord在消息解答前等待保存,并返回所创建的消息. 没有它,没有保存的信件返回不错误([执行 Webhook](https://docs.discord.com/developers/resources/webhook)) (中文(简体) ).
-   **`content`** 是信件的文本, 最多2000个字符([执行 Webhook](https://docs.discord.com/developers/resources/webhook)) (中文(简体) ). 发件人拒绝空帖,或者在任何请求之前拒绝一个超过2000个字符.
-   **`allowed_mentions: { parse: [] }`** 压制信件中的每一个引用: Discord 解析其任何用户,角色, `@everyone` 或者说 `@here` 提及([允许引用](https://docs.discord.com/developers/resources/message)) (中文(简体) ). Discord 建议 `allowed_mentions` 在webhook的帖子上[执行 Webhook](https://docs.discord.com/developers/resources/webhook)) (中文(简体) ).
-   **A 429个** 携带着JSON尸体 `retry_after` 是等待的秒数,Discord请客户端等待 `Retry-After` 页眉或该字段( e)[费率限制](https://docs.discord.com/developers/topics/rate-limits)) (中文(简体) ).
-   **没有遵循方向 .** 301 或 302 之后的 POST 成为一个没有身体的获取([获取, HTTP 直接获取](https://fetch.spec.whatwg.org/#http-redirect-fetch)),而且一个网点的 URL 返回网点对象([将 Webhook 与 Token 连接](https://docs.discord.com/developers/resources/webhook#get-webhook-with-token)(b) 其国家 `id` 将读取为创建的信息,尽管没有发布。 一个3xx是 `failed` 及其地位. `http://discord.com` 以 301 回答一个 Webhook POST `https://`,所以 URL 开始于 `https://`。 。 。 .

`post` 决断三个答案之一,决不放弃:

| 答复 | 何时 |
| --- | --- |
| `{ outcome: 'sent', deliveryId }` | a 2xx,其身体为所创造的信息; `deliveryId` 这是它的 `id` |
| `{ outcome: 'retry', afterMs, status: 429 }` | a 429; `afterMs` 是尸体的吗 `retry_after`,否则 `Retry-After` 标题, 否则30秒 |
| `{ outcome: 'retry', afterMs: 5_000, status }` | a 2xx 在其体内无信息(204,或无信息) `id`这篇文章未经证实 |
| `{ outcome: 'failed', status, kind: 'status' }` | 任何其它状态,包含重定向 |
| `{ outcome: 'failed', status: null, kind: 'no_answer' }` | 网络故障、超时或呼叫者 `signal` 中止 |
| `{ outcome: 'failed', status: null, kind: 'refused' }` | 内容为空或超过2000个字符,在任何请求之前被拒绝 |

一个期限, `timeoutMs` (默认为5,000起),覆盖整个交换, 身体的读取包括: 其标题立即来自一个从未结束的身体 `no_answer`来电者 `signal` (一个收发箱的债权期限,比如)加入这个最后期限,一个已经中止的信号不会发出什么信号. 一个错误状态在给出答案后立即结束请求,因此一个永远不结束的错误正体没有连接. 复试是呼叫者的:发送者每通呼叫一次发帖.

Webhook URL携带了webhook的符文,所以发件人视之为秘密. 它以无答、无出错和无日志行的形式出现;发送者通过 `logger` 选项 `warn`,为 `discord_webhook` 与 `{ outcome: 'no_answer' }`,而一个向那里投掷的日志会改变任何答案。 A 类 `url` 这不是有效的 URL 制作 `createWebhookSender` 丢出一个 `TypeError` 将价值排除在外.

## 真相来源

-   `manifest.json` 定义导出的工具和消息通道描述符.
-   `src/` 包含适配器和工具执行.

## 释放

新版本发表于 [架设层/剂-外延](https://github.com/framerslab/agentos-extensions) 由 GitHub Actions 通过 npm 信任的出版, 并附有出处声明 .

## 常见问题

### @framers/agentos-ext-channel-discord 是什么？

AgentOS 的 Discord 消息通道适配器 — 双向消息通过不和\. js

### 如何安装 @framers/agentos-ext-channel-discord？

在项目目录运行 npm install @framers/agentos-ext-channel-discord，或使用 pnpm add / yarn add / bun add。它还需要宿主项目提供 peer 依赖：@framers/agentos（\>=0\.10\.40）。npm 7 及以上与 pnpm 8 及以上默认会自动安装必需的 peer 依赖，Yarn 需要手动安装。

### @framers/agentos-ext-channel-discord 支持 TypeScript 吗？

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

### @framers/agentos-ext-channel-discord 支持 ESM 还是 CommonJS？

以 CommonJS 形式发布，可以直接 require\(\)；在 ES Module 项目中也可以用 import 引入（Node\.js 会把 module\.exports 作为默认导出）。

### @framers/agentos-ext-channel-discord 需要什么版本的 Node\.js？

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

### @framers/agentos-ext-channel-discord 可以商用吗？

@framers/agentos-ext-channel-discord 使用 Apache-2\.0 许可。宽松许可：允许商业使用、修改和再分发，并附带明确的专利授权；分发时需保留许可与 NOTICE 文件，修改过的文件要注明改动。以上为概括，不构成法律意见，请以许可原文为准。

### @framers/agentos-ext-channel-discord 的下载量有多少？

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

### @framers/agentos-ext-channel-discord 还在维护吗？

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

