mirror of
https://github.com/RoboSats/robosats-nostr-sync.git
synced 2025-07-25 12:13:25 +00:00
56 lines
2.1 KiB
Python
56 lines
2.1 KiB
Python
# nostr.py
|
|
|
|
import hashlib
|
|
import sqlite3
|
|
from logs import print_log
|
|
from nostr_sdk import Keys, Client, NostrSigner, NostrSdkError
|
|
from db import insert_order, max_iteration, exists_iteration, delete_records_by_iteration, update_iteration, db_file_name
|
|
|
|
async def publish_to_nostr(orders, origin, parser, nsec):
|
|
conn = sqlite3.connect(db_file_name)
|
|
|
|
last_iteration = max_iteration(conn, origin)
|
|
|
|
print_log(f"Iteration {origin}: {last_iteration + 1}")
|
|
|
|
# Initialize with coordinator Keys
|
|
keys = Keys.parse(nsec)
|
|
signer = NostrSigner.keys(keys)
|
|
client = Client(signer)
|
|
|
|
# Add relays and connect
|
|
await client.add_relay("ws://localhost")
|
|
await client.connect()
|
|
|
|
print_log(f"Iteration {origin}: Checking Orders")
|
|
|
|
cursor = conn.cursor()
|
|
for order in orders:
|
|
identifier = str(order.get('id'))
|
|
if exists_iteration(conn, identifier, origin):
|
|
# keep alive existing orders
|
|
print_log(f"Iteration {origin}: {last_iteration + 1} - Order stay alive: {identifier}")
|
|
update_iteration(cursor, identifier, origin, last_iteration + 1)
|
|
else:
|
|
# Publish new orders
|
|
try:
|
|
events = parser(order, keys, "pending")
|
|
for event in events:
|
|
print_log(f"Iteration {origin}: {last_iteration + 1} - Nostr event sent: {event.as_json()}")
|
|
try:
|
|
await client.send_event(event)
|
|
except NostrSdkError as e:
|
|
print_log(f"Iteration {origin}: {last_iteration + 1} - Event already published")
|
|
|
|
if (len(events) > 0):
|
|
insert_order(cursor, identifier, str(events[0].created_at().as_secs()), last_iteration + 1, origin)
|
|
except Exception as e:
|
|
print_log(f"Iteration {origin}: {last_iteration + 1} - Error parsing {e} : {order}")
|
|
|
|
conn.commit()
|
|
|
|
print_log(f"Iteration {origin}: Cleaning Orders")
|
|
delete_records_by_iteration(conn, last_iteration, origin)
|
|
|
|
conn.commit()
|
|
conn.close() |