WIP fetch relays and profile with ruby

This commit is contained in:
Râu Cao 2024-10-16 13:32:15 +02:00
parent a08a4746f7
commit 5283f6fce7
Signed by: raucao
GPG Key ID: 37036C356E56CC51
4 changed files with 57 additions and 9 deletions

View 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

View File

@ -1,17 +1,14 @@
module NostrManager
class DiscoverUserRelays < NostrManagerService
MAX_EVENTS = 3
def initialize(pubkey:)
@pubkey = pubkey
@relays = Setting.nostr_discovery_relays
# @relays = %w[
# wss://nostr.kosmos.org
# wss://purplepag.es
# wss://relay.nostr.band
# wss://njump.me
# ]
end
def call
received_events = 0
nip65_events = []
user_relays = []
filter = Nostr::Filter.new(
@ -22,12 +19,23 @@ module NostrManager
@relays.each do |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
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

View File

@ -3,6 +3,7 @@ require "nostr"
class NostrManagerService < ApplicationService
def parse_tags(tags)
out = {}
# TODO support more than 1 item for each tag type
tags.each do |tag|
out[tag[0].to_sym] = tag[1, tag.length]
end

1
vendor/gems/nostr vendored Submodule

@ -0,0 +1 @@
Subproject commit 44e7454990cffc66167254db9703fda642799588