diff --git a/lnbits/extensions/example/__init__.py b/lnbits/extensions/example/__init__.py index 88189869..f90fa490 100644 --- a/lnbits/extensions/example/__init__.py +++ b/lnbits/extensions/example/__init__.py @@ -1,8 +1,10 @@ +import asyncio from fastapi import APIRouter from fastapi.staticfiles import StaticFiles from lnbits.db import Database from lnbits.helpers import template_renderer +from lnbits.tasks import catch_everything_and_restart db = Database("ext_example") @@ -20,6 +22,10 @@ example_static_files = [ def example_renderer(): return template_renderer(["lnbits/extensions/example/templates"]) +from .tasks import wait_for_paid_invoices +from .views import * +from .views_api import * -from .views import * # noqa -from .views_api import * # noqa +def tpos_start(): + loop = asyncio.get_event_loop() + loop.create_task(catch_everything_and_restart(wait_for_paid_invoices)) \ No newline at end of file diff --git a/lnbits/extensions/example/tasks.py b/lnbits/extensions/example/tasks.py new file mode 100644 index 00000000..8788ef68 --- /dev/null +++ b/lnbits/extensions/example/tasks.py @@ -0,0 +1,23 @@ +# views_api.py is for you API endpoints that could be hit by another service + +# add your dependencies here + +import asyncio +from loguru import logger +from lnbits.core.models import Payment +from lnbits.helpers import get_current_extension_name +from lnbits.tasks import register_invoice_listener + +async def wait_for_paid_invoices(): + invoice_queue = asyncio.Queue() + register_invoice_listener(invoice_queue, get_current_extension_name()) + + while True: + payment = await invoice_queue.get() + await on_invoice_paid(payment) + +async def on_invoice_paid(payment: Payment) -> None: + if payment.extra.get("tag") != "example": + logger.debug(payment) + # Do something + return \ No newline at end of file