forked fromcallebtc/python-nostr
- Notifications
You must be signed in to change notification settings - Fork0
A MicroPython library for Nostr
License
NotificationsYou must be signed in to change notification settings
MicroPythonOS/micropython-nostr
Folders and files
| Name | Name | Last commit message | Last commit date | |
|---|---|---|---|---|
Repository files navigation
A Python library for makingNostr 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()
- Clone repository
git clone https://github.com/jeffthibault/python-nostr.git
- Install dependencies in repo
python -m venv venvpip install -r requirements.txt
Note: If the pip install fails, you might need to installwheel. Try the following:
pip install wheelpip install -r requirements.txt
- websocket-client for websocket operations
- secp256k1 for key generation, signing, and verifying
- cryptography for encrypting and decrypting direct messages
Note: I wrote this with Python 3.9.5.
- 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 aPyPI package at some point.
Please feel free to add issues, add PRs, or provide any feedback!
About
A MicroPython library for Nostr
Resources
License
Uh oh!
There was an error while loading.Please reload this page.
Stars
Watchers
Forks
Packages0
No packages published
Languages
- Python100.0%