mostro_client/cli/
get_dm_user.rs1use 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 let mut trade_keys_hex = Order::get_all_trade_keys(&pool).await?;
14
15 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}