Как написать простого бота для 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]); });