diff --git a/bot/context.py b/bot/context.py index 1d09371..ca8907f 100644 --- a/bot/context.py +++ b/bot/context.py @@ -27,7 +27,11 @@ def __init__(self, bot: Bot, update: Update) -> None: else None ) self.variables = Variables( - bot=bot, chat=chat, user=user, message=update.effective_message + bot=bot, + chat=chat, + user=user, + message=update.effective_message, + user_storage=self.user_storage, ) def copy(self) -> HandlerContext: diff --git a/bot/handlers/temporary_variable.py b/bot/handlers/temporary_variable.py index 85def8d..da25fa2 100644 --- a/bot/handlers/temporary_variable.py +++ b/bot/handlers/temporary_variable.py @@ -3,6 +3,7 @@ from service.models import Connection, TemporaryVariable from ..context import HandlerContext +from ..storage import Storage from ..utils.variables import replace_text_variables from .base import BaseHandler @@ -12,9 +13,16 @@ class TemporaryVariableHandler(BaseHandler[TemporaryVariable]): async def handle( self, update: Update, variable: TemporaryVariable, context: HandlerContext - ) -> list[Connection]: - temporary: dict[str, Any] = context.variables.store.setdefault('TEMPORARY', {}) - temporary[variable.name] = await replace_text_variables( + ) -> list[Connection] | None: + user_storage: Storage | None = context.user_storage + + if not user_storage: + return None + + variables: dict[str, Any] = await user_storage.get('temporary_variables', {}) + variables[variable.name] = await replace_text_variables( variable.value, context.variables ) + await user_storage.set('temporary_variables', variables) + return variable.source_connections diff --git a/bot/variables.py b/bot/variables.py index 6a26267..b9d66bd 100644 --- a/bot/variables.py +++ b/bot/variables.py @@ -2,6 +2,7 @@ from service.models import DatabaseRecord, Variable +from .storage import Storage from .utils.html import process_html_text from typing import TYPE_CHECKING, Any @@ -24,8 +25,11 @@ def __init__( chat: Chat | None = None, user: User | None = None, message: Message | None = None, + user_storage: Storage | None = None, ): self.bot = bot + self._user_storage = user_storage + self.store: dict[str, Any] = {} self.system_store: dict[str, Any] = { 'BOT_ID': bot.me.id, @@ -145,6 +149,12 @@ async def get(self, key: str) -> Any | None: return self.system_store.get(nested_key) elif prefix == 'USER': return await self._resolve_user_value(nested_key) + elif ( + prefix == 'TEMPORARY' + and self._user_storage + and (variables := await self._user_storage.get('temporary_variables')) + ): + return self._resolve_value(variables, nested_key) elif prefix == 'DATABASE': return await self._resolve_database_value(nested_key) elif (value := self.store.get(prefix)) and isinstance(