akkounts/app/services/nostr_manager/publish_event.rb
Râu Cao c6c5d80fb4
All checks were successful
continuous-integration/drone/push Build is passing
continuous-integration/drone/pr Build is passing
WIP Persist zaps, create and send zap receipts
2024-05-09 14:31:37 +02:00

51 lines
1.3 KiB
Ruby

module NostrManager
class PublishEvent < NostrManagerService
def initialize(event: nil, relay_url: nil)
relay_name = relay_url.gsub(/^ws(s):\/\//, "")
@relay = Nostr::Relay.new(url: relay_url, name: relay_name)
@event = case event.class
when Nostr::Event
event
when Hash
Nostr::Event.new(**event.symbolize_keys)
# else
# TODO
# raise NotImplementedError
end
@client = Nostr::Client.new
end
def call
client, relay, event = @client, @relay, @event
client.on :connect do
puts "Connected to #{relay.url}"
puts "Publishing #{event.id}..."
client.publish event
end
client.on :error do |e|
# TODO log relay URL/name
puts "Error: #{e}"
puts "Closing thread..."
Thread.exit
end
client.on :message do |m|
puts "Message: #{m}"
msg = JSON.parse(m) rescue []
if msg[0] == "OK" && msg[1] == event.id
puts "Event published. Closing thread..."
else
# TODO log relay URL/name
puts "Unexpected message from relay. Closing thread..."
end
Thread.exit
end
puts "Connecting to #{relay.url}..."
client.connect relay
end
end
end