Как написать простого бота для Nostr

Согласно этому сайту, Nostr — отличный протокол:

Nostr — это простой открытый протокол, который позволяет использовать глобальные, децентрализованные и устойчивые к цензуре социальные сети.

Протокол выглядит следующим образом:

Существуют клиенты и реле, клиенты управляются пользователями, и любой может запустить реле. Пользователи идентифицируются открытым ключом, и каждое событие подписывается. Клиенты извлекают или отправляют данные реле. Реле не общаются друг с другом, только с клиентами.

В этой статье я собираюсь показать вам, как получать и отправлять данные на реле, но сначала вам понадобится пара ключей.

Создание ключей Nostr

Предполагая, что вы уже установили nodejs, давайте установим пакет nostr-tools:

npm install nostr-tools

Код следующий:

import {generatePrivateKey, getPublicKey} from 'nostr-tools'
let sk = generatePrivateKey() // `sk` is a hex string
let pk = getPublicKey(sk) // `pk` is a hex string
console.log("sk: "+sk)
console.log("pk: "+pk)

Если вы сохраните код как keys_gen.js, вы можете запустить код как:

node keys_gen.js

что-то вроде этого покажет:

sk: 1b74b7d9fbc3404ebbc0889bd171ffb5ffd50820859f459c3cc69c640ae4b57d
pk: d44a780506d239b5b2f2107490e98ef50da11ca71af8ab69848b6d677bd3ead2

Первая строка — это секретный ключ (SK), а вторая — открытый ключ (PK).

Получение данных от реле Nostr

Теперь, когда у нас есть ключи, давайте извлечем данные, отправленные конкретным ПК или пользователем.

const WebSocket = require('ws');
// connect to a relay
var ws = new WebSocket("wss://nostr-pub.wellorder.net");
// send a subscription request for text notes from authors with my pubkey
ws.addEventListener('open', function (event) {
 ws.send('["REQ", "my-sub", {"kinds":[1], "authors":["bac24cb2cc510b9ca611dd8ee2f94a1c51192fc25a4a7bf59293d8da77c73766"]}]');
});
// print out all the returned notes
ws.addEventListener('message', function (event) {
 if (JSON.parse(event.data)[2]!=null)
 console.log('Note: ', JSON.parse(event.data)[2]);
});