mostro_client/cli/
get_dm_user.rs1use crate::cli::Context;
2use crate::db::Order;
3use crate::parser::common::{
4 print_info_line, print_key_value, print_no_data_message, print_section_header,
5};
6use crate::parser::dms::print_direct_messages;
7use crate::util::{fetch_events_list, Event, ListKind};
8use anyhow::Result;
9use mostro_core::prelude::*;
10use nostr_sdk::prelude::*;
11
12pub async fn execute_get_dm_user(since: &i64, ctx: &Context) -> Result<()> {
13 let mut trade_keys_hex = Order::get_all_trade_keys(&ctx.pool).await?;
15
16 let admin_pubkey_hex = ctx.mostro_pubkey.to_hex();
18 if !trade_keys_hex.iter().any(|k| k == &admin_pubkey_hex) {
19 trade_keys_hex.push(admin_pubkey_hex);
20 }
21 trade_keys_hex.sort();
23 trade_keys_hex.dedup();
24
25 if trade_keys_hex.is_empty() {
27 print_no_data_message("No trade keys found in orders");
28 return Ok(());
29 }
30
31 print_section_header("📨 Fetch User Direct Messages");
32 print_key_value(
33 "🔍",
34 "Searching for DMs in trade keys",
35 &format!("{}", trade_keys_hex.len()),
36 );
37 print_key_value("⏰", "Since", &format!("{} minutes ago", since));
38 print_info_line("💡", "Fetching direct messages...");
39 println!();
40
41 let direct_messages = fetch_events_list(
42 ListKind::DirectMessagesUser,
43 None,
44 None,
45 None,
46 ctx,
47 Some(since),
48 )
49 .await?;
50
51 let mut dm_events: Vec<(Message, u64, PublicKey)> = Vec::new();
53 if direct_messages.is_empty() {
55 print_no_data_message("You don't have any direct messages in your trade keys");
56 return Ok(());
57 }
58 for event in direct_messages {
60 if let Event::MessageTuple(tuple) = event {
61 dm_events.push(*tuple);
62 }
63 }
64
65 print_direct_messages(&dm_events, Some(ctx.mostro_pubkey)).await?;
66 Ok(())
67}