31 lines
1.4 KiB
Rust
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}"),
|
|
}
|
|
}
|
|
});
|
|
}
|