diff --git a/boxoffice/messageclient.py b/boxoffice/messageclient.py new file mode 100644 index 000000000..29f3b7695 --- /dev/null +++ b/boxoffice/messageclient.py @@ -0,0 +1,26 @@ +import requests + +from baseframe import _ + +from . import app, rq +from .models import Order + + +@rq.job('boxoffice') +def send_telegram_message(order_id: int) -> None: + with app.test_request_context(): + order = Order.query.get(order_id) + # if order is none block the rest of the code + if order is not None: + message_text = "" + for line_item in order.line_items: + message_text += _("{user} purchased {title}\n").format( + user=order.buyer_fullname, title=line_item.item.title + ) + send_text = f'https://api.telegram.org/bot{app.config["TELEGRAM_APIKEY"]}/sendMessage' + params = { + 'chat_id': app.config['TELEGRAM_CHATID'], + 'message_thread_id': app.config.get['TELEGRAM_THREADID'], + 'text': message_text, + } + requests.post(send_text, data=params, timeout=30) diff --git a/boxoffice/views/order.py b/boxoffice/views/order.py index 49f653827..358d85945 100644 --- a/boxoffice/views/order.py +++ b/boxoffice/views/order.py @@ -24,6 +24,7 @@ send_order_refund_mail, send_receipt_mail, ) +from ..messageclient import send_telegram_message from ..models import ( CURRENCY, CURRENCY_SYMBOL, @@ -438,6 +439,8 @@ def payment(order): invoice_no=order.invoice_no, ), ) + if app.config.get('TELEGRAM_APIKEY') and app.config.get('TELEGRAM_CHATID'): + send_telegram_message.queue(order_id=order.id) return api_success( result={'invoice_id': invoice.id}, doc=_("Payment verified"), diff --git a/instance/settings-sample.py b/instance/settings-sample.py index 6e069e02b..37bd09eda 100644 --- a/instance/settings-sample.py +++ b/instance/settings-sample.py @@ -40,3 +40,7 @@ #: RQ settings RQ_REDIS_URL = 'redis://localhost:6379/0' RQ_SCHEDULER_INTERVAL = 1 +#: Telegram settings +TELEGRAM_APIKEY = '' # nosec +TELEGRAM_CHATID = '' # nosec +TELEGRAM_THREADID = ''