技能使用指南

using-nostr(Nostr协议集成技能)Skill 是什么?如何下载安装并发布加密私信?

一文读懂 using-nostr 技能:用几行 JavaScript 即可发布 Nostr 公共笔记、回复帖子、收发 NIP-4 与 NIP-17 加密私信、读取全局动态。含安装步骤、参数说明、竞品对比、典型场景与常见问题,帮你低成本接入去中心化社交,立即上手试试。

Nostr协议集成技能Skillusing-nostr
8 个章节 约 16 分钟阅读 AI 智能生成

using-nostr(Nostr协议集成技能):用几行 JavaScript 打通去中心化社交发布与加密私信

  • 零门槛接入:技能封装了 nostr-sdk 的最小直接导出函数,安装依赖后即可发帖、回复、发私信、看动态,无需自己实现签名、事件构造与中继分发逻辑。
  • 双协议私信:同时支持旧版 NIP-4 与新版 NIP-17(礼物包裹、密封发送者、NIP-44 加密),可按隐私需求自由切换。
  • 默认中继覆盖广:内置多个默认中继(含 wss://relay.damus.io、wss://nos.lol 等),减少手动配置中继的工作量。
  • 安全性有指引:文档明确要求私钥不入库、走环境变量或保险库,并给出 POW 防垃圾与错误处理范式。
  • 适合谁用:想给机器人、内容工具、告警系统加一条「去中心化社交通道」的开发者与效率工具用户。

该技能叫什么?如何下载安装 AI 技能提升开发效率?

技能中文名:Nostr协议集成技能Skill 技能英文名:using-nostr 技能ID:13106

这个技能解决的核心问题是:Nostr 是一个去中心化社交协议,想在上面发一条笔记,开发者通常要自己搞懂事件(event)结构、密钥签名、多个中继的 WebSocket 分发与结果聚合,甚至要处理工作证明(POW)与加密私信的 NIP 细节。using-nostr 把这些繁琐环节收敛成若干可直接调用的函数导出,你只关心「发什么、发给谁」,剩下的交给技能。

「一键安装」的思路很简单:先装依赖,再调用函数,最后验证结果。

第一步:确认安装前提

  • 已具备 Node.js 运行环境与 npm 包管理器(版本以官方说明为准);
  • 准备一个 Nostr 身份:nsec 开头的私钥(Bech32 格式)。没有的话,技能内提供密钥生成能力,可先生成测试用密钥。

第二步:安装技能依赖 按技能详情给出的安装方式执行:

npm install nostr-sdk

第三步:验证是否生效 先跑一段最小验证:用 generateNewKey() 生成一对测试密钥,确认库能正常加载并返回 nsec / npub;再用测试密钥调用一次 posttoNostr() 发一条测试笔记,看返回值中的 success、published、totalRelays 是否符合预期。能拿到 eventId 且 published 大于 0,说明安装与中继连通性都正常。

至于该技能在具体 AI 技能平台上的安装入口、命令名称与版本号,以官方说明为准;本文只依据技能详情中的 npm install nostr-sdk 展开。

该技能的主要功能和特点

  • 发布公共笔记:posttoNostr() 一条调用完成内容签名与多中继广播,返回成功中继数、失败中继数、总中继数与错误列表。
  • 自动标签提取:内容里写 #nostr 会自动转成 ["t","nostr"] 话题标签,@npub1... 提及会转成 ["p", 公钥],note1... 引用会转成 ["e", 事件ID],链接原样保留——省掉手写 tags 的麻烦。
  • 回复帖子:replyToPost() 传入事件 ID、回复内容与作者公钥即可进入线程对话。
  • 加密私信双通道:sendmessage() 走 NIP-4 旧版兼容路线;sendMessageNIP17() 走现代礼物包裹方案,密封发送者、使用临时密钥、NIP-44 加密,隐私更强。
  • 消息监听:getmessage() 与 getMessageNIP17() 以回调方式接收私信,支持 since 时间戳增量拉取,并返回 unsubscribe 用于停止监听。
  • 全局动态读取:getGlobalFeed() 支持按数量、时间窗、事件类型(如 kinds:[1] 仅文本笔记)、作者、中继过滤,适合做阅读器或趋势分析。
  • 密钥工具链:generateNewKey() 生成完整密钥对,generateRandomNsec() 快速生成私钥,nsecToPublic() 由私钥推导公钥与 npub。
  • POW 防垃圾:powDifficulty 参数默认 4,设为 0 可关闭,在公开广播场景下可降低被中继拒收的概率。

和「自己从零写 Nostr 客户端」相比,它的优势在于:默认中继已内置、标签自动解析、发布结果按中继聚合统计、私信同时覆盖新旧两代标准。

如何使用该技能?

步骤 1:准备密钥并放进环境变量 不要把 nsec 提交到 git。按技能建议:

export NOSTR_NSEC="nsec1...your-private-key"

步骤 2:发布一条公共笔记

const { posttoNostr } = require("nostr-sdk");

const result = await posttoNostr("Hello Nostr! #introduction", {
  nsec: process.env.NOSTR_NSEC,
  tags: [],
  relays: null,
  powDifficulty: 4
});
console.log(result);

输入为文本内容与可选项;输出形如:

{
  success: true,
  eventId: "abc123...",
  published: 12,
  failed: 2,
  totalRelays: 14,
  powDifficulty: 4,
  errors: []
}

看 published 与 failed 就能判断覆盖情况,失败原因在 errors 里。

步骤 3:回复某条帖子

const { replyToPost } = require("nostr-sdk");

await replyToPost(
  "note1...event-id",
  "Great post! @npub1...author",
  "npub1...author-pubkey",
  [],
  null,
  4
);

步骤 4:发送私信(按隐私需求二选一)

const { sendMessageNIP17 } = require("nostr-sdk");

await sendMessageNIP17(
  "npub1...recipient",
  "Private message!",
  { nsec: process.env.NOSTR_NSEC }
);

需要兼容旧客户端时改用 sendmessage()(NIP-4)。

步骤 5:监听私信并处理

const { getMessageNIP17 } = require("nostr-sdk");

const unsubscribe = getMessageNIP17((msg) => {
  console.log(`来自 ${msg.senderNpub} 的消息: ${msg.content}`);
}, {
  nsec: process.env.NOSTR_NSEC,
  since: Math.floor(Date.now() / 1000) - 300
});

// 不需要时调用 unsubscribe() 停止

步骤 6:读取全局动态或生成测试密钥

const { getGlobalFeed, generateNewKey } = require("nostr-sdk");

const events = await getGlobalFeed({
  limit: 50,
  since: Math.floor(Date.now() / 1000) - 3600,
  kinds: [1]
});
events.forEach(e => console.log(e.authorNpub, e.content, e.noteId, e.createdAtDate));

步骤 7:加错误处理兜底

try {
  const r = await posttoNostr("Hello", { nsec: process.env.NOSTR_NSEC });
  if (!r.success) console.error("发布失败:", r.errors);
} catch (err) {
  console.error("错误:", err.message);
}

常见错误包括「私钥未设置」「无效的 nsec 格式」「发布到 Nostr 失败(中继连接)」「解密消息失败(收件人私钥错误)」,按提示逐项排查即可。

同类型竞品对比分析

方案名称 定位 核心功能 安装/使用门槛 适用场景 优势与不足
using-nostr(本技能) AI 技能形态的 Nostr 快速集成层 发笔记、回复、NIP-4/NIP-17 私信收发、全局动态、密钥生成与转换 低:npm install nostr-sdk 后调用函数;私钥需自行管理 机器人发帖、告警通知、私信客服、内容监控 优势:函数直出、默认中继多、标签自动解析、新旧私信标准都覆盖;不足:功能聚焦基础收发,不含客户端界面与复杂应用层能力
自行基于 Nostr 底层库开发 完全定制 事件构造、签名、中继池、加密均由自己实现 高:需理解 NIP 规范与事件模型 需要深度定制协议行为的团队 优势:完全可控;不足:开发周期长,标签解析、多中继聚合、私信兼容都要自己填坑
现成 Nostr 客户端(如技能中提到的网页/iOS 客户端) 面向终端用户的成品应用 浏览、发帖、私信等图形化操作 低:注册/导入密钥即可用 人工日常发帖与阅读 优势:开箱即用、有界面;不足:难以嵌入自动化流程,批量发布与程序化监听能力弱
传统中心化社交平台开放接口 平台内集成 发帖、私信、拉取内容 中:需申请开发者资质与密钥,受平台规则约束 面向中心化平台的内容运营 优势:用户基数大、生态成熟;不足:依赖平台审核与限流,非去中心化,身份与数据不自主

选型建议:要「程序化、可自动化、身份自持」,本技能最省事;要「人工日常使用」,现成客户端更顺手;要「协议级深度定制」,才值得自研。

该技能的典型应用场景与实际体验情况

场景一:自动化公告与内容分发(运营/开发者) 痛点:每次发公告都要手动登录客户端,多平台复制粘贴。使用方式:把 posttoNostr() 接到发布流水线里,公告正文写好话题标签,调用后检查 published 数量。实际体验:标签自动提取非常省事,#tag、@提及、引用笔记不用手动组 tags;注意首次使用要先确认中继连通性,failed 偏高时补充自定义 relays。

场景二:私信客服机器人(开发者) 痛点:需要一个能监听来信并自动回复的通道,还希望发送者身份对第三方不可见。使用方式:用 getMessageNIP17() 常驻监听,解析 senderNpub 与 content 后调用 sendMessageNIP17() 回复。实际体验:NIP-17 的密封发送者与临时密钥让元数据保护明显更好;但需要自己设计回调里的业务分流逻辑,长驻进程要处理重连与 since 增量,避免重复消费。

场景三:舆情与趋势监控(数据分析/研究者) 痛点:想按关键词、时间窗、作者维度观察公共讨论。使用方式:getGlobalFeed() 设 kinds:[1]、limit、since 拉取,再对 content 做本地过滤统计。实际体验:参数维度够用,返回体带 authorNpub、noteId、createdAtDate 便于二次处理;注意不同中继内容不完全一致,覆盖范围取决于你使用的默认或自定义中继集合。

场景四:低成本环境验证与测试(个人开发者) 痛点:想先试试水,不想马上暴露真实身份。使用方式:generateNewKey() 或 generateRandomNsec() 生成一次性测试密钥,用小号 powDifficulty 试着发一条。实际体验:上手难度低,一个 npm install 加一个函数就能跑通;但测试密钥用完即弃,切勿与主身份混用,且永远不要把 nsec 写进源码。

该技能能为用户带来的价值

  • 效率提升:把「读协议文档 → 写签名与事件构造 → 维护中继池 → 聚合发布结果」压缩为一次函数调用,发帖从半天工作量降到几分钟;回复、私信、拉取动态同理,减少重复造轮子。
  • 门槛降低:无需先精读 NIP 规范,也能完成发帖与加密私信;内置默认中继与自动标签解析,让不熟悉 Nostr 生态的开发者也能快速跑通第一条消息。
  • 隐私可按需升级:同一套技能内提供 NIP-4 与 NIP-17 两条通道,从「基础加密」到「密封发送者 + 临时密钥」平滑升级,安全投入可按业务重要性分配。
  • 可量化收益:发布结果直接给出 published / failed / totalRelays,失败原因落在 errors,排障从「猜」变成「看数据」;监听接口支持 since 增量,避免全量重复拉取造成的浪费。
  • 长期价值:身份自持(私钥在自己手里)、数据走开放协议,账号与内容不依赖单一平台;技能提供的密钥管理与安全实践(环境变量、不入 git、按用途分密钥)也便于团队形成规范。

常见问题 FAQ

Q1:怎么安装这个技能?需要什么前置条件? 先在具备 Node.js 与 npm 的环境里执行 npm install nostr-sdk(技能详情给出的安装方式),准备好 nsec 私钥并放进环境变量(如 NOSTR_NSEC)。随后用 generateNewKey() 与一次 posttoNostr() 做最小验证,返回 success: true 且 published 大于 0 即安装生效。技能平台内的具体安装入口与版本以官方说明为准。

Q2:使用它收费吗? 技能详情未提及任何收费信息,本文不对价格作判断;nostr-sdk 为开源库(来源见技能给出的 GitHub 地址),网络层面依赖各公共中继,中继本身的可用性与规则以各中继官方说明为准。

Q3:NIP-4 和 NIP-17 私信怎么选? 需要兼容旧版客户端、场景不敏感时用 sendmessage()(NIP-4);需要最大隐私、隐藏发送者身份、使用现代加密时用 sendMessageNIP17()(礼物包裹 + 密封发送者 + NIP-44 + 临时密钥)。技能文档明确推荐 NIP-17,接收端则对应 getmessage() 与 getMessageNIP17() 两条监听路径。

Q4:私钥安全怎么保证?会不会泄露? 三条硬规矩:不把 nsec 提交到 git;存放在环境变量或安全保险库;不同用途使用不同密钥,测试用一次性密钥。技能文档还建议避免在代码中硬编码私钥,并在发布失败时通过 result.errors 排查,而不是打印密钥调试。

Q5:适合谁用?和成品客户端、自研方案怎么选? 适合需要把 Nostr 接入自动化流程的开发者与效率工具用户,例如机器人发帖、告警通知、私信客服、内容监控。若只是人工日常发帖阅读,现成客户端更省心;若需要协议级深度定制,可考虑自研;若要在「快速接入 + 可控成本」之间取平衡,本技能是更短的路径。