Skip to content
Closed
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
22 changes: 15 additions & 7 deletions tasks.py
Original file line number Diff line number Diff line change
Expand Up @@ -5,10 +5,13 @@

import bolt11
import httpx
from lnurl import LnurlResponseException
from lnurl import handle as lnurl_handle
from lnbits.core.crud import get_standalone_payment
from lnbits.core.crud.wallets import get_wallet_for_key
from lnbits.core.models import Payment
from lnbits.core.services import create_invoice, fee_reserve, pay_invoice
from lnbits.settings import settings
from lnbits.tasks import register_invoice_listener
from loguru import logger

Expand Down Expand Up @@ -48,7 +51,6 @@ async def on_invoice_paid(payment: Payment) -> None:
memo = (
f"Split payment: {target.percent}% "
f"for {target.alias or target.wallet}"
f";{payment.memo};{payment.payment_hash}"
)

if "@" in target.wallet or "LNURL" in target.wallet:
Expand Down Expand Up @@ -99,15 +101,21 @@ async def get_lnurl_invoice(
payoraddress, wallet_id, amount_msat, memo
) -> Optional[str]:

from lnbits.core.views.api import api_lnurlscan
# FIX: Convert address to lowercase to support case-insensitive spec
payoraddress = payoraddress.lower()

try:
data = await lnurl_handle(payoraddress, user_agent=settings.user_agent, timeout=5)
except (LnurlResponseException, Exception) as exc:
logger.error(f"Failed to handle '{payoraddress}'. Error: {exc}")
return None

data = await api_lnurlscan(payoraddress)
rounded_amount = floor(amount_msat / 1000) * 1000

async with httpx.AsyncClient() as client:
try:
r = await client.get(
data["callback"],
data.callback,
params={"amount": rounded_amount, "comment": memo},
timeout=5,
)
Expand All @@ -116,7 +124,7 @@ async def get_lnurl_invoice(
r.raise_for_status()
except (httpx.ConnectError, httpx.RequestError):
logger.error(
f"splitting LNURL failed: Failed to connect to {data['callback']}."
f"splitting LNURL failed: Failed to connect to {data.callback}."
)
return None
except Exception as exc:
Expand All @@ -125,7 +133,7 @@ async def get_lnurl_invoice(

params = json.loads(r.text)
if params.get("status") == "ERROR":
logger.error(f"{data['callback']} said: '{params.get('reason', '')}'")
logger.error(f"{data.callback} said: '{params.get('reason', '')}'")
return None

invoice = bolt11.decode(params["pr"])
Expand All @@ -139,7 +147,7 @@ async def get_lnurl_invoice(
if invoice.amount_msat != rounded_amount:
logger.error(
f"""
{data['callback']} returned an invalid invoice.
{data.callback} returned an invalid invoice.
Expected {amount_msat} msat, got {invoice.amount_msat}.
"""
)
Expand Down
Loading