Summary
Add a master pause/resume toggle for the trigger system (crons + webhooks) accessible from the /config menu in Telegram. This gives users a quick way to temporarily disable all triggers without editing the TOML file.
Background
v0.35.1 introduced comprehensive trigger features:
Currently, triggers.enabled can only be toggled by editing untether.toml. During debugging, incident response, or when the bot is misbehaving, users need a faster way to pause all triggers.
Proposed UX
On the /config → 📡 Trigger page, add a "Triggers: paused / active" toggle above the existing all/mentions mode selector.
📡 Trigger mode
⏰ Triggers: active
1 cron (daily-review, 9:00 AM daily)
1 webhook (github-push)
[⏸ Pause triggers] [← Back]
---
Respond to messages:
[✓ All] [Mentions]
[Clear override] [← Back]
When paused:
⏰ Triggers: ⏸ paused
Crons and webhooks are temporarily disabled.
[▶️ Resume triggers] [← Back]
Design decisions needed
-
Persistence: Should the pause survive a restart?
- Option A: In-memory only (lost on restart) — simpler, mirrors
/at behaviour
- Option B: Persisted to chat prefs — survives restart but adds state
- Recommendation: Option A (in-memory) — triggers auto-resume on restart, which is the safe default
-
Scope: Per-chat or global?
- Option A: Global (pauses all triggers across all chats)
- Option B: Per-chat (only pauses triggers targeting this specific chat)
- Recommendation: Global — triggers are a system-wide concern and partial pauses would be confusing
-
Interaction with /ping: When triggers are paused, /ping should show:
🏓 pong — up 3d 14h 22m
⏸ triggers paused (1 cron, 1 webhook suspended)
-
Interaction with cron scheduler: Paused crons skip their tick. run_once crons that would have fired during the pause are NOT consumed — they fire when resumed.
Implementation notes
TriggerManager already has an enabled field; add a runtime paused: bool that overrides it
- Cron scheduler checks
manager.paused before firing
- Webhook server returns 503 when paused (not 404 — the routes still exist)
/ping indicator updated to show paused state
/config trigger page shows current pause state + trigger count
Related
Summary
Add a master pause/resume toggle for the trigger system (crons + webhooks) accessible from the
/configmenu in Telegram. This gives users a quick way to temporarily disable all triggers without editing the TOML file.Background
v0.35.1 introduced comprehensive trigger features:
/pingsummary + footer indicators (feat: trigger visibility — indicators, discovery, and run history #271)/atcommand for one-shot delays (feat: one-shot delayed triggers — /at command and run_once cron flag #288)run_oncecron flag (feat: one-shot delayed triggers — /at command and run_once cron flag #288)Currently,
triggers.enabledcan only be toggled by editinguntether.toml. During debugging, incident response, or when the bot is misbehaving, users need a faster way to pause all triggers.Proposed UX
On the
/config→ 📡 Trigger page, add a "Triggers: paused / active" toggle above the existing all/mentions mode selector.When paused:
Design decisions needed
Persistence: Should the pause survive a restart?
/atbehaviourScope: Per-chat or global?
Interaction with
/ping: When triggers are paused,/pingshould show:Interaction with cron scheduler: Paused crons skip their tick.
run_oncecrons that would have fired during the pause are NOT consumed — they fire when resumed.Implementation notes
TriggerManageralready has anenabledfield; add a runtimepaused: boolthat overrides itmanager.pausedbefore firing/pingindicator updated to show paused state/configtrigger page shows current pause state + trigger countRelated