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}