From 602bdff45203e0b9152993bda3af1e3f591aff36 Mon Sep 17 00:00:00 2001 From: Jeff Thibault Date: Wed, 3 Aug 2022 11:59:09 -0400 Subject: [PATCH] Update README.md --- README.md | 97 +++++++++++++++++++++++++++++++++++++++++++++++-------- 1 file changed, 84 insertions(+), 13 deletions(-) diff --git a/README.md b/README.md index 21165d6..3604004 100644 --- a/README.md +++ b/README.md @@ -1,24 +1,95 @@ # python-nostr -A Python library for making Nostr clients +A Python library for making [Nostr](https://github.com/nostr-protocol/nostr) clients -# Details -This library can handle basic [Nostr](https://github.com/nostr-protocol/nips) operations described in NIP-01. +## Usage +**Generate a key** +```python +from nostr.key import generate_private_key, get_public_key -It leverages [websocket-client](https://github.com/websocket-client/websocket-client) for websocket operations and [secp256k1-py](https://github.com/rustyrussell/secp256k1-py) for key operations. +private_key = generate_private_key() +public_key = get_public_key(private_key) +``` +**Connect to relays** +```python +from nostr.relay_manager import RelayManager -# Installation +relay_manager = RelayManager() +relay_manager.add_relay("wss://nostr-pub.wellorder.net", True, True) +relay_manager.add_relay("wss://relay.damus.io", True, True) +relay_manager.open_connection() + +while relay_manager.message_pool.has_notices(): + notice_msg = relay_manager.message_pool.get_notice() + print(notice_msg.content) +``` +**Publish to relays** +```python +from nostr.event import Event +from nostr.relay_manager import RelayManager +from nostr.message_type import ClientMessageType +from nostr.key import generate_private_key, get_public_key + +relay_manager = RelayManager() +relay_manager.add_relay("wss://nostr-pub.wellorder.net", True, True) +relay_manager.add_relay("wss://relay.damus.io", True, True) +relay_manager.open_connection() + +private_key = generate_private_key() +public_key = get_public_key(private_key) + +event = Event(public_key, "Hello Nostr") +event.sign(private_key) + +message = json.dumps([ClientMessageType.EVENT, event.to_json_object()]) +relay_manager.publish_message(message) +``` +**Receive events from relays** +```python +from nostr.filter import Filter, Filters +from nostr.event import Event, EventKind +from nostr.relay_manager import RelayManager +from nostr.message_type import ClientMessageType +from nostr.key import generate_private_key, get_public_key + +filters = Filters([Filter(authors=[""], kinds=[EventKind.TEXT_NOTE])]) +subscription_id = "" +request = [ClientMessageType.REQUEST, subscription_id] +request.extend(filters.to_json_array()) + +relay_manager = RelayManager() +relay_manager.add_relay("wss://nostr-pub.wellorder.net", True, True) +relay_manager.add_relay("wss://relay.damus.io", True, True) +relay_manager.add_subscription(subscription_id, filters) +relay_manager.open_connection() + +message = json.dumps(request) +relay_manager.publish_message(message) + +while relay_manager.message_pool.has_events(): + event_msg = relay_manager.message_pool.get_event() + print(event_msg.event.content) +``` + +## Installation 1. Clone repository \ ```git clone https://github.com/jeffthibault/python-nostr.git``` 2. Install dependencies in repo \ ```python -m venv venv``` \ ```pip install -r requirements.txt``` -Note 1: I wrote this with Python 3.9.5.
-Note 2: If the pip install fails, you might need to install wheel. Try ```pip install wheel```. +Note: If the pip install fails, you might need to install wheel. Try ```pip install wheel``` then ```pip install -r requirements.txt``` -# Disclaimer -This library is in very early development and still a WIP.
-More NIPs will be handled.
-There are probably bugs.
-I need to add tests.
-I will try to publish this as a [PyPI](https://pypi.org/) package at some point.
+## Dependencies +- [websocket-client](https://github.com/websocket-client/websocket-client) for websocket operations +- [secp256k1](https://github.com/rustyrussell/secp256k1-py) for key generation, signing, and verifying +- [cryptography](https://github.com/pyca/cryptography) for encrypting and decrypting direct messages + +Note: I wrote this with Python 3.9.5. + +## Disclaimer +- This library is in very early development and still a WIP. +- It might have some bugs. +- I need to add tests. +- I will try to publish this as a [PyPI](https://pypi.org/) package at some point. + +Please feel free to add issues, add PRs, or provide any feedback!