1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
use anyhow::Result;
use mostro_core::message::{Content, Message};
use nostr_sdk::prelude::*;

use crate::util::get_direct_messages;

pub async fn execute_get_dm(
    since: &i64,
    my_key: &Keys,
    mostro_key: PublicKey,
    client: &Client,
) -> Result<()> {
    let dm = get_direct_messages(client, mostro_key, my_key, *since).await;
    if dm.is_empty() {
        println!();
        println!("No new messages from Mostro");
        println!();
    } else {
        for el in dm.iter() {
            match Message::from_json(&el.0) {
                Ok(m) => {
                    if m.get_inner_message_kind().id.is_some() {
                        println!(
                            "Mostro sent you this message for order id: {} at {}",
                            m.get_inner_message_kind().id.unwrap(),
                            el.1
                        );
                    }
                    if let Some(Content::PaymentRequest(_, inv, _)) =
                        &m.get_inner_message_kind().content
                    {
                        println!();
                        println!("Pay this invoice to continue --> {}", inv);
                        println!();
                    } else if let Some(Content::TextMessage(text)) =
                        &m.get_inner_message_kind().content
                    {
                        println!();
                        println!("{text}");
                        println!();
                    } else {
                        println!();
                        println!("Action: {}", m.get_inner_message_kind().action);
                        println!("Content: {:#?}", m.get_inner_message_kind().content);
                        println!();
                    }
                }
                Err(_) => {
                    println!("Mostro sent you this message:");
                    println!();
                    println!("{}", el.0);
                    println!();
                }
            }
        }
    }
    Ok(())
}