mostro_client/cli/
send_dm.rs

1use crate::{db::Order, util::send_dm};
2use anyhow::Result;
3use mostro_core::prelude::*;
4use nostr_sdk::prelude::*;
5use uuid::Uuid;
6
7pub async fn execute_send_dm(
8    receiver: PublicKey,
9    client: &Client,
10    order_id: &Uuid,
11    message: &str,
12) -> Result<()> {
13    let message = Message::new_dm(
14        None,
15        None,
16        Action::SendDm,
17        Some(Payload::TextMessage(message.to_string())),
18    )
19    .as_json()
20    .map_err(|_| anyhow::anyhow!("Failed to serialize message"))?;
21
22    let pool = crate::db::connect().await?;
23
24    let trade_keys = if let Ok(order_to_vote) = Order::get_by_id(&pool, &order_id.to_string()).await
25    {
26        match order_to_vote.trade_keys.as_ref() {
27            Some(trade_keys) => Keys::parse(trade_keys)?,
28            None => {
29                anyhow::bail!("No trade_keys found for this order");
30            }
31        }
32    } else {
33        println!("order {} not found", order_id);
34        std::process::exit(0)
35    };
36
37    send_dm(client, None, &trade_keys, &receiver, message, None, false).await?;
38
39    Ok(())
40}