From e677a1e6ae0ac56c5060e5c9847327d4300296fc Mon Sep 17 00:00:00 2001 From: user Date: Fri, 5 Apr 2024 22:06:06 +0300 Subject: [PATCH] fixes --- app/client_bot/routers/content.py | 85 ++++++++++-------- app/core/models/_telegram/templates/player.py | 4 + locale/en/LC_MESSAGES/sanic_telegram_bot.mo | Bin 2567 -> 2621 bytes locale/en/LC_MESSAGES/sanic_telegram_bot.po | 4 + 4 files changed, 58 insertions(+), 35 deletions(-) diff --git a/app/client_bot/routers/content.py b/app/client_bot/routers/content.py index c4a9882..163934d 100644 --- a/app/client_bot/routers/content.py +++ b/app/client_bot/routers/content.py @@ -26,46 +26,61 @@ router = Router() async def t_callback_purchase_node_content(query: types.CallbackQuery, memory=None, user=None, db_session=None, chat_wrap=None, **extra): content_oid = int(query.data.split('_')[1]) - make_log("OwnedContent", f"{user} Try to purchase content: {content_oid}", level='info') - content = db_session.query(StoredContent).filter_by(id=content_oid).first() - if not content: - return await query.answer(user.translated('error_contentNotFound'), show_alert=True) + is_cancel_request = query.data.split('_')[2] == 'cancel' if len(query.data.split('_')) > 2 else False + if not is_cancel_request: + make_log("OwnedContent", f"{user} Try to purchase content: {content_oid}", level='info') + content = db_session.query(StoredContent).filter_by(id=content_oid).first() + if not content: + return await query.answer(user.translated('error_contentNotFound'), show_alert=True) - license_price = content.meta.get('license', {}).get('listen', {}).get('price') - license_price_num = int(license_price) - if license_price_num < 1: - return await query.answer(user.translated('error_contentPrice'), show_alert=True) + license_price = content.meta.get('license', {}).get('listen', {}).get('price') + license_price_num = int(license_price) + if license_price_num < 1: + return await query.answer(user.translated('error_contentPrice'), show_alert=True) - ton_connect, ton_connection = TonConnect.by_user(db_session, user, callback_fn=()) - await ton_connect.restore_connection() - assert ton_connect.connected, "No connected wallet" + ton_connect, ton_connection = TonConnect.by_user(db_session, user, callback_fn=()) + await ton_connect.restore_connection() + assert ton_connect.connected, "No connected wallet" - user_wallet_address = user.wallet_address(db_session) + user_wallet_address = user.wallet_address(db_session) - memory._app.add_task(ton_connect._sdk_client.send_transaction({ - 'valid_until': int(datetime.now().timestamp() + 300), - 'messages': [ - { - 'address': content.meta['item_address'], - 'amount': license_price - } - ] - })) + memory._app.add_task(ton_connect._sdk_client.send_transaction({ + 'valid_until': int(datetime.now().timestamp() + 300), + 'messages': [ + { + 'address': content.meta['item_address'], + 'amount': license_price + } + ] + })) + + new_action = UserAction( + type='purchase', + user_id=user.id, + content_id=content.id, + telegram_message_id=query.message.message_id, + from_address=user_wallet_address, + to_address=content.meta['item_address'], + status='requested', + meta={ + 'confirmation_url': wallet_obj_by_name(ton_connection.wallet_key.split('==')[0])['universal_url'] + }, + created=datetime.now() + ) + db_session.add(new_action) + else: + make_log("OwnedContent", f"{user} Try to cancel purchase: {content_oid}", level='info') + action = db_session.query(UserAction).filter_by( + type='purchase', + content_id=content_oid, + user_id=user.id, + status='requested' + ).first() + if not action: + return await query.answer() + + action.status = 'canceled' - new_action = UserAction( - type='purchase', - user_id=user.id, - content_id=content.id, - telegram_message_id=query.message.message_id, - from_address=user_wallet_address, - to_address=content.meta['item_address'], - status='requested', - meta={ - 'confirmation_url': wallet_obj_by_name(ton_connection.wallet_key.split('==')[0])['universal_url'] - }, - created=datetime.now() - ) - db_session.add(new_action) db_session.commit() await chat_wrap.send_content(db_session, content, message_id=query.message.message_id) diff --git a/app/core/models/_telegram/templates/player.py b/app/core/models/_telegram/templates/player.py index c5af14e..68513b4 100644 --- a/app/core/models/_telegram/templates/player.py +++ b/app/core/models/_telegram/templates/player.py @@ -108,6 +108,10 @@ class PlayerTemplates: 'text': self.user.translated('gotoWallet_button'), 'url': purchase_action.meta['confirmation_url'] }]) + inline_keyboard_array.append([{ + 'text': self.user.translated('cancelPurchase_button'), + 'callback_data': f'PC_{content.id}_cancel' + }]) text = self.user.translated('p_playerContext_purchaseRequested') else: inline_keyboard_array.append([{ diff --git a/locale/en/LC_MESSAGES/sanic_telegram_bot.mo b/locale/en/LC_MESSAGES/sanic_telegram_bot.mo index 1c71a66ab769e814f31af01b3dcb1545a7e99b14..b1677ca786a5c6651ee1ac1da5fb4ec6e3bfbd53 100644 GIT binary patch delta 631 zcmYk(JxD@P6u|N0S5{VoH7K?EVRvYw6;qBbA3Y>&->kXp6}dy?z@dNBbBePwrm@`&_d5=TTTl3}8M$aWL5iCQ>^X}rWKe85p` zVhTS{-}^-hiQg-dzyyxr5{A%n@;1h3>Kb(;HJ?bF_2rRCki-k_VjFd#>7H((EKYL2 zjq_MWE%4-6#~bdOsCAb8A}eU&J65rXd%YqhY@s%m;TY0uOg5P8;1O!!7A{~LwSx{0 zVX$9>pGft($0T{XaD0%juDfRf_GzJbVqKgU4(&$Hz32(9noR1ikOEQ?F1 z`4tRtw_yc)ct1rSFEGGs%;5uS{TsI8H+G|?+M{VFWnT_Bu&fo&Ng$>JC zVZ4f+m}xd!#sR#+b=<~@7PB2ZLKXDU(B~M|crReKpbzNGVvNfC7CZ0}Gx& zg4$Igj5I<9)=qP2AQiY!Ih5-{m%^Xjjyg9sahI)