26 个版本 (重大更改)
0.20.3 | 2023年1月26日 |
---|---|
0.19.2 | 2023年1月11日 |
0.16.0 | 2022年12月27日 |
0.11.0 | 2022年11月17日 |
#786 in 网页编程
660 每月下载量
用于 gnostr-bins
135KB
2K SLoC
nostr_rust
一个 Rust 编写的,方便使用的 Nostr API 客户端。
示例
[dependencies]
nostr_rust = "*"
然后是代码
use std::{
str::FromStr,
sync::{Arc, Mutex},
thread,
};
use nostr_rust::{nostr_client::Client, req::ReqFilter, Identity, Message, events::extract_events_ws, utils::parse_content_tags};
fn handle_message(relay_url: &String, message: &Message) -> Result<(), String> {
println!("Received message from {}: {:?}", relay_url, message);
let events = extract_events_ws(message);
println!("Events: {:?}", events);
Ok(())
}
fn main() {
let my_identity =
Identity::from_str("your private key as hex string")
.unwrap();
let nostr_client = Arc::new(Mutex::new(
Client::new(vec!["wss://relay.nostr.info"]).unwrap(),
));
// Run a new thread to handle messages
let nostr_clone = nostr_client.clone();
let handle_thread = thread::spawn(move || {
println!("Listening...");
let events = nostr_clone.lock().unwrap().next_data().unwrap();
for (relay_url, message) in events.iter() {
handle_message(relay_url, message).unwrap();
}
});
// Change metadata
nostr_client
.lock()
.unwrap()
.set_metadata(
&my_identity,
Some("Rust Nostr Client test account"),
Some("Hello Nostr! #5"),
None,
None,
0,
)
.unwrap();
// Subscribe to my last text note
let subscription_id = nostr_client
.lock()
.unwrap()
.subscribe(vec![ReqFilter {
ids: None,
authors: Some(vec![
"884704bd421721e292edbff42eb77547fe115c6ff9825b08fc366be4cd69e9f6".to_string(),
]),
kinds: None,
e: None,
p: None,
since: None,
until: None,
limit: Some(1),
}])
.unwrap();
// Unsubscribe
nostr_client
.lock()
.unwrap()
.unsubscribe(&subscription_id)
.unwrap();
// You can use the parse content tags method to get the content and the tags from a string
// let tags = parse_content_tags("hello #world", vec![], Some(nostr_rust::DEFAULT_HASHTAG), true, true);
// assert_eq!(tags.content, "hello #world");
// assert_eq!(tags.tags, vec![vec!["t", "world"]]);
// Publish a text note
nostr_client
.lock()
.unwrap()
.publish_text_note(&my_identity, "Hello Nostr! :)", &[], 0)
.unwrap();
// Publish a proof of work text note with a difficulty target of 15
nostr_client
.lock()
.unwrap()
.publish_text_note(&my_identity, "Hello Nostr! :)", &[], 15)
.unwrap();
// Wait for the thread to finish
handle_thread.join().unwrap();
}
## Async feature
If you want to use the async version of the client, you can enable the `async` feature:
```toml
[dependencies]
nostr_rust = { version = "*", features = ["async"] }
支持的 NIP
NIP | 支持 | 客户端版本 | 描述 |
---|---|---|---|
01 | ✅ | 0.1.0 | 基本协议流程描述 |
02 | ✅ | 0.3.0 | 联系人和昵称列表 |
03 | ❌ | 不支持 | 事件 OpenTimestamps 认证 |
04 | ✅ | 0.6.0 | 加密直接消息 |
05 | ✅ | 0.15.0 | Nostr 密钥映射到基于 DNS 的互联网标识符 |
06 | ❌ | 不支持 | 从助记词种子短语派生基本密钥 |
07 | 不关心 | 不支持 | web 浏览器 window.nostr 功能 |
08 | 不关心 | 不支持 | 处理提及 |
09 | ✅ | 0.5.0 | 事件删除 |
10 | 不关心 | 不支持 | 文本事件中客户端使用 e 和 p 标签的约定。 |
11 | ✅ | 0.9.0 | 中继信息文档 |
12 | ❌ | 不支持 | 通用标签查询 |
13 | ✅ | 0.8.0 | 工作量证明 |
14 | 不关心 | 不支持 | 文本事件中的主题标签。 |
15 | ❌ | 不支持 | 存储事件结束通知 |
16 | ✅ | 0.13.0 | 事件处理 |
22 | ❌ | 不支持 | 事件 created_at 限制 |
25 | ✅ | 0.4.0 | 反应 |
28 | ❌ | 不支持 | 公开聊天 |
许可证
许可协议:MIT 许可证 (LICENSE-MIT 或 http://opensource.org/licenses/MIT)
依赖关系
~18–34MB
~556K SLoC