Files
sunstone/crates/sunstone-core/examples/groups_probe.rs
T

31 lines
1.4 KiB
Rust

//! Probe NIP-29 group discovery + chat against public group relays.
use sunstone_core::nostr_sdk::prelude::*;
use sunstone_core::settings::Settings;
use sunstone_core::Core;
fn main() {
let core = Core::new(Keys::generate(), Settings::default()).expect("core");
let rt = tokio::runtime::Runtime::new().unwrap();
rt.block_on(async {
for relay in ["wss://groups.0xchat.com", "wss://relay.groups.nip29.com"] {
match core.discover_groups(relay).await {
Ok(groups) => {
println!("{relay}: {} groups", groups.len());
for g in groups.iter().take(3) {
println!("- [{}] {} (open: {}, public: {})", g.id, g.name, g.is_open, g.is_public);
}
if let Some(g) = groups.iter().find(|g| g.is_public) {
match core.group_messages(relay, &g.id).await {
Ok(msgs) => println!(" chat '{}': {} messages, last: {:?}",
g.name, msgs.len(),
msgs.last().map(|m| format!("{}: {}", m.author_name, m.event.content.chars().take(40).collect::<String>()))),
Err(e) => println!(" chat error: {e}"),
}
}
}
Err(e) => println!("{relay}: ERROR {e}"),
}
}
});
}