diff --git a/lnbits/extensions/livestream/lnurl.py b/lnbits/extensions/livestream/lnurl.py index d36c694f5..86569edab 100644 --- a/lnbits/extensions/livestream/lnurl.py +++ b/lnbits/extensions/livestream/lnurl.py @@ -21,9 +21,9 @@ async def lnurl_response(ls_id): resp = LnurlPayResponse( callback=url_for("livestream.lnurl_callback", track_id=track.id, _external=True), - min_sendable=track.price_msat, + min_sendable=min(100000, track.price_msat), max_sendable=track.price_msat * 5, - metadata=await track.lnurlpay_metadata, + metadata=await track.lnurlpay_metadata(), ) params = resp.dict() @@ -68,14 +68,19 @@ async def lnurl_callback(track_id): payment_hash, payment_request = await create_invoice( wallet_id=ls.wallet, amount=int(amount_received / 1000), - memo=await track.description(), - description_hash=hashlib.sha256((await track.lnurlpay_metadata).encode("utf-8")).digest(), + memo=await track.fullname(), + description_hash=hashlib.sha256((await track.lnurlpay_metadata()).encode("utf-8")).digest(), extra={"tag": "livestream", "track": track.id, "comment": comment}, ) + if amount_received < track.price_msat: + success_action = None + else: + success_action = track.success_action(payment_hash) + resp = LnurlPayActionResponse( pr=payment_request, - success_action=track.success_action(payment_hash), + success_action=success_action, routes=[], ) diff --git a/lnbits/extensions/livestream/models.py b/lnbits/extensions/livestream/models.py index 3e1b4f7f5..f913d65d4 100644 --- a/lnbits/extensions/livestream/models.py +++ b/lnbits/extensions/livestream/models.py @@ -25,7 +25,7 @@ class Track(NamedTuple): name: str producer: int - async def description(self) -> str: + async def fullname(self) -> str: from .crud import get_producer producer = await get_producer(self.producer) @@ -34,18 +34,22 @@ class Track(NamedTuple): else: producer_name = "unknown author" - return f"Track '{self.name}', from {producer_name}. {round(self.price_msat/1000)} sat." + return f"'{self.name}', from {producer_name}." - @property async def lnurlpay_metadata(self) -> LnurlPayMetadata: - return LnurlPayMetadata(json.dumps([["text/plain", await self.description()]])) + description = (await self.fullname()) + " Like this track? Send some sats in appreciation." + + if self.download_url: + description += f" Send {round(self.price_msat/1000)} sats or more and you can download it at 320kbps." + + return LnurlPayMetadata(json.dumps([["text/plain", description]])) def success_action(self, payment_hash: str) -> Optional[LnurlPaySuccessAction]: if not self.download_url: return None return UrlAction( - url=url_for("livestream.track_redirect_download", track_id=self.id, p=payment_hash, _external=True), + url=url_for("livestream.track_redirect_download", track_id=self.id, p=payment_hash[:5], _external=True), description=f"Download the track {self.name}!", )