51 lines
1.3 KiB
Ruby
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
|