diff --git a/lnbits/extensions/satsdice/crud.py b/lnbits/extensions/satsdice/crud.py index dd7d484ad..4fd3c8c2b 100644 --- a/lnbits/extensions/satsdice/crud.py +++ b/lnbits/extensions/satsdice/crud.py @@ -60,7 +60,7 @@ async def get_satsdice_pay(link_id: str) -> Optional[satsdiceLink]: row = await db.fetchone( "SELECT * FROM satsdice.satsdice_pay WHERE id = ?", (link_id,) ) - return satsdiceLink.from_row(row) if row else None + return satsdiceLink(**row) if row else None async def get_satsdice_pays(wallet_ids: Union[str, List[str]]) -> List[satsdiceLink]: @@ -102,7 +102,7 @@ async def increment_satsdice_pay(link_id: int, **kwargs) -> Optional[satsdiceLin row = await db.fetchone( "SELECT * FROM satsdice.satsdice_pay WHERE id = ?", (link_id,) ) - return satsdiceLink.from_row(row) if row else None + return satsdiceLink(**row) if row else None async def delete_satsdice_pay(link_id: int) -> None: @@ -124,9 +124,9 @@ async def create_satsdice_payment(data: CreateSatsDicePayment) -> satsdicePaymen ) VALUES (?, ?, ?, ?, ?) """, - (data.payment_hash, data.satsdice_pay, data.value, False, False), + (data["payment_hash"], data["satsdice_pay"], data["value"], False, False), ) - payment = await get_satsdice_payment(payment_hash) + payment = await get_satsdice_payment(data["payment_hash"]) assert payment, "Newly created withdraw couldn't be retrieved" return payment @@ -136,7 +136,7 @@ async def get_satsdice_payment(payment_hash: str) -> Optional[satsdicePayment]: "SELECT * FROM satsdice.satsdice_payment WHERE payment_hash = ?", (payment_hash,), ) - return satsdicePayment.from_row(row) if row else None + return satsdicePayment(**row) if row else None async def update_satsdice_payment( @@ -152,7 +152,7 @@ async def update_satsdice_payment( "SELECT * FROM satsdice.satsdice_payment WHERE payment_hash = ?", (payment_hash,), ) - return satsdicePayment.from_row(row) if row else None + return satsdicePayment(**row) if row else None ##################SATSDICE WITHDRAW LINKS @@ -173,16 +173,16 @@ async def create_satsdice_withdraw(data: CreateSatsDiceWithdraw) -> satsdiceWith VALUES (?, ?, ?, ?, ?, ?, ?) """, ( - data.payment_hash, - data.satsdice_pay, - data.value, + data["payment_hash"], + data["satsdice_pay"], + data["value"], urlsafe_short_hash(), urlsafe_short_hash(), int(datetime.now().timestamp()), - data.used, + data["used"], ), ) - withdraw = await get_satsdice_withdraw(payment_hash, 0) + withdraw = await get_satsdice_withdraw(data["payment_hash"], 0) assert withdraw, "Newly created withdraw couldn't be retrieved" return withdraw @@ -198,7 +198,7 @@ async def get_satsdice_withdraw(withdraw_id: str, num=0) -> Optional[satsdiceWit for item in row: withdraw.append(item) withdraw.append(num) - return satsdiceWithdraw.from_row(row) + return satsdiceWithdraw(**row) async def get_satsdice_withdraw_by_hash( @@ -214,7 +214,7 @@ async def get_satsdice_withdraw_by_hash( for item in row: withdraw.append(item) withdraw.append(num) - return satsdiceWithdraw.from_row(row) + return satsdiceWithdraw(**row) async def get_satsdice_withdraws( @@ -229,7 +229,7 @@ async def get_satsdice_withdraws( (*wallet_ids,), ) - return [satsdiceWithdraw.from_row(row) for row in rows] + return [satsdiceWithdraw(**row) for row in rows] async def update_satsdice_withdraw( @@ -243,7 +243,7 @@ async def update_satsdice_withdraw( row = await db.fetchone( "SELECT * FROM satsdice.satsdice_withdraw WHERE id = ?", (withdraw_id,) ) - return satsdiceWithdraw.from_row(row) if row else None + return satsdiceWithdraw(**row) if row else None async def delete_satsdice_withdraw(withdraw_id: str) -> None: diff --git a/lnbits/extensions/satsdice/lnurl.py b/lnbits/extensions/satsdice/lnurl.py index a77b166d6..1d46f054d 100644 --- a/lnbits/extensions/satsdice/lnurl.py +++ b/lnbits/extensions/satsdice/lnurl.py @@ -31,10 +31,13 @@ from .models import CreateSatsDicePayment ##############LNURLP STUFF -@satsdice_ext.get("/api/v1/lnurlp/{link_id}", name="satsdice.lnurlp_response") +@satsdice_ext.get( + "/api/v1/lnurlp/{link_id}", + response_class=HTMLResponse, + name="satsdice.lnurlp_response", +) async def api_lnurlp_response(req: Request, link_id: str = Query(None)): link = await get_satsdice_pay(link_id) - print(link) if not link: raise HTTPException( status_code=HTTPStatus.NOT_FOUND, detail="LNURL-pay not found." @@ -55,12 +58,12 @@ async def api_lnurlp_response(req: Request, link_id: str = Query(None)): name="satsdice.api_lnurlp_callback", ) async def api_lnurlp_callback( - data: CreateSatsDicePayment, req: Request, link_id: str = Query(None), amount: str = Query(None), ): link = await get_satsdice_pay(link_id) + print(link) if not link: raise HTTPException( status_code=HTTPStatus.NOT_FOUND, detail="LNURL-pay not found." @@ -93,24 +96,20 @@ async def api_lnurlp_callback( ) success_action = link.success_action(payment_hash=payment_hash, req=req) - print("success_action") - print(success_action) - print("success_action") - data.satsdice_pay = link.id - data.value = amount_received / 1000 - data.payment_hash = payment_hash - link = await create_satsdice_payment(data) - if success_action: - payResponse = { - "pr": payment_request, - "success_action": success_action, - "routes": [], - } - else: - payResponse = { - "pr": payment_request, - "routes": [], - } + + data: CreateSatsDicePayment = { + "satsdice_pay": link.id, + "value": amount_received / 1000, + "payment_hash": payment_hash, + } + + await create_satsdice_payment(data) + payResponse = { + "pr": payment_request, + "successAction": success_action, + "routes": [], + } + print(json.dumps(payResponse)) return json.dumps(payResponse) @@ -118,29 +117,45 @@ async def api_lnurlp_callback( ##############LNURLW STUFF -@satsdice_ext.get("/api/v1/lnurlw/{unique_hash}", name="satsdice.lnurlw_response") -async def api_lnurlw_response(unique_hash: str = Query(None)): +@satsdice_ext.get( + "/api/v1/lnurlw/{unique_hash}", + response_class=HTMLResponse, + name="satsdice.lnurlw_response", +) +async def api_lnurlw_response(req: Request, unique_hash: str = Query(None)): link = await get_satsdice_withdraw_by_hash(unique_hash) if not link: raise HTTPException( status_code=HTTPStatus.NOT_FOUND, detail="LNURL-satsdice not found." ) - if link.used: raise HTTPException(status_code=HTTPStatus.OK, detail="satsdice is spent.") - - return json.dumps(link.lnurl_response) + url = req.url_for("satsdice.api_lnurlw_callback", unique_hash=link.unique_hash) + withdrawResponse = { + "tag": "withdrawRequest", + "callback": url, + "k1": link.k1, + "minWithdrawable": link.value * 1000, + "maxWithdrawable": link.value * 1000, + "defaultDescription": "Satsdice winnings!", + } + return json.dumps(withdrawResponse) # CALLBACK @satsdice_ext.get( - "/api/v1/lnurlw/cb/{unique_hash}", name="satsdice.api_lnurlw_callback" + "/api/v1/lnurlw/cb/{unique_hash}", + response_class=HTMLResponse, + name="satsdice.api_lnurlw_callback", ) async def api_lnurlw_callback( - unique_hash: str = Query(None), k1: str = Query(None), pr: str = Query(None) + req: Request, + unique_hash: str = Query(None), + k1: str = Query(None), + pr: str = Query(None), ): link = await get_satsdice_withdraw_by_hash(unique_hash) paylink = await get_satsdice_pay(link.satsdice_pay) diff --git a/lnbits/extensions/satsdice/models.py b/lnbits/extensions/satsdice/models.py index 59324d6f9..3ed5b99e1 100644 --- a/lnbits/extensions/satsdice/models.py +++ b/lnbits/extensions/satsdice/models.py @@ -43,7 +43,6 @@ class satsdiceLink(BaseModel): url = req.url_for( "satsdice.displaywin", link_id=self.id, payment_hash=payment_hash ) - print(url) return {"tag": "url", "description": "Check the attached link", "url": url} @@ -102,7 +101,7 @@ class CreateSatsDiceLink(BaseModel): base_url: str = Query(None) min_bet: str = Query(None) max_bet: str = Query(None) - multiplier: int = Query(0) + multiplier: float = Query(0) chance: float = Query(0) haircut: int = Query(0) diff --git a/lnbits/extensions/satsdice/views.py b/lnbits/extensions/satsdice/views.py index ff254b3e2..2c16d4ab7 100644 --- a/lnbits/extensions/satsdice/views.py +++ b/lnbits/extensions/satsdice/views.py @@ -22,9 +22,10 @@ from fastapi.templating import Jinja2Templates from starlette.exceptions import HTTPException from starlette.responses import HTMLResponse from lnbits.core.models import User, Payment - from fastapi.params import Depends from fastapi.param_functions import Query +import random +from .models import CreateSatsDiceWithdraw templates = Jinja2Templates(directory="templates") @@ -37,35 +38,47 @@ async def index(request: Request, user: User = Depends(check_user_exists)): @satsdice_ext.get("/{link_id}") -async def display(link_id): +async def display(request: Request, link_id: str = Query(None)): link = await get_satsdice_pay(link_id) or abort( HTTPStatus.NOT_FOUND, "satsdice link does not exist." ) return satsdice_renderer().TemplateResponse( "satsdice/display.html", - chance=link.chance, - multiplier=link.multiplier, - lnurl=link.lnurl, - unique=True, + { + "request": request, + "chance": link.chance, + "multiplier": link.multiplier, + "lnurl": link.lnurl(request), + "unique": True, + }, ) @satsdice_ext.get("/win/{link_id}/{payment_hash}", name="satsdice.displaywin") -async def displaywin(link_id: str = Query(None), payment_hash: str = Query(None)): +async def displaywin( + request: Request, link_id: str = Query(None), payment_hash: str = Query(None) +): satsdicelink = await get_satsdice_pay(link_id) or abort( HTTPStatus.NOT_FOUND, "satsdice link does not exist." ) - withdrawLink = await get_satsdice_withdraw(payment_hash) + status = await check_invoice_status( + wallet_id=satsdicelink.wallet, payment_hash=payment_hash + ) + + withdrawLink = await get_satsdice_withdraw(payment_hash) if withdrawLink: return satsdice_renderer().TemplateResponse( "satsdice/displaywin.html", - value=withdrawLink.value, - chance=satsdicelink.chance, - multiplier=satsdicelink.multiplier, - lnurl=withdrawLink.lnurl, - paid=False, - lost=False, + { + "request": request, + "value": withdrawLink.value, + "chance": satsdicelink.chance, + "multiplier": satsdicelink.multiplier, + "lnurl": withdrawLink.lnurl(request), + "paid": False, + "lost": False, + }, ) payment = await get_standalone_payment(payment_hash) or abort( @@ -78,43 +91,63 @@ async def displaywin(link_id: str = Query(None), payment_hash: str = Query(None) HTTPStatus.NOT_FOUND, "satsdice link does not exist." ) if payment.pending == 1: - print("pending") + print("cunt") return satsdice_renderer().TemplateResponse( - "satsdice/error.html", link=satsdicelink.id, paid=False, lost=False + "satsdice/error.html", + { + "request": request, + "link": satsdicelink.id, + "paid": False, + "lost": False, + }, ) await update_satsdice_payment(payment_hash, paid=1) + paylink = await get_satsdice_payment(payment_hash) + if not paylink: - paylink = await get_satsdice_payment(payment_hash) or abort( - HTTPStatus.NOT_FOUND, "satsdice link does not exist." - ) - - if paylink.lost == 1: - print("lost") - return satsdice_renderer().TemplateResponse( - "satsdice/error.html", link=satsdicelink.id, paid=False, lost=True - ) + return satsdice_renderer().TemplateResponse( + "satsdice/error.html", + { + "request": request, + "link": satsdicelink.id, + "paid": False, + "lost": True, + }, + ) rand = random.randint(0, 100) chance = satsdicelink.chance if rand > chance: await update_satsdice_payment(payment_hash, lost=1) return satsdice_renderer().TemplateResponse( - "satsdice/error.html", link=satsdicelink.id, paid=False, lost=True + "satsdice/error.html", + { + "request": request, + "link": satsdicelink.id, + "paid": False, + "lost": True, + }, ) - data = [] - data.payment_hash = payment_hash - data.satsdice_pay = (satsdicelink.id,) - data.value = (paylink.value * satsdicelink.multiplier,) - data.used = 0 + + data: CreateSatsDiceWithdraw = { + "satsdice_pay": satsdicelink.id, + "value": paylink.value * satsdicelink.multiplier, + "payment_hash": payment_hash, + "used": 0, + } + withdrawLink = await create_satsdice_withdraw(data) return satsdice_renderer().TemplateResponse( "satsdice/displaywin.html", - value=withdrawLink.value, - chance=satsdicelink.chance, - multiplier=satsdicelink.multiplier, - lnurl=withdrawLink.lnurl, - paid=False, - lost=False, + { + "request": request, + "value": withdrawLink.value, + "chance": satsdicelink.chance, + "multiplier": satsdicelink.multiplier, + "lnurl": withdrawLink.lnurl(request), + "paid": False, + "lost": False, + }, )