2024-03-03 15:51:22 +00:00
|
|
|
import json
|
|
|
|
import asyncio
|
|
|
|
import websockets
|
|
|
|
|
|
|
|
# Replace these values with your own Nostr account details
|
|
|
|
your_pubkey = "16f1a0100d4cfffbcc4230e8e0e4290cc5849c1adc64d6653fda07c031b1074b"
|
|
|
|
your_relay_url = "wss://nos.lol"
|
|
|
|
|
|
|
|
async def listen_to_relay():
|
|
|
|
uri = f"{your_relay_url}/ws"
|
|
|
|
async with websockets.connect(uri) as websocket:
|
|
|
|
print("WebSocket connection established.")
|
|
|
|
|
|
|
|
# Subscribe to "zap receipt" events
|
|
|
|
subscription_id = "zap_receipts" # Replace with a unique identifier
|
|
|
|
subscription_payload = json.dumps(["REQ", subscription_id, {"kinds": [9735]}])
|
|
|
|
print(f"Subscribing with payload: {subscription_payload}")
|
|
|
|
await websocket.send(subscription_payload)
|
|
|
|
|
|
|
|
while True:
|
|
|
|
response = await websocket.recv()
|
|
|
|
# print(f"Received response: {response}")
|
|
|
|
await handle_event(response)
|
|
|
|
|
|
|
|
async def handle_event(event_json):
|
|
|
|
event = json.loads(event_json)
|
|
|
|
# print(f"Received event: {event}")
|
|
|
|
|
|
|
|
if event[0] == "EVENT" and event[2]["kind"] == 9735: # Zap receipt event
|
|
|
|
await handle_zap_receipt(event)
|
|
|
|
|
|
|
|
async def handle_zap_receipt(zap_receipt_event):
|
|
|
|
recipient_pubkey = None
|
|
|
|
|
|
|
|
for tag in zap_receipt_event[2]["tags"]:
|
|
|
|
if tag[0] == "p":
|
|
|
|
recipient_pubkey = tag[1]
|
|
|
|
# print(f"{recipient_pubkey}")
|
|
|
|
|
|
|
|
if recipient_pubkey == your_pubkey:
|
2024-03-03 17:00:50 +00:00
|
|
|
sender_pubkey = next((value for key, value in zap_receipt_event[2]["tags"] if key.lower() == "p"), None)
|
|
|
|
|
|
|
|
bolt11_invoice = next((value for key, value in zap_receipt_event[2]["tags"] if key == "bolt11"), None)
|
|
|
|
if bolt11_invoice:
|
|
|
|
amount_pos = bolt11_invoice.find("lnbc") + 4 # Position of the amount in the string
|
|
|
|
amount_str = ""
|
|
|
|
while amount_pos < len(bolt11_invoice) and (bolt11_invoice[amount_pos].isdigit() or bolt11_invoice[amount_pos] in "upm"):
|
|
|
|
amount_str += bolt11_invoice[amount_pos]
|
|
|
|
amount_pos += 1
|
|
|
|
|
|
|
|
amount_multiplier = amount_str[-1]
|
|
|
|
amount_value = int(amount_str[:-1]) if amount_str[:-1].isdigit() else 1
|
|
|
|
|
|
|
|
if amount_multiplier == "u":
|
|
|
|
amount_sats = amount_value * 100
|
|
|
|
elif amount_multiplier == "m":
|
|
|
|
amount_sats = amount_value * 100000
|
|
|
|
elif amount_multiplier == "p":
|
|
|
|
amount_sats = amount_value // 1000
|
|
|
|
elif amount_multiplier == "n":
|
|
|
|
amount_sats= amount_value // 10
|
|
|
|
else:
|
|
|
|
amount_sats = amount_value
|
|
|
|
|
|
|
|
print(f"Received a zap from {sender_pubkey} for {amount_sats} sats") # from {sender_pubkey} to {recipient_pubkey}")
|
2024-03-03 15:51:22 +00:00
|
|
|
|
|
|
|
if __name__ == "__main__":
|
|
|
|
asyncio.get_event_loop().run_until_complete(listen_to_relay())
|