akkounts/app/services/nostr_manager/publish_event.rb
2024-04-21 10:51:41 +02:00

49 lines
1.3 KiB
Ruby

module NostrManager
class PublishEvent < NostrManagerService
def initialize(event: nil, relay: nil)
# @relay = relay
@relay = Nostr::Relay.new(url: 'ws://nostr-relay:7777', name: 'strfry')
keypair = Nostr::KeyPair.new(
private_key: Nostr::PrivateKey.new(Setting.nostr_private_key),
public_key: Nostr::PublicKey.new(Setting.nostr_public_key)
)
@user = Nostr::User.new(keypair: keypair)
@event = @user.create_event(
kind: Nostr::EventKind::TEXT_NOTE,
content: "The time is #{Time.now.strftime('%H:%M:%S')}"
)
@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|
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
puts "Unexpected message from relay. Closing thread..."
end
Thread.exit
end
puts "Connecting to #{relay.url}..."
client.connect relay
end
end
end