mostro_client/cli/
get_dm_user.rs1use crate::cli::Context;
2use crate::{db::Order, util::get_direct_messages_from_trade_keys};
3use anyhow::Result;
4use comfy_table::modifiers::UTF8_ROUND_CORNERS;
5use comfy_table::presets::UTF8_FULL;
6use comfy_table::Table;
7use mostro_core::prelude::*;
8
9pub async fn execute_get_dm_user(since: &i64, ctx: &Context) -> Result<()> {
10 let mut trade_keys_hex = Order::get_all_trade_keys(&ctx.pool).await?;
12
13 let admin_pubkey_hex = ctx.mostro_pubkey.to_hex();
15 if !trade_keys_hex.iter().any(|k| k == &admin_pubkey_hex) {
16 trade_keys_hex.push(admin_pubkey_hex);
17 }
18 trade_keys_hex.sort();
20 trade_keys_hex.dedup();
21
22 if trade_keys_hex.is_empty() {
23 println!("No trade keys found in orders");
24 return Ok(());
25 }
26
27 println!(
28 "Searching for DMs in {} trade keys...",
29 trade_keys_hex.len()
30 );
31
32 let direct_messages = get_direct_messages_from_trade_keys(
33 &ctx.client,
34 trade_keys_hex,
35 *since,
36 &ctx.mostro_pubkey,
37 )
38 .await?;
39
40 if direct_messages.is_empty() {
41 println!("You don't have any direct messages in your trade keys");
42 return Ok(());
43 }
44
45 let mut table = Table::new();
46 table
47 .load_preset(UTF8_FULL)
48 .apply_modifier(UTF8_ROUND_CORNERS)
49 .set_content_arrangement(comfy_table::ContentArrangement::Dynamic)
50 .set_header(vec!["Time", "From", "Message"]);
51
52 for (message, created_at, sender_pubkey) in direct_messages.iter() {
53 let datetime = chrono::DateTime::from_timestamp(*created_at as i64, 0);
54 let formatted_date = match datetime {
55 Some(dt) => dt.format("%Y-%m-%d %H:%M:%S").to_string(),
56 None => "Invalid timestamp".to_string(),
57 };
58
59 let inner = message.get_inner_message_kind();
60 let message_str = match &inner.payload {
61 Some(Payload::TextMessage(text)) => text.clone(),
62 _ => format!("{:?}", message),
63 };
64
65 let sender_hex = sender_pubkey.to_hex();
66
67 table.add_row(vec![&formatted_date, &sender_hex, &message_str]);
68 }
69
70 println!("{table}");
71 println!();
72 Ok(())
73}