When a cronjob is created from within a Telegram or Slack thread,
deliver=origin was posting to the parent channel instead of the thread.
Root cause: the gateway never set HERMES_SESSION_THREAD_ID in the
session environment, so cronjob_tools.py could not capture thread_id
into the job's origin metadata — even though the scheduler already
reads origin.get('thread_id').
Fix:
- gateway/run.py: set HERMES_SESSION_THREAD_ID when thread_id is
present on the session context, and clear it in _clear_session_env
- tools/cronjob_tools.py: read HERMES_SESSION_THREAD_ID into origin
Closes #1219
46 lines
1.6 KiB
Python
46 lines
1.6 KiB
Python
import os
|
|
|
|
from gateway.config import Platform
|
|
from gateway.run import GatewayRunner
|
|
from gateway.session import SessionContext, SessionSource
|
|
|
|
|
|
def test_set_session_env_includes_thread_id(monkeypatch):
|
|
runner = object.__new__(GatewayRunner)
|
|
source = SessionSource(
|
|
platform=Platform.TELEGRAM,
|
|
chat_id="-1001",
|
|
chat_name="Group",
|
|
chat_type="group",
|
|
thread_id="17585",
|
|
)
|
|
context = SessionContext(source=source, connected_platforms=[], home_channels={})
|
|
|
|
monkeypatch.delenv("HERMES_SESSION_PLATFORM", raising=False)
|
|
monkeypatch.delenv("HERMES_SESSION_CHAT_ID", raising=False)
|
|
monkeypatch.delenv("HERMES_SESSION_CHAT_NAME", raising=False)
|
|
monkeypatch.delenv("HERMES_SESSION_THREAD_ID", raising=False)
|
|
|
|
runner._set_session_env(context)
|
|
|
|
assert os.getenv("HERMES_SESSION_PLATFORM") == "telegram"
|
|
assert os.getenv("HERMES_SESSION_CHAT_ID") == "-1001"
|
|
assert os.getenv("HERMES_SESSION_CHAT_NAME") == "Group"
|
|
assert os.getenv("HERMES_SESSION_THREAD_ID") == "17585"
|
|
|
|
|
|
def test_clear_session_env_removes_thread_id(monkeypatch):
|
|
runner = object.__new__(GatewayRunner)
|
|
|
|
monkeypatch.setenv("HERMES_SESSION_PLATFORM", "telegram")
|
|
monkeypatch.setenv("HERMES_SESSION_CHAT_ID", "-1001")
|
|
monkeypatch.setenv("HERMES_SESSION_CHAT_NAME", "Group")
|
|
monkeypatch.setenv("HERMES_SESSION_THREAD_ID", "17585")
|
|
|
|
runner._clear_session_env()
|
|
|
|
assert os.getenv("HERMES_SESSION_PLATFORM") is None
|
|
assert os.getenv("HERMES_SESSION_CHAT_ID") is None
|
|
assert os.getenv("HERMES_SESSION_CHAT_NAME") is None
|
|
assert os.getenv("HERMES_SESSION_THREAD_ID") is None
|