mostro_client/cli/
send_dm.rs1use crate::cli::Context;
2use crate::parser::common::{
3 create_emoji_field_row, create_field_value_header, create_standard_table,
4};
5use crate::{db::Order, util::send_dm};
6use anyhow::Result;
7use mostro_core::prelude::*;
8use nostr_sdk::prelude::*;
9use uuid::Uuid;
10
11pub async fn execute_send_dm(
12 receiver: PublicKey,
13 ctx: &Context,
14 order_id: &Uuid,
15 message: &str,
16) -> Result<()> {
17 println!("💬 Send Direct Message");
18 println!("═══════════════════════════════════════");
19 let mut table = create_standard_table();
20 table.set_header(create_field_value_header());
21 table.add_row(create_emoji_field_row(
22 "📋 ",
23 "Order ID",
24 &order_id.to_string(),
25 ));
26 table.add_row(create_emoji_field_row(
27 "🎯 ",
28 "Recipient",
29 &receiver.to_string(),
30 ));
31 table.add_row(create_emoji_field_row("💬 ", "Message", message));
32 println!("{table}");
33 println!("💡 Sending direct message...\n");
34
35 let message = Message::new_dm(
36 None,
37 None,
38 Action::SendDm,
39 Some(Payload::TextMessage(message.to_string())),
40 )
41 .as_json()
42 .map_err(|_| anyhow::anyhow!("Failed to serialize message"))?;
43
44 let trade_keys =
45 if let Ok(order_to_vote) = Order::get_by_id(&ctx.pool, &order_id.to_string()).await {
46 match order_to_vote.trade_keys.as_ref() {
47 Some(trade_keys) => Keys::parse(trade_keys)?,
48 None => {
49 anyhow::bail!("No trade_keys found for this order");
50 }
51 }
52 } else {
53 return Err(anyhow::anyhow!("order {} not found", order_id));
54 };
55
56 send_dm(
57 &ctx.client,
58 None,
59 &trade_keys,
60 &receiver,
61 message,
62 None,
63 false,
64 )
65 .await?;
66
67 println!("✅ Direct message sent successfully!");
68
69 Ok(())
70}