diff --git a/src/cli/repo/announce.rs b/src/cli/repo/announce.rs index 3aa4007..e06aa53 100644 --- a/src/cli/repo/announce.rs +++ b/src/cli/repo/announce.rs @@ -15,12 +15,7 @@ // along with this program. If not, see . use clap::Args; -use nostr::{ - event::EventBuilder, - key::PublicKey, - nips::nip65::{self, RelayMetadata}, - types::Url, -}; +use nostr::{event::EventBuilder, key::PublicKey, types::Url}; use crate::{ cli::{CliOptions, CommandRunner}, @@ -60,17 +55,10 @@ impl CommandRunner for AnnounceArgs { let client = NostrClient::init(&options).await; let user_pubk = options.pubkey().await?; let relays_list = client.user_relays_list(user_pubk).await?; - let mut write_relays = options.relays.clone(); + let write_relays = utils::add_write_relays(options.relays.clone(), relays_list.as_ref()); let mut maintainers = vec![user_pubk]; maintainers.extend(self.maintainers); - if let Some(event) = relays_list.clone() { - write_relays.extend( - nip65::extract_owned_relay_list(event) - .filter_map(|(r, m)| m.is_none_or(|m| m == RelayMetadata::Write).then_some(r)), - ); - } - let event = EventBuilder::new_git_repo( self.repo_id, self.name.map(utils::str_trim), diff --git a/src/nostr_utils/utils.rs b/src/nostr_utils/utils.rs index 1de291d..fde3762 100644 --- a/src/nostr_utils/utils.rs +++ b/src/nostr_utils/utils.rs @@ -24,6 +24,7 @@ use nostr::{ nip01::Coordinate, nip19::{Nip19Coordinate, Nip19Event, ToBech32}, nip34::GitRepositoryAnnouncement, + nip65::{self, RelayMetadata}, }, types::RelayUrl, }; @@ -120,3 +121,14 @@ pub fn repo_naddr(pubk: PublicKey, relays: &[RelayUrl]) -> N34Result { .to_bech32() .map_err(N34Error::from) } + +/// Extends the given vector with write relays found in the event (if any). +pub fn add_write_relays(mut vector: Vec, event: Option<&Event>) -> Vec { + if let Some(event) = event { + vector.extend( + nip65::extract_owned_relay_list(event.clone()) + .filter_map(|(r, m)| m.is_none_or(|m| m == RelayMetadata::Write).then_some(r)), + ); + } + vector +}