pubky-messenger 0.3.0

A Rust library for private messaging using Pubky
Documentation
use anyhow::Result;
use pubky_messenger::{PrivateMessengerClient, PublicKey};
use std::env;
use std::io::{self, Write};

#[tokio::main]
async fn main() -> Result<()> {
    let args: Vec<String> = env::args().collect();
    if args.len() < 4 {
        eprintln!(
            "Usage: {} <recovery_file_path> <recipient_pubky> <message>",
            args[0]
        );
        eprintln!("Example: {} recovery.pkarr pk:q9x5sfjbpajdebk45b9jashgb86iem7rnwpmu16px3ens63xzwro \"Hello there!\"", args[0]);
        std::process::exit(1);
    }

    let recovery_file_path = &args[1];
    let recipient_pubky_str = &args[2];
    let message_content = &args[3];

    print!("Enter passphrase: ");
    io::stdout().flush()?;
    let passphrase = rpassword::read_password()?;

    println!("Loading recovery file...");
    let recovery_file_bytes = std::fs::read(recovery_file_path)?;

    println!("Creating client...");
    let client = PrivateMessengerClient::from_recovery_file(&recovery_file_bytes, Some(&passphrase))?;

    println!("Your public key: {}", client.public_key_string());

    println!("Signing in to Pubky...");
    client.sign_in().await?;
    println!("Signed in successfully!");

    let recipient = PublicKey::try_from(recipient_pubky_str.as_str())?;
    println!("\nSending message to {}...", recipient_pubky_str);

    let message_id = client.send_message(&recipient, message_content).await?;
    println!("✓ Message sent successfully!");
    println!("Message ID: {}", message_id);
    println!("Content: {}", message_content);
    println!(
        "Timestamp: {}",
        chrono::Local::now().format("%Y-%m-%d %H:%M:%S")
    );

    Ok(())
}