diff --git a/app/api/middleware.py b/app/api/middleware.py index 9bf1a2f..2c183e7 100644 --- a/app/api/middleware.py +++ b/app/api/middleware.py @@ -5,6 +5,7 @@ from app.core._crypto.signer import Signer from app.core._secrets import hot_seed from app.core.logger import make_log from app.core.models.keys import KnownKey +from app.core.models._telegram.wrapped_bot import Wrapped_CBotChat from app.core.models.user import User from app.core.storage import Session @@ -55,6 +56,9 @@ async def try_authorization(request): request.ctx.user = user request.ctx.user_key = known_key + request.ctx.user_uploader_wrapper = Wrapped_CBotChat(request.app.ctx.memory._telegram_bot, chat_id=user.telegram_id, db_session=request.ctx.db_session) + request.ctx.user_client_wrapper = Wrapped_CBotChat(request.app.ctx.memory._client_telegram_bot, chat_id=user.telegram_id, db_session=request.ctx.db_session) + async def try_service_authorization(request): signature = request.headers.get('X-Service-Signature') @@ -75,6 +79,8 @@ async def attach_user_to_request(request): request.ctx.verified_hash = None request.ctx.user = None request.ctx.user_key = None + request.ctx.user_uploader_wrapper = None + request.ctx.user_client_wrapper = None request.ctx.db_session = Session() await try_authorization(request) await try_service_authorization(request) diff --git a/app/api/routes/_blockchain.py b/app/api/routes/_blockchain.py index 09e240c..cfbabba 100644 --- a/app/api/routes/_blockchain.py +++ b/app/api/routes/_blockchain.py @@ -139,7 +139,7 @@ async def s_api_v1_blockchain_send_new_content_message(request): ] })) - await (Wrapped_CBotChat(request.app.ctx.memory._telegram_bot, chat_id=request.ctx.user.telegram_id)).send_message( + await request.ctx.user_uploader_wrapper.send_message( request.ctx.user.translated('p_tonconnectTransactionRequested'), reply_markup=get_inline_keyboard([ [{ diff --git a/app/bot/__init__.py b/app/bot/__init__.py index 813684c..5a15511 100644 --- a/app/bot/__init__.py +++ b/app/bot/__init__.py @@ -70,7 +70,7 @@ class UserDataMiddleware(BaseMiddleware): data['user'] = user data['db_session'] = session - data['chat_wrap'] = Wrapped_CBotChat(data['bot'], chat_id=user_id) + data['chat_wrap'] = Wrapped_CBotChat(data['bot'], chat_id=user_id, db_session=session) data['memory'] = dp._s_memory result = await handler(event, data) return result diff --git a/app/core/logger.py b/app/core/logger.py index a4b712f..3aa9eb1 100644 --- a/app/core/logger.py +++ b/app/core/logger.py @@ -28,7 +28,7 @@ handler3.setFormatter( ) logger.addHandler(handler3) -IGNORED_ISSUERS = os.getenv('IGNORED_ISSUERS', '').split(',') +IGNORED_ISSUERS = [v for v in os.getenv('IGNORED_ISSUERS', '').split(',') if v] def make_log(issuer, message, *args, level='INFO', **kwargs): diff --git a/app/core/models/_telegram/wrapped_bot.py b/app/core/models/_telegram/wrapped_bot.py index 7ccf7d3..938b578 100644 --- a/app/core/models/_telegram/wrapped_bot.py +++ b/app/core/models/_telegram/wrapped_bot.py @@ -27,35 +27,37 @@ class Wrapped_CBotChat: return "Bot" async def return_result(self, result, message_type='common'): - if message_type == 'common': - ci = 0 - for oc_msg in self.db_session.query(KnownTelegramMessage).filter( - KnownTelegramMessage.type == 'common', - KnownTelegramMessage.chat_id == self._chat_id, - ).all(): - await self.delete_message(oc_msg.message_id) - ci += 1 + if self.db_session: + if message_type == 'common': + ci = 0 + for oc_msg in self.db_session.query(KnownTelegramMessage).filter( + KnownTelegramMessage.type == 'common', + KnownTelegramMessage.chat_id == self._chat_id, + ).all(): + await self.delete_message(oc_msg.message_id) + ci += 1 - make_log(self, f"Deleted {ci} old messages", level='debug') + make_log(self, f"Deleted {ci} old messages", level='debug') - if isinstance(result, types.Message): - message_id = getattr(result, 'message_id', None) - assert message_id, "No message_id" - self.db_session.add( - KnownTelegramMessage( - type=message_type, - chat_id=self._chat_id, - message_id=message_id, - created=datetime.now() + if isinstance(result, types.Message): + message_id = getattr(result, 'message_id', None) + assert message_id, "No message_id" + self.db_session.add( + KnownTelegramMessage( + type=message_type, + chat_id=self._chat_id, + message_id=message_id, + created=datetime.now() + ) ) - ) - self.db_session.commit() - else: - make_log(self, f"Unknown result type: {type(result)}", level='warning') + self.db_session.commit() + else: + make_log(self, f"Unknown result type: {type(result)}", level='warning') return result async def send_message(self, text: str, message_type='common', **kwargs): + assert self._chat_id, "No chat_id" try: make_log(self, f"Send message to {self._chat_id}. Text len: {len(text)}", level='debug') r = await self._bot.send_message( @@ -71,6 +73,7 @@ class Wrapped_CBotChat: return None async def edit_message(self, message_id, text, **kwargs): + assert self._chat_id, "No chat_id" try: make_log(self, f"Edit message {self._chat_id}/{message_id}. Text len: {len(text)}", level='debug') return await self._bot.edit_message_text( @@ -90,6 +93,7 @@ class Wrapped_CBotChat: return None async def delete_message(self, message_id): + assert self._chat_id, "No chat_id" try: make_log(self, f"Delete message {self._chat_id}/{message_id}", level='debug') return await self._bot.delete_message( @@ -101,6 +105,7 @@ class Wrapped_CBotChat: return None async def send_photo(self, file_id, message_type='common', **kwargs): + assert self._chat_id, "No chat_id" try: make_log(self, f"Send photo to {self._chat_id}. File: {file_id}", level='debug') r = await self._bot.send_photo( @@ -114,6 +119,7 @@ class Wrapped_CBotChat: return None async def send_document(self, file_id, message_type='common', **kwargs): + assert self._chat_id, "No chat_id" try: make_log(self, f"Send document to {self._chat_id}. File: {file_id}", level='debug') r = await self._bot.send_document( @@ -127,6 +133,7 @@ class Wrapped_CBotChat: return None async def send_video(self, file_id, message_type='common', **kwargs): + assert self._chat_id, "No chat_id" try: make_log(self, f"Send video to {self._chat_id}. File: {file_id}", level='debug') r = await self._bot.send_video( @@ -140,6 +147,7 @@ class Wrapped_CBotChat: return None async def copy_message(self, from_chat_id, message_id, message_type='common', **kwargs): + assert self._chat_id, "No chat_id" try: make_log(self, f"Copy message from {from_chat_id}/{message_id} to {self._chat_id}", level='debug') r = await self._bot.copy_message( @@ -154,6 +162,7 @@ class Wrapped_CBotChat: return None async def forward_message(self, from_chat_id, message_id, message_type='common', **kwargs): + assert self._chat_id, "No chat_id" try: make_log(self, f"Forward message from {from_chat_id}/{message_id} to {self._chat_id}", level='debug') r = await self._bot.forward_message(