signal-bot/fake_signal
Krzysztof kuhy Rudnicki d13ae42590
Some checks are pending
CI / check (push) Waiting to run
CI / web (push) Waiting to run
A switchboard: any command off, off until, or on its own cooldown
One row per live command on a new Commands tab of the management page,
each with an on/off switch, an optional "off until" moment and a cooldown
that overrides the bot's default for that command alone. Every switch is
live: the bot keeps them in its own SQLite (command_settings, a permanent
table) and reads the row on every attempt, so nothing goes through
/_reload and nothing restarts.

A command that is off answers "BEEP BOOP !kot WYŁĄCZONE." (with "DO HH:MM"
for a timed switch) rather than going quiet, so nobody reports it broken;
the refusal is filed as refused_off, which the analytics count with the
other refusals, and it neither starts the cooldown nor counts as a use.

The bot grows GET /_commands and PUT /_commands/{name}; the management app
proxies them under /api/commands and passes the bot's 404/503 through
unwrapped. !cisza and !odcisz carry no cooldown and the page says so
instead of accepting a number the bot would ignore (test_wiring_ungated
keeps that set honest against the real table).

Proven end to end: scripts/e2e.sh now brackets a PUT with switch_off.yaml
and switch_on.yaml, the same actor refused and then served, with no reload
between them. Also bumps vitest and @vitest/coverage-v8 to 5.0.0 and
@types/react-dom to 19.2.7, which the freshness gate asked for.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-09-04 15:55:56 +02:00
..
proofs A switchboard: any command off, off until, or on its own cooldown 2026-09-04 15:55:56 +02:00
scenarios feat: !cisza silences the bot in one group for up to ten minutes 2026-09-04 10:31:08 +02:00
__init__.py feat: rewrite the bot so it runs, and gate it like the other repos 2026-08-29 13:05:42 +02:00
cli.py feat: two commands that answer with somebody else's work 2026-08-31 21:32:07 +02:00
routes_account.py feat: discover groups from the account, so adding the bot is the whole setup 2026-08-29 15:30:08 +02:00
routes_api.py feat: add a photo to the album from the chat, tagged, stripped and verified 2026-08-31 11:20:00 +02:00
routes_control.py feat: add a photo to the album from the chat, tagged, stripped and verified 2026-08-31 11:20:00 +02:00
routes_fixtures.py feat: two commands that answer with somebody else's work 2026-08-31 21:32:07 +02:00
routes_groups.py feat: discover groups from the account, so adding the bot is the whole setup 2026-08-29 15:30:08 +02:00
scenario.py feat: add a photo to the album from the chat, tagged, stripped and verified 2026-08-31 11:20:00 +02:00
server.py feat: discover groups from the account, so adding the bot is the whole setup 2026-08-29 15:30:08 +02:00
state.py feat: add a photo to the album from the chat, tagged, stripped and verified 2026-08-31 11:20:00 +02:00