A Python library for making Nostr clients
Generate a key
fromnostr.keyimportPrivateKeyprivate_key=PrivateKey()
public_key=private_key.public_keyprint(f"Private key: {private_key.bech32()}")
print(f"Public key: {public_key.bech32()}")Connect to relays
importjsonimportsslimporttimefromnostr.relay_managerimportRelayManagerrelay_manager=RelayManager()
relay_manager.add_relay("wss://nostr-pub.wellorder.net")
relay_manager.add_relay("wss://relay.damus.io")
relay_manager.open_connections({"cert_reqs": ssl.CERT_NONE}) # NOTE: This disables ssl certificate verificationtime.sleep(1.25) # allow the connections to openwhilerelay_manager.message_pool.has_notices():
notice_msg=relay_manager.message_pool.get_notice()
print(notice_msg.content)
relay_manager.close_connections()Publish to relays
importjsonimportsslimporttimefromnostr.eventimportEventfromnostr.relay_managerimportRelayManagerfromnostr.message_typeimportClientMessageTypefromnostr.keyimportPrivateKeyrelay_manager=RelayManager()
relay_manager.add_relay("wss://nostr-pub.wellorder.net")
relay_manager.add_relay("wss://relay.damus.io")
relay_manager.open_connections({"cert_reqs": ssl.CERT_NONE}) # NOTE: This disables ssl certificate verificationtime.sleep(1.25) # allow the connections to openprivate_key=PrivateKey()
event=Event(private_key.public_key.hex(), "Hello Nostr")
event.sign(private_key.hex())
message=json.dumps([ClientMessageType.EVENT, event.to_json_object()])
relay_manager.publish_message(message)
time.sleep(1) # allow the messages to sendrelay_manager.close_connections()Receive events from relays
importjsonimportsslimporttimefromnostr.filterimportFilter, Filtersfromnostr.eventimportEvent, EventKindfromnostr.relay_managerimportRelayManagerfromnostr.message_typeimportClientMessageTypefilters=Filters([Filter(authors=[<anostrpubkeyinhex>], kinds=[EventKind.TEXT_NOTE])])
subscription_id=<astringtoidentifyasubscription>request= [ClientMessageType.REQUEST, subscription_id]
request.extend(filters.to_json_array())
relay_manager=RelayManager()
relay_manager.add_relay("wss://nostr-pub.wellorder.net")
relay_manager.add_relay("wss://relay.damus.io")
relay_manager.add_subscription(subscription_id, filters)
relay_manager.open_connections({"cert_reqs": ssl.CERT_NONE}) # NOTE: This disables ssl certificate verificationtime.sleep(1.25) # allow the connections to openmessage=json.dumps(request)
relay_manager.publish_message(message)
time.sleep(1) # allow the messages to sendwhilerelay_manager.message_pool.has_events():
event_msg=relay_manager.message_pool.get_event()
print(event_msg.event.content)
relay_manager.close_connections()pip install nostrNote: I wrote this with Python 3.9.5.
See the Test Suite README
- This library is in very early development.
- It might have some bugs.
- I need to add more tests.
Please feel free to add issues, add PRs, or provide any feedback!