/** * Prepare the environment by installing a docker container with the Nostr relay server. * docker pull scsibug/nostr-rs-relay * docker run -p 7000:8080 scsibug/nostr-rs-relay * * Install the necessary dependencies by running the following command: * npm install * * Run the script with the following command: node listen.js * This script listens for new messages on the Nostr network. * It connects to a Nostr relay server and subscribes to text notes/messages. * When a new message is received, it prints the message content, sender's public key, and timestamp. * * Test with the send.js script to send a message. * run the send.js script with the following command: node send.js */ import { Relay } from 'nostr-tools/relay' import { verifyEvent } from 'nostr-tools/pure' // If not running in Node.js, comment the following 3 lines: import WebSocket from 'ws' import { useWebSocketImplementation } from 'nostr-tools/relay' useWebSocketImplementation(WebSocket) const RELAY_URL = 'ws://localhost:7000' // Replace with your preferred relay async function listenForMessages() { try { const relay = await Relay.connect(RELAY_URL) console.log(`Connected to ${relay.url}`) const sub = relay.subscribe( [ { kinds: [1], // Listen for text notes/messages since: Math.floor(Date.now() / 1000) // Only get new messages from now on } ], { onevent(event) { if (verifyEvent(event)) { console.log('New message received:') console.log(`From: ${event.pubkey}`) console.log(`Content: ${event.content}`) console.log(`Timestamp: ${new Date(event.created_at * 1000).toLocaleString()}`) console.log('---') } else { console.log('Received an invalid event') } }, oneose() { console.log('Subscription stream ended') }, onerror(error) { console.error('Subscription error:', error) } } ) // Keep the script running process.on('SIGINT', () => { console.log('Closing subscription and relay connection') sub.close() relay.close() process.exit() }) } catch (error) { console.error('Error connecting to relay:', error) } } listenForMessages()