From 35e7bb0db1535f78763011858102900bfb47e097 Mon Sep 17 00:00:00 2001 From: bouzuya Date: Thu, 23 Feb 2023 22:28:45 +0900 Subject: [PATCH] nostrs: Add metadata subcommand --- nostrs/Cargo.lock | 1 + nostrs/Cargo.toml | 1 + nostrs/src/handler.rs | 1 + nostrs/src/handler/metadata.rs | 29 +++++++++++++++++++++++++++++ nostrs/src/main.rs | 2 ++ 5 files changed, 34 insertions(+) create mode 100644 nostrs/src/handler/metadata.rs diff --git a/nostrs/Cargo.lock b/nostrs/Cargo.lock index b9245d08..c4aa89e7 100644 --- a/nostrs/Cargo.lock +++ b/nostrs/Cargo.lock @@ -675,6 +675,7 @@ dependencies = [ "anyhow", "clap", "nostr-sdk", + "serde_json", "tokio", ] diff --git a/nostrs/Cargo.toml b/nostrs/Cargo.toml index b680b196..1e7ff394 100644 --- a/nostrs/Cargo.toml +++ b/nostrs/Cargo.toml @@ -9,4 +9,5 @@ edition = "2021" anyhow = "1.0.69" clap = { version = "4.1.6", features = ["derive"] } nostr-sdk = "0.18" +serde_json = "1.0.93" tokio = { version = "1.25.0", features = ["full"] } diff --git a/nostrs/src/handler.rs b/nostrs/src/handler.rs index 374271b1..b36851dc 100644 --- a/nostrs/src/handler.rs +++ b/nostrs/src/handler.rs @@ -1 +1,2 @@ +pub mod metadata; pub mod timeline; diff --git a/nostrs/src/handler/metadata.rs b/nostrs/src/handler/metadata.rs new file mode 100644 index 00000000..6bab066b --- /dev/null +++ b/nostrs/src/handler/metadata.rs @@ -0,0 +1,29 @@ +use std::{env, time::Duration}; + +use anyhow::Context; +use nostr_sdk::{ + prelude::{FromSkStr, Keys, Kind, SubscriptionFilter}, + Client, +}; +use serde_json::Value; + +pub async fn handle() -> anyhow::Result<()> { + let my_keys = Keys::from_sk_str(env::var("SECRET_KEY")?.as_str())?; + + let client = Client::new(&my_keys); + client + .add_relay("wss://nostr-pub.wellorder.net", None) + .await?; + client.connect().await; + + let filter = SubscriptionFilter::new() + .kind(Kind::Metadata) + .author(my_keys.public_key()) + .limit(1); + let timeout = Duration::from_secs(10); + let events = client.get_events_of(vec![filter], Some(timeout)).await?; + let event = events.first().context("metadata not found")?; + let metadata: Value = serde_json::from_str(event.content.as_str())?; + println!("{}", serde_json::to_string_pretty(&metadata)?); + Ok(()) +} diff --git a/nostrs/src/main.rs b/nostrs/src/main.rs index 89a4178d..b58aee46 100644 --- a/nostrs/src/main.rs +++ b/nostrs/src/main.rs @@ -9,6 +9,7 @@ struct Command { #[derive(clap::Subcommand)] enum Subcommand { + Metadata, Timeline, } @@ -16,6 +17,7 @@ enum Subcommand { async fn main() -> anyhow::Result<()> { let command = ::parse(); match command.subcommand { + Subcommand::Metadata => handler::metadata::handle().await, Subcommand::Timeline => handler::timeline::handle().await, } }