nostr-oer-client/listen.js
2024-08-12 19:38:09 +02:00

75 lines
2.3 KiB
JavaScript

/**
* 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()