mostro_client/cli/
get_dm_user.rs

1use crate::{db::Order, util::get_direct_messages_from_trade_keys};
2use anyhow::Result;
3use comfy_table::modifiers::UTF8_ROUND_CORNERS;
4use comfy_table::presets::UTF8_FULL;
5use comfy_table::Table;
6use mostro_core::prelude::*;
7use nostr_sdk::prelude::*;
8
9pub async fn execute_get_dm_user(since: &i64, client: &Client, mostro_pubkey: &PublicKey) -> Result<()> {
10    let pool = crate::db::connect().await?;
11    
12    // Get all trade keys from orders
13    let mut trade_keys_hex = Order::get_all_trade_keys(&pool).await?;
14    
15    // Add admin private key to search for messages sent TO admin
16    if let Ok(admin_privkey_hex) = std::env::var("NSEC_PRIVKEY") {
17        trade_keys_hex.push(admin_privkey_hex);
18    }
19    
20    if trade_keys_hex.is_empty() {
21        println!("No trade keys found in orders and NSEC_PRIVKEY not set");
22        return Ok(());
23    }
24    
25    println!("Searching for DMs in {} trade keys...", trade_keys_hex.len());
26    
27    let direct_messages = get_direct_messages_from_trade_keys(client, trade_keys_hex, *since, mostro_pubkey).await;
28
29    if direct_messages.is_empty() {
30        println!("You don't have any direct messages in your trade keys");
31        return Ok(());
32    }
33
34    let mut table = Table::new();
35    table
36        .load_preset(UTF8_FULL)
37        .apply_modifier(UTF8_ROUND_CORNERS)
38        .set_content_arrangement(comfy_table::ContentArrangement::Dynamic)
39        .set_header(vec!["Time", "From", "Message"]);
40
41    for (message, created_at, sender_pubkey) in direct_messages.iter() {
42        let datetime = chrono::DateTime::from_timestamp(*created_at as i64, 0);
43        let formatted_date = match datetime {
44            Some(dt) => dt.format("%Y-%m-%d %H:%M:%S").to_string(),
45            None => "Invalid timestamp".to_string(),
46        };
47
48        let inner = message.get_inner_message_kind();
49        let message_str = match &inner.payload {
50            Some(Payload::TextMessage(text)) => text.clone(),
51            _ => format!("{:?}", message),
52        };
53
54        let sender_hex = sender_pubkey.to_hex();
55
56        table.add_row(vec![&formatted_date, &sender_hex, &message_str]);
57    }
58
59    println!("{table}");
60    println!();
61    Ok(())
62}