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