mostro_client/cli/
get_dm.rs

1use anyhow::Result;
2use mostro_core::prelude::Message;
3use nostr_sdk::prelude::*;
4
5use crate::{
6    cli::Context,
7    parser::dms::print_direct_messages,
8    util::{fetch_events_list, Event, ListKind},
9};
10
11pub async fn execute_get_dm(
12    since: &i64,
13    admin: bool,
14    from_user: &bool,
15    ctx: &Context,
16) -> Result<()> {
17    // Get the list kind
18    let list_kind = match (admin, from_user) {
19        (true, true) => ListKind::PrivateDirectMessagesUser,
20        (true, false) => ListKind::DirectMessagesAdmin,
21        (false, true) => ListKind::PrivateDirectMessagesUser,
22        (false, false) => ListKind::DirectMessagesUser,
23    };
24
25    // Fetch the requested events
26    let all_fetched_events =
27        fetch_events_list(list_kind, None, None, None, ctx, Some(since)).await?;
28
29    // Extract (Message, u64) tuples from Event::MessageTuple variants
30    let mut dm_events: Vec<(Message, u64, PublicKey)> = Vec::new();
31    for event in all_fetched_events {
32        if let Event::MessageTuple(tuple) = event {
33            dm_events.push(*tuple);
34        }
35    }
36
37    print_direct_messages(&dm_events, &ctx.pool).await?;
38    Ok(())
39}