diff --git a/app/fanout/bot_exec.py b/app/fanout/bot_exec.py index 878c66f..edf93d0 100644 --- a/app/fanout/bot_exec.py +++ b/app/fanout/bot_exec.py @@ -39,6 +39,9 @@ BOT_MESSAGE_SPACING = 2.0 _bot_send_lock = asyncio.Lock() _last_bot_send_time: float = 0.0 +# global container for persistent data storage between bot executions, will be added to execution namespace +_bot_globals: dict[str, Any] = {} + @dataclass(frozen=True) class BotCallPlan: @@ -194,6 +197,7 @@ def execute_bot_code( # Build execution namespace with allowed imports namespace: dict[str, Any] = { "__builtins__": __builtins__, + "_bot_globals": _bot_globals, } try: diff --git a/frontend/src/components/settings/SettingsFanoutSection.tsx b/frontend/src/components/settings/SettingsFanoutSection.tsx index 70dd277..9ef0726 100644 --- a/frontend/src/components/settings/SettingsFanoutSection.tsx +++ b/frontend/src/components/settings/SettingsFanoutSection.tsx @@ -103,6 +103,15 @@ const DEFAULT_BOT_CODE = `def bot(**kwargs) -> str | list[str] | None: # Don't reply to our own outgoing messages if is_outgoing: return None + + # If you want to make use of persistant data between calls to this function, + # you can put that data into the global _bot_globals dictionary, e.g.: + # + # bot_globals = globals()["_bot_globals"] + # if not "known_sender_names" in bot_globals: + # bot_globals["known_sender_names"] = set() + # + # bot_globals["known_sender_names"].add(sender_name) # Example: Only respond in #bot channel to "!pling" command if channel_name == "#bot" and "!pling" in message_text.lower():