🎁 福利专区全网大模型免费应用 + 新用户福利 + 注册活动入口,低成本玩转 AI

通用消息协议 satorijs/satori

Cordis
satorijs6 天前有提交已提供中文文档扫描:未发现敏感能力notify

通用消息协议

66.9/100
综合分
263
GitHub 星标
—
npm 周下载
—/5
用户评分

数据截至 2026/10/28 · 周下载取自 npm 全网(含 CI / 镜像),非本站安装数;综合分由星标、活跃度与兼容性检查合成。

自动兼容检查未通过:缺少 main/exports/bin 入口声明;仓库 package.json 标记 private,未发布到 npm,需从源码安装。以下命令仍可尝试,但可能失败。
安装命令 · 需先装 dsh CLI 引擎
dsh plugin --profile web add satorijs/satori
该包不可直接 npm 安装,改从 GitHub 源安装(明细见下方安装检查)

状态速览

判定依据:实装验证 · 静态安装检查 · 自动扫描 · 仓库维护状态
信任档位:已验证
是什么
dsh 原生插件 · other
装得上吗
本站已真实安装成功
非静态推断
L4 · 真实安装等级说明 →
安全吗
本站尚未对该插件做风险分级
暂未覆盖,不等同于无风险
还在维护吗
活跃:最近一次提交在 6 天前
档位由哪些信号合成

本站实装验证(真实安装 L4 覆盖全站;L5 为运行时冒烟或实机截图,覆盖范围小于 L4) · 验证所用 dsh 版本 · 静态安装检查 · 风险分级 · 仓库维护状态。 下方各区块是它的证据明细。

验证判据与等级说明 →
社区实装还没有人打卡 · 装过的第一个就是你
安装兼容性检查需源码安装

缺少 main/exports/bin 入口声明;仓库 package.json 标记 private,未发布到 npm,需从源码安装

展开查看检查明细 ↓

以下结论由程序自动检查 npm 包、engines 声明与入口文件得出,未做人工实机验证——能装不等于用着没问题。

✗npm 包@root/satori(未发布到 npm,仅可源码安装)
✓Node 引擎未声明 engines.node
✓dsh CLI 依赖未声明 dsh 版本约束
✗入口文件缺少入口声明

源码安装时若 pnpm 拦截 prepare 脚本,按其提示在 pnpm-workspace.yaml 的 allowBuilds 中放行后重跑。

验证方式:npm registry 存在性 + package.json 静态校验 · 最后检查 2026/10/29 09:38:43

安全扫描自动 · 静态分析源码
v2.7.0
🟢 扫描:未发现敏感能力尚无人工评估
展开查看扫描说明与证据 ↓

静态扫描未发现敏感能力:最多只发网络请求、读取自身元数据或只读文件,未发现执行命令、文件写入或敏感信息读取。

发起外部网络请求
查看扫描证据(共 46 处,展示前 31 条)
  • 发起网络请求
    adapters/kook/src/bot.ts:48
    return (await this.http.get(path, { params: data, headers }))?.data
  • 发起网络请求
    adapters/kook/src/bot.ts:57
    await this.request('POST', '/user-chat/delete-msg', { msg_id })
  • 发起网络请求
    adapters/kook/src/bot.ts:59
    await this.request('POST', '/message/delete', { msg_id })
  • 发起网络请求
    adapters/kook/src/bot.ts:66
    await this.request('POST', '/user-chat/update-msg', { msg_id, content })
  • 发起网络请求
    adapters/kook/src/bot.ts:68
    await this.request('POST', '/message/update', { msg_id, content })
  • 发起网络请求
    adapters/kook/src/bot.ts:74
    return adaptMessage(await this.request('GET', '/user-chat/view', { msg_id }))
  • 发起网络请求
    adapters/kook/src/message.ts:63
    const result = await this.bot.request('POST', this.path, params)
  • 发起网络请求
    adapters/kook/src/message.ts:85
    const { data: { url } } = await this.bot.http.post('/asset/create', payload)
  • 发起网络请求
    adapters/kook/src/message.ts:96
    const { data: { url } } = await this.bot.http.post('/asset/create', payload)
  • 发起网络请求
    adapters/kook/src/ws.ts:22
    const { url } = await this.bot.request('GET', '/gateway/index?compress=0')
  • 发起网络请求
    adapters/lark/src/ws.ts:66
    const { code, data: { URL: url, ClientConfig: config }, msg } = await this.bot.http.post(`${baseUrl}/callback/ws/endpoint`, {
  • 发起网络请求
    adapters/mail/src/bot.ts:79
    const mails = this.imap.fetch(uids, { bodies: '' })
  • 发起网络请求
    adapters/matrix/src/types.ts:490
    return (await this.bot.http.post(`/media/v3/upload?filename=${filename}`, buffer, { headers })).content_uri
  • 发起网络请求
    adapters/matrix/src/types.ts:545
    return await this.bot.http.get(`/client/v3/rooms/${roomId}/event/${eventId}`)
  • 发起网络请求
    adapters/matrix/src/types.ts:554
    return await this.bot.http.get(`/client/v3/profile/${userId}`)
  • 发起网络请求
    adapters/matrix/src/types.ts:567
    const response = await this.bot.http.post('/client/v3/createRoom', creation)
  • 发起网络请求
    adapters/matrix/src/types.ts:572
    const response = await this.bot.http.post(`/client/v3/join/${roomId}`, { reason })
  • 发起网络请求
    adapters/matrix/src/types.ts:577
    const response = await this.bot.http.post(`/client/v3/rooms/${roomId}/leave`, { reason })
  • 发起网络请求
    adapters/slack/src/bot.ts:44
    return await this.http.get(path, { params: data, headers })
  • 发起网络请求
    adapters/slack/src/ws.ts:16
    const data = await this.bot.request('POST', '/apps.connections.open', {}, {}, true)
  • 发起网络请求
    adapters/wechat-official/src/bot.ts:201
    await this.http.post('/customservice/kfaccount/add', {
  • 发起网络请求
    adapters/wechat-official/src/bot.ts:210
    return await this.http.get('/cgi-bin/media/get', {
  • 发起网络请求
    adapters/wechat-official/src/message.ts:55
    await this.bot.http.post('/cgi-bin/message/custom/send', {
  • 发起网络请求
    adapters/wecom/src/bot.ts:140
    return await this.http.get('/cgi-bin/media/get', {
  • 发起网络请求
    adapters/wecom/src/bot.ts:154
    const data = await this.http.get('/cgi-bin/user/get', {
  • 发起网络请求
    adapters/wecom/src/bot.ts:200
    await this.http.post('/cgi-bin/message/recall', {
  • 发起网络请求
    adapters/wecom/src/message.ts:33
    const { msgid } = await this.bot.http.post('/cgi-bin/message/send', {
  • 发起网络请求
    adapters/whatsapp/src/internal.ts:23
    await this.http.post(`/${selfId}/messages`, {
  • 发起网络请求
    adapters/zulip/src/message.ts:30
    const { id } = await this.bot.http.post('messages', form)
  • 发起网络请求
    packages/server/src/index.ts:128
    res.body = await ctx.http.get(url.href, { responseType: 'stream' })
  • 发起网络请求
    packages/server/src/index.ts:225
    ctx.http.post(webhook.url, body, {
扫描于 2026/11/3(0 天前) · 范围 全包扫描 · 来源 GitHub 仓库

静态扫描只反映源码中出现的调用,不构成安全背书;人工评估与自动扫描相互独立、互不覆盖。

给这个插件打分还没有人投票↓
用户评分
还没有人投票,来当第一个

README

由 DeepSeek 最新模型翻译生成
Satori 通用消息协议 路线图 - 基础设施 - [x] @satorijs/core - [x] @satorijs/element - [x] @satorijs/satori - [x] @satorijs/protocol - [x] @satorijs/plugin-server - 生态 - [x] DingTalk(钉钉) - [x] Discord - [x] KOOK(开黑啦) - [x] Lark(飞书) - [x] Line - [x] Mail - [x] Matrix - [x] QQ Guild - [x] Slack - [x] Telegram - [x] WhatsApp - [x] WeCom(企业微信) - [x] Wechat Official(微信公众号) - [x] Zulip 示例 基本用法 import { Context } from '@satorijs/core' import discord from '@satorijs/adapter-discord' // create a new context const ctx = new Context() // configure a Discord account ctx.plugin(discord, { token: 'xxxxxx', })
展开完整文档(README 剩余 1 节)
Satori
通用消息协议

路线图

- 基础设施
- [x] @satorijs/core
- [x] @satorijs/element
- [x] @satorijs/satori
- [x] @satorijs/protocol
- [x] @satorijs/plugin-server
- 生态
- [x] DingTalk(钉钉)
- [x] Discord
- [x] KOOK(开黑啦)
- [x] Lark(飞书)
- [x] Line
- [x] Mail
- [x] Matrix
- [x] QQ Guild
- [x] Slack
- [x] Telegram
- [x] WhatsApp
- [x] WeCom(企业微信)
- [x] Wechat Official(微信公众号)
- [x] Zulip

示例

基本用法

import { Context } from '@satorijs/core'
import discord from '@satorijs/adapter-discord'

// create a new context
const ctx = new Context()

// configure a Discord account
ctx.plugin(discord, {
token: 'xxxxxx',
})

// listen to message events
ctx.on('message', (session) => {
console.log(session.content)
})

// start application
await ctx.start()

指定协议

import { Context } from '@satorijs/core'
import router from '@cordisjs/plugin-server'
import telegram from '@satorijs/adapter-telegram'

// your application will be listening http://localhost:8080
// and be available at https://example.com
const ctx = new Context({
port: 8080,
selfUrl: 'https://example.com',
})

// you need a router plugin to handle http requests
ctx.plugin(router)

ctx.plugin(telegram, {
// telegram supports two ways of connection: server and polling
protocol: 'server',
path: '/telegram',
token: 'xxxxxx',
})

多个账号

// specify multiple accounts with different platforms and protocols
ctx.plugin(discord, {
token: 'xxxxxx',
})

ctx.plugin(telegram, {
protocol: 'server',
token: 'yyyyyy',
})

ctx.plugin(telegram, {
protocol: 'polling',
token: 'zzzzzz',
})

移除账号

基于 cordis。

const fork = ctx.plugin(discord, {
token: 'xxxxxx',
})

fork.dispose()
预览分享卡片长什么样 ↓satorijs/satori
分享 · DeepSeek Harness Hub
satorijs/satori

通用消息协议

回到顶部