mostro_client/cli/
get_dm.rs1use anyhow::Result;
2use mostro_core::prelude::Message;
3use nostr_sdk::prelude::*;
4
5use crate::{
6 cli::Context,
7 parser::common::{print_key_value, print_section_header},
8 parser::dms::print_direct_messages,
9 util::{fetch_events_list, Event, ListKind},
10};
11
12pub async fn execute_get_dm(
13 since: &i64,
14 admin: bool,
15 from_user: &bool,
16 ctx: &Context,
17) -> Result<()> {
18 print_section_header("📨 Fetch Direct Messages");
19 print_key_value("👤", "Admin Mode", if admin { "Yes" } else { "No" });
20 print_key_value("📤", "From User", if *from_user { "Yes" } else { "No" });
21 print_key_value("⏰", "Since", &format!("{} minutes ago", since));
22 print_key_value("💡", "Action", "Fetching direct messages...");
23 println!();
24
25 let list_kind = match (admin, from_user) {
27 (true, true) => ListKind::PrivateDirectMessagesUser,
28 (true, false) => ListKind::DirectMessagesAdmin,
29 (false, true) => ListKind::PrivateDirectMessagesUser,
30 (false, false) => ListKind::DirectMessagesUser,
31 };
32
33 let all_fetched_events =
35 fetch_events_list(list_kind, None, None, None, ctx, Some(since)).await?;
36
37 let mut dm_events: Vec<(Message, u64, PublicKey)> = Vec::new();
39 for event in all_fetched_events {
40 if let Event::MessageTuple(tuple) = event {
41 dm_events.push(*tuple);
42 }
43 }
44
45 print_direct_messages(&dm_events, Some(ctx.mostro_pubkey)).await?;
46 Ok(())
47}