diff --git a/app/bot/routers/content.py b/app/bot/routers/content.py index 4b1eb70..c5bf935 100644 --- a/app/bot/routers/content.py +++ b/app/bot/routers/content.py @@ -63,6 +63,12 @@ async def t_callback_node_content(query: types.CallbackQuery, memory=None, user= db_session, db_session.query(StoredContent).filter_by( id=content_oid ).first(), + extra_buttons=[ + [{ + 'text': user.translated('back_button'), + 'callback_data': 'ownedContent' + }] + ], message_id=query.message.message_id ) diff --git a/app/client_bot/routers/content.py b/app/client_bot/routers/content.py index 3c975b5..1e3a0f5 100644 --- a/app/client_bot/routers/content.py +++ b/app/client_bot/routers/content.py @@ -2,15 +2,71 @@ import os import sys import traceback -from aiogram import types, Router +from aiogram import types, Router, F + +from app.core._keyboards import get_inline_keyboard +from app.core.models.node_storage import StoredContent +import json +from app.core.logger import make_log from app.client_bot.routers.home import router as home_router from app.client_bot.routers.tonconnect import router as tonconnect_router - +from app.core._config import CLIENT_TELEGRAM_BOT_USERNAME from app.core.logger import logger +from app.core.content.content_id import ContentId +import base58 router = Router() -# router.message.register(t_, Command('dev_tonconnect')) -# router.callback_query.register(t_callback_init_tonconnect, F.data.startswith('initTonconnect_')) -# router.callback_query.register(t_callback_disconnect_wallet, F.data == 'disconnectWallet') + +async def t_inline_query_node_content(query: types.InlineQuery, memory=None, user=None, db_session=None, chat_wrap=None, **extra): + args = query.query[1:] + cid = ContentId.deserialize(args) + + content_list = [] + content = db_session.query(StoredContent).filter_by(hash=cid.content_hash_b58).first() + decrypted_content = None + if content: + if content.encrypted: + decrypted_content = db_session.query(StoredContent).filter_by(id=content.decrypted_content_id).first() + else: + decrypted_content = content + + if not decrypted_content: + make_log("OwnedContent", f"Can't get decrypted content: {content.id}", level='warning') + return await query.answer(content_list) + + try: + metadata_content = StoredContent.from_cid(db_session, content.json_format()['metadata_cid']) + with open(metadata_content.filepath, 'r') as f: + metadata_content_json = json.loads(f.read()) + except BaseException as e: + make_log("OwnedContent", f"Can't get metadata content: {e}", level='warning') + return await query.answer(content_list) + + audio_title = metadata_content_json.get('name', "").split(' - ') + title, performer = None + if len(audio_title) > 1: + performer = audio_title[0].strip() + audio_title = audio_title[1:] + + title = audio_title[0].strip() + + content_list.append( + types.InlineQueryResultAudio( + id=content.id, + audio_url=decrypted_content.web_url, + title=title, + performer=performer, + reply_markup=get_inline_keyboard([ + [{ + 'text': user.translated('viewTrack_button'), + 'url': f"https://t.me/{CLIENT_TELEGRAM_BOT_USERNAME}?start=C{content.cid.serialize_v2()}" + }] + ]) + ) + ) + + return await query.answer(content_list) + +router.inline_query.register(t_inline_query_node_content, F.data.startswith('C')) \ No newline at end of file diff --git a/app/client_bot/routers/home.py b/app/client_bot/routers/home.py index d3c0e36..edb3cde 100644 --- a/app/client_bot/routers/home.py +++ b/app/client_bot/routers/home.py @@ -78,7 +78,7 @@ async def t_home_menu(__msg, **extra): if args[0].startswith('C'): content = StoredContent.from_cid(db_session, args[0][1:]) - return await chat_wrap.send_content(content, message_id=message_id) + return await chat_wrap.send_content(db_session, content, message_id=message_id) return await send_home_menu(chat_wrap, user, wallet_connection, message_id=message_id) diff --git a/app/core/_config.py b/app/core/_config.py index 9bd6802..e694a4e 100644 --- a/app/core/_config.py +++ b/app/core/_config.py @@ -17,6 +17,10 @@ TELEGRAM_API_KEY = os.environ.get('TELEGRAM_API_KEY') assert TELEGRAM_API_KEY, "Telegram API_KEY required" CLIENT_TELEGRAM_API_KEY = os.environ.get('CLIENT_TELEGRAM_API_KEY') assert CLIENT_TELEGRAM_API_KEY, "Client Telegram API_KEY required" +import httpx +TELEGRAM_BOT_USERNAME = httpx.get(f"https://api.telegram.org/bot{TELEGRAM_API_KEY}/getMe").json()['result']['username'] +CLIENT_TELEGRAM_BOT_USERNAME = httpx.get(f"https://api.telegram.org/bot{CLIENT_TELEGRAM_API_KEY}/getMe").json()['result']['username'] + MYSQL_URI = os.environ['MYSQL_URI'] MYSQL_DATABASE = os.environ['MYSQL_DATABASE'] diff --git a/app/core/models/_telegram/templates/player.py b/app/core/models/_telegram/templates/player.py index 1ba7cf0..b3b7759 100644 --- a/app/core/models/_telegram/templates/player.py +++ b/app/core/models/_telegram/templates/player.py @@ -2,7 +2,7 @@ from app.core.models.node_storage import StoredContent from app.core.models.content.user_content import UserContent from app.core.logger import make_log from app.core._utils.tg_process_template import tg_process_template -from app.core._config import PROJECT_HOST +from app.core._config import PROJECT_HOST, CLIENT_TELEGRAM_BOT_USERNAME from app.core._keyboards import get_inline_keyboard from aiogram.types import URLInputFile import json @@ -66,6 +66,16 @@ class PlayerTemplates: if cover_content: template_kwargs['thumbnail'] = URLInputFile(cover_content.web_url) + if self.bot_id == 1: + inline_keyboard_array.append([{ + 'text': self.user.translated('shareTrack_button'), + 'switch_inline_query': f"C{content.cid.serialize_v2()}" + }]) + else: + inline_keyboard_array.append([{ + 'text': self.user.translated('viewTrackAsClient_button'), + 'url': f"https://t.me/{CLIENT_TELEGRAM_BOT_USERNAME}?start=C{content.telegram_cid}" + }]) else: local_content = None diff --git a/app/core/models/_telegram/wrapped_bot.py b/app/core/models/_telegram/wrapped_bot.py index ec996c7..9e892b4 100644 --- a/app/core/models/_telegram/wrapped_bot.py +++ b/app/core/models/_telegram/wrapped_bot.py @@ -42,7 +42,7 @@ class Wrapped_CBotChat(T, PlayerTemplates): CLIENT_TELEGRAM_API_KEY: 1 }[self._bot_key] - async def return_result(self, result, message_type='common', message_meta={}): + async def return_result(self, result, message_type='common', message_meta={}, content_id=None, **kwargs): if self.db_session: if message_type == 'common': ci = 0 @@ -71,7 +71,8 @@ class Wrapped_CBotChat(T, PlayerTemplates): message_id=message_id, from_user=False, created=datetime.now(), - meta=message_meta or {} + meta=message_meta or {}, + content_id=content_id ) ) self.db_session.commit()