feat: listen for direct messages
This commit is contained in:
parent
9a82577493
commit
cec7d2ee25
6 changed files with 142 additions and 11 deletions
|
|
@ -1,5 +1,9 @@
|
|||
from threading import Thread
|
||||
from typing import Callable
|
||||
|
||||
import httpx
|
||||
from loguru import logger
|
||||
from websocket import WebSocketApp
|
||||
|
||||
from lnbits.app import settings
|
||||
from lnbits.helpers import url_for
|
||||
|
|
@ -10,7 +14,7 @@ from .event import NostrEvent
|
|||
async def publish_nostr_event(e: NostrEvent):
|
||||
url = url_for("/nostrclient/api/v1/publish", external=True)
|
||||
data = dict(e)
|
||||
# print("### published", dict(data))
|
||||
print("### published", dict(data))
|
||||
async with httpx.AsyncClient() as client:
|
||||
try:
|
||||
await client.post(
|
||||
|
|
@ -19,3 +23,44 @@ async def publish_nostr_event(e: NostrEvent):
|
|||
)
|
||||
except Exception as ex:
|
||||
logger.warning(ex)
|
||||
|
||||
|
||||
async def connect_to_nostrclient_ws(
|
||||
on_open: Callable, on_message: Callable
|
||||
) -> WebSocketApp:
|
||||
def on_error(_, error):
|
||||
logger.warning(error)
|
||||
|
||||
logger.debug(f"Subscribing to websockets for nostrclient extension")
|
||||
ws = WebSocketApp(
|
||||
f"ws://localhost:{settings.port}/nostrclient/api/v1/filters",
|
||||
on_message=on_message,
|
||||
on_open=on_open,
|
||||
on_error=on_error,
|
||||
)
|
||||
|
||||
wst = Thread(target=ws.run_forever)
|
||||
wst.daemon = True
|
||||
wst.start()
|
||||
|
||||
return ws
|
||||
|
||||
|
||||
async def handle_event(event, pubkeys):
|
||||
tags = [t[1] for t in event["tags"] if t[0] == "p"]
|
||||
to_merchant = None
|
||||
if tags and len(tags) > 0:
|
||||
to_merchant = tags[0]
|
||||
|
||||
if event["pubkey"] in pubkeys or to_merchant in pubkeys:
|
||||
logger.debug(f"Event sent to {to_merchant}")
|
||||
pubkey = to_merchant if to_merchant in pubkeys else event["pubkey"]
|
||||
# Send event to market extension
|
||||
await send_event_to_market(event=event, pubkey=pubkey)
|
||||
|
||||
|
||||
async def send_event_to_market(event: dict, pubkey: str):
|
||||
# Sends event to market extension, for decrypt and handling
|
||||
market_url = url_for(f"/market/api/v1/nip04/{pubkey}", external=True)
|
||||
async with httpx.AsyncClient() as client:
|
||||
await client.post(url=market_url, json=event)
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue