gnostr_crawler/
processor.rs

1use crate::pubkeys::PubKeys;
2use crate::stats::Stats;
3//use log::{debug, info};
4
5use nostr_sdk::prelude::{Event, Kind, Tag, Timestamp};
6use std::sync::LazyLock;
7
8pub const LOCALHOST_8080: &str = "ws://127.0.0.1:8080";
9
10pub const BOOTSTRAP_RELAY0: &str = "wss://relay.nostr.band";
11pub const BOOTSTRAP_RELAY1: &str = "wss://nostr.wine";
12pub const BOOTSTRAP_RELAY2: &str = "wss://relay.damus.io";
13
14
15pub static BOOTSTRAP_RELAYS: LazyLock<Vec<String>> = LazyLock::new(|| {
16    // The vec! macro and String::from calls are now inside a closure,
17    // which is executed at runtime when the static variable is first needed.
18    vec![
19        String::from(BOOTSTRAP_RELAY0),
20        String::from(BOOTSTRAP_RELAY1),
21        String::from(BOOTSTRAP_RELAY2),
22    ]
23});
24
25//pub const APP_SECRET_KEY: &str = "nsec1ufnus6pju578ste3v90xd5m2decpuzpql2295m3sknqcjzyys9ls0qlc85";
26pub const APP_SECRET_KEY: &str = "nsec1uwcvgs5clswpfxhm7nyfjmaeysn6us0yvjdexn9yjkv3k7zjhp2sv7rt36";
27pub struct Processor {
28    pubkeys: PubKeys,
29    stats: Stats,
30}
31
32impl Default for Processor {
33    fn default() -> Self {
34        Self::new()
35    }
36}
37
38impl Processor {
39    pub fn new() -> Self {
40        Self {
41            pubkeys: PubKeys::new(),
42            stats: Stats::new(),
43        }
44    }
45
46    #[allow(dead_code)]
47    fn age(t: Timestamp) -> i64 {
48        Timestamp::now().as_i64() - t.as_i64()
49    }
50
51    pub fn handle_event(&mut self, event: &Event) {
52        //TODO: forward (proxy)
53        //println!("{:?}", event.id);
54        //println!("{:}", event.as_json());
55        //println!("age {:?}  created_at {:?}", Self::age(event.created_at), event.created_at);
56        match event.kind {
57            //Kind::Metadata => {
58            //    println!("{:?}", event.kind);
59            //}
60            //Kind::TextNote => {
61            //    println!("{:?}", event.kind);
62            //}
63            //Kind::EncryptedDirectMessage => {
64            //    println!("{:?}", event.kind);
65            //}
66            //Kind::EventDeletion => {
67            //    println!("{:?}", event.kind);
68            //}
69            //Kind::Repost => {
70            //    println!("{:?}", event.kind);
71            //}
72            //Kind::Reaction => {
73            //    println!("{:?}", event.kind);
74            //}
75            //Kind::ChannelCreation => {
76            //    println!("{:?}", event.kind);
77            //}
78            //Kind::ChannelMetadata => {
79            //    println!("{:?}", event.kind);
80            //}
81            //Kind::ChannelMessage => {
82            //    println!("{:?}", event.kind);
83            //}
84            //Kind::ChannelHideMessage => {
85            //    println!("{:?}", event.kind);
86            //}
87            //Kind::ChannelMuteUser => {
88            //    println!("{:?}", event.kind);
89            //}
90            //Kind::PublicChatReserved45 => {
91            //    println!("{:?}", event.kind);
92            //}
93            //Kind::PublicChatReserved46 => {
94            //    println!("{:?}", event.kind);
95            //}
96            //Kind::PublicChatReserved47 => {
97            //    println!("{:?}", event.kind);
98            //}
99            //Kind::PublicChatReserved48 => {
100            //    println!("{:?}", event.kind);
101            //}
102            //Kind::PublicChatReserved49 => {
103            //    println!("{:?}", event.kind);
104            //}
105            //Kind::Reporting => {
106            //    println!("{:?}", event.kind);
107            //}
108            //Kind::ZapRequest => {
109            //    println!("{:?}", event.kind);
110            //}
111            //Kind::Zap => {
112            //    println!("{:?}", event.kind);
113            //}
114            //Kind::Authentication => {
115            //    println!("{:?}", event.kind);
116            //}
117            //Kind::NostrConnect => {
118            //    println!("{:?}", event.kind);
119            //}
120            //Kind::RelayList => {
121            //    println!("{:?}", event.kind);
122            //}
123            //Kind::Replaceable(u16) => {
124            //    println!("{:?}", event.kind);
125            //}
126            //Kind::Ephemeral(u16) => {
127            //    println!("{:?}", event.kind);
128            //}
129            //Kind::ParameterizedReplaceable(u16) => {
130            //    println!("{:?}", event.kind);
131            //}
132            //Kind::Custom(u64) => {
133            //    println!("{:?}", event.kind);
134            //}
135            Kind::ContactList => {
136                self.stats.add_contacts();
137                // count p tags
138                //let mut cnt = 0;
139                for t in &event.tags {
140                    if let Tag::PubKey(pk, _s) = t {
141                        self.pubkeys.add(pk);
142                        //cnt += 1;
143                    }
144                }
145                //println!("Contacts {} \t ", cnt); // event.pubkey.to_bech32().unwrap(),
146                // self.print_summary();
147
148                //println!("{:?}", event);
149            }
150            Kind::RecommendRelay => {
151                self.stats.add_relays();
152                //println!("{:?}", event);
153            }
154            _ => {
155                //println!("{:?}", event.kind)
156                println!("processing...")
157            }
158        }
159    }
160
161    // fn print_summary(&self) {
162    //     print!("pks {} \t ", self.pubkeys.count());
163    //     self.stats.print_summary();
164    // }
165
166    pub fn dump(&self) {
167        //println!();
168        //println!(
169        //    "Number of ContactList events:      \t {}",
170        //    self.stats.count_contacts
171        //);
172        //println!(
173        //    "Number of RecommendedRelay events: \t {}",
174        //    self.stats.count_relays
175        //);
176        //println!();
177        //self.pubkeys.dump();
178    }
179}