WIP fetch relays and profile with ruby
This commit is contained in:
parent
a08a4746f7
commit
5283f6fce7
38
app/services/nostr_manager/discover_user_profile.rb
Normal file
38
app/services/nostr_manager/discover_user_profile.rb
Normal file
@ -0,0 +1,38 @@
|
|||||||
|
module NostrManager
|
||||||
|
class DiscoverUserProfile < NostrManagerService
|
||||||
|
MAX_EVENTS = 3
|
||||||
|
|
||||||
|
def initialize(pubkey:)
|
||||||
|
@pubkey = pubkey
|
||||||
|
@relays = Setting.nostr_discovery_relays
|
||||||
|
end
|
||||||
|
|
||||||
|
def call
|
||||||
|
received_events = 0
|
||||||
|
profile_events = []
|
||||||
|
filter = Nostr::Filter.new(
|
||||||
|
authors: [@pubkey],
|
||||||
|
kinds: [0],
|
||||||
|
limit: 1,
|
||||||
|
)
|
||||||
|
|
||||||
|
@relays.each do |url|
|
||||||
|
event = NostrManager::FetchLatestEvent.call(filter: filter, relay_url: url)
|
||||||
|
|
||||||
|
if event.present?
|
||||||
|
profile_events << event if profile_events.none? { |e| e["id"] == event["id"] }
|
||||||
|
received_events += 1
|
||||||
|
end
|
||||||
|
|
||||||
|
if received_events >= MAX_EVENTS
|
||||||
|
puts "Found #{MAX_EVENTS} events, ending the search"
|
||||||
|
break
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
latest_event = profile_events.min_by { |e| e["created_at"] }
|
||||||
|
|
||||||
|
puts latest_event.inspect
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
@ -1,17 +1,14 @@
|
|||||||
module NostrManager
|
module NostrManager
|
||||||
class DiscoverUserRelays < NostrManagerService
|
class DiscoverUserRelays < NostrManagerService
|
||||||
|
MAX_EVENTS = 3
|
||||||
|
|
||||||
def initialize(pubkey:)
|
def initialize(pubkey:)
|
||||||
@pubkey = pubkey
|
@pubkey = pubkey
|
||||||
@relays = Setting.nostr_discovery_relays
|
@relays = Setting.nostr_discovery_relays
|
||||||
# @relays = %w[
|
|
||||||
# wss://nostr.kosmos.org
|
|
||||||
# wss://purplepag.es
|
|
||||||
# wss://relay.nostr.band
|
|
||||||
# wss://njump.me
|
|
||||||
# ]
|
|
||||||
end
|
end
|
||||||
|
|
||||||
def call
|
def call
|
||||||
|
received_events = 0
|
||||||
nip65_events = []
|
nip65_events = []
|
||||||
user_relays = []
|
user_relays = []
|
||||||
filter = Nostr::Filter.new(
|
filter = Nostr::Filter.new(
|
||||||
@ -22,12 +19,23 @@ module NostrManager
|
|||||||
|
|
||||||
@relays.each do |url|
|
@relays.each do |url|
|
||||||
event = NostrManager::FetchLatestEvent.call(filter: filter, relay_url: url)
|
event = NostrManager::FetchLatestEvent.call(filter: filter, relay_url: url)
|
||||||
if event.present? && user_relays.detect { |r| r[:id] == event["id"] }.nil?
|
|
||||||
user_relays << { id: event["id"], created_at: event["created_at"] }
|
if event.present?
|
||||||
|
nip65_events << event if nip65_events.none? { |e| e["id"] == event["id"] }
|
||||||
|
received_events += 1
|
||||||
|
end
|
||||||
|
|
||||||
|
if received_events >= MAX_EVENTS
|
||||||
|
puts "Found #{MAX_EVENTS} events, ending the search"
|
||||||
|
break
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
puts user_relays.inspect
|
latest_event = nip65_events.min_by { |e| e["created_at"] }
|
||||||
|
tags = latest_event["tags"]
|
||||||
|
|
||||||
|
# puts latest_event.inspect
|
||||||
|
puts tags.select{ |t| t[0] == "r" }.inspect
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
@ -3,6 +3,7 @@ require "nostr"
|
|||||||
class NostrManagerService < ApplicationService
|
class NostrManagerService < ApplicationService
|
||||||
def parse_tags(tags)
|
def parse_tags(tags)
|
||||||
out = {}
|
out = {}
|
||||||
|
# TODO support more than 1 item for each tag type
|
||||||
tags.each do |tag|
|
tags.each do |tag|
|
||||||
out[tag[0].to_sym] = tag[1, tag.length]
|
out[tag[0].to_sym] = tag[1, tag.length]
|
||||||
end
|
end
|
||||||
|
1
vendor/gems/nostr
vendored
Submodule
1
vendor/gems/nostr
vendored
Submodule
@ -0,0 +1 @@
|
|||||||
|
Subproject commit 44e7454990cffc66167254db9703fda642799588
|
Loading…
x
Reference in New Issue
Block a user