mostro_client/cli/
send_dm.rs

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