signal-bot/signal_bot
Krzysztof kuhy Rudnicki 77795ee6f8
Some checks are pending
CI / check (push) Waiting to run
CI / web (push) Waiting to run
Today's food and workout logs, read from where diet_guard and screen_locker keep them
Two commands, food_today and workout_today, each printing the current
Warsaw day out of a log another program owns: every meal with its time,
calories and source plus the day's total and macros; every workout with
every field it carries. Three workout fields are withheld (a reservation
phone number, a screenshot path, the sync record id), and the food budget
is never printed -- diet_guard keeps that number on the machine on purpose.

The spellings the group uses carry a surname, so they are custom aliases in
the state directory; aliases.json ships only plain words. The suite points
both logs at absent temp files so it can never read the operator's own,
and the e2e run writes one invented entry of each under today's date.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-09-04 22:07:46 +02:00
..
analytics Handle frames side by side, and budget the bot's own share of a reply 2026-09-04 21:35:34 +02:00
manage Let the operator add aliases from the Commands tab 2026-09-04 16:20:05 +02:00
stats Funny numbers: 69 (nice), 2137 🙏 and five more on every count the stats print 2026-09-04 21:55:33 +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
__main__.py feat: the bot can describe an envelope without quoting anybody 2026-08-30 19:29:06 +02:00
aliases.json Today's food and workout logs, read from where diet_guard and screen_locker keep them 2026-09-04 22:07:46 +02:00
analytics_command.py release: 0.2.6 «Stephanus I» — dodano !analityka 2026-08-31 23:19:51 +02:00
animals.py feat: serve several photo albums at once, each scoped to its own groups 2026-08-31 11:58:50 +02:00
announce.py release: 0.1.7 «Callistus I» — a version now says which pope, and when 2026-08-30 22:12:09 +02:00
app_commands.py A switchboard: any command off, off until, or on its own cooldown 2026-09-04 15:55:56 +02:00
app.py Handle frames side by side, and budget the bot's own share of a reply 2026-09-04 21:35:34 +02:00
art_command.py release: 0.2.6 «Stephanus I» — dodano !analityka 2026-08-31 23:19:51 +02:00
art.json feat: two commands that answer with somebody else's work 2026-08-31 21:32:07 +02:00
bot.py Handle frames side by side, and budget the bot's own share of a reply 2026-09-04 21:35:34 +02:00
changelog.py feat: releases are named in Latin, and land with the pope's portrait and article 2026-08-30 21:28:41 +02:00
command_settings.py A switchboard: any command off, off until, or on its own cooldown 2026-09-04 15:55:56 +02:00
command_switch.py A switchboard: any command off, off until, or on its own cooldown 2026-09-04 15:55:56 +02:00
command.py Let the operator add aliases from the Commands tab 2026-09-04 16:20:05 +02:00
commons.py feat: a word with two meanings gets the one made of steel 2026-08-31 18:01:27 +02:00
config_env.py feat: two commands that answer with somebody else's work 2026-08-31 21:32:07 +02:00
config.py !good bot: thank the asker with an emoji on their message, not a reply 2026-09-04 21:48:03 +02:00
context.py !good bot: thank the asker with an emoji on their message, not a reply 2026-09-04 21:48:03 +02:00
counting.py feat: the message event log, and the nightly report built on it 2026-08-30 19:14:43 +02:00
custom_aliases.py Let the operator add aliases from the Commands tab 2026-09-04 16:20:05 +02:00
day_log.py Today's food and workout logs, read from where diet_guard and screen_locker keep them 2026-09-04 22:07:46 +02:00
decorators.py A switchboard: any command off, off until, or on its own cooldown 2026-09-04 15:55:56 +02:00
discovery.py feat: the message event log, and the nightly report built on it 2026-08-30 19:14:43 +02:00
dispatcher.py Handle frames side by side, and budget the bot's own share of a reply 2026-09-04 21:35:34 +02:00
endpoints.py feat: two commands that answer with somebody else's work 2026-08-31 21:32:07 +02:00
envelope_shape.py feat: the bot can describe an envelope without quoting anybody 2026-08-30 19:29:06 +02:00
external.py feat: add a photo to the album from the chat, tagged, stripped and verified 2026-08-31 11:20:00 +02:00
folding.py fix: commands resolve when typed on another alphabet's keyboard 2026-08-30 14:22:43 +02:00
food_command.py Today's food and workout logs, read from where diet_guard and screen_locker keep them 2026-09-04 22:07:46 +02:00
good_bot_command.py !good bot: thank the asker with an emoji on their message, not a reply 2026-09-04 21:48:03 +02:00
groups.py feat: refuse to commit personal data, learned from outside the repository 2026-08-30 23:28:29 +02:00
help_command.py Today's food and workout logs, read from where diet_guard and screen_locker keep them 2026-09-04 22:07:46 +02:00
http_client.py release: 0.2.6 «Stephanus I» — dodano !analityka 2026-08-31 23:19:51 +02:00
inflight.py Handle frames side by side, and budget the bot's own share of a reply 2026-09-04 21:35:34 +02:00
latency.py Put a gap between the latency report's percentile columns 2026-09-04 21:36:49 +02:00
liveness.py feat: two commands that answer with somebody else's work 2026-08-31 21:32:07 +02:00
logging_setup.py feat: the bot can describe an envelope without quoting anybody 2026-08-30 19:29:06 +02:00
media_sniff.py feat: serve several photo albums at once, each scoped to its own groups 2026-08-31 11:58:50 +02:00
media_strip.py feat: import a folder of photos without importing it twice 2026-08-31 13:22:57 +02:00
media_tags.py feat: import a folder of photos without importing it twice 2026-08-31 13:22:57 +02:00
media_tracks.py feat: import a folder of photos without importing it twice 2026-08-31 13:22:57 +02:00
membership.py fix: a signal-api that is not up yet no longer kills the bot at boot 2026-08-30 15:23:42 +02:00
models.py feat: add a photo to the album from the chat, tagged, stripped and verified 2026-08-31 11:20:00 +02:00
mute_command.py feat: !cisza silences the bot in one group for up to ten minutes 2026-09-04 10:31:08 +02:00
mute.py feat: !cisza silences the bot in one group for up to ten minutes 2026-09-04 10:31:08 +02:00
nearest.py feat: a word the bot does not know gets an answer, and gets kept 2026-08-31 16:48:26 +02:00
pack_add.py feat: serve several photo albums at once, each scoped to its own groups 2026-08-31 11:58:50 +02:00
pack_album.py feat: import a folder of photos without importing it twice 2026-08-31 13:22:57 +02:00
pack_command.py release: 0.2.6 «Stephanus I» — dodano !analityka 2026-08-31 23:19:51 +02:00
pack_custom.py feat: one page to manage the bot, and the tagger folded into it 2026-08-31 14:54:49 +02:00
pack_holder.py feat: one page to manage the bot, and the tagger folded into it 2026-08-31 14:54:49 +02:00
pack_import.py feat: one page to manage the bot, and the tagger folded into it 2026-08-31 14:54:49 +02:00
pack_ingest.py feat: serve several photo albums at once, each scoped to its own groups 2026-08-31 11:58:50 +02:00
pack_ledger.py feat: import a folder of photos without importing it twice 2026-08-31 13:22:57 +02:00
pack_load.py Rebuild the command table on demand, and survive a tag whose file is gone 2026-09-04 10:14:39 +02:00
pack_people.py Let the operator add aliases from the Commands tab 2026-09-04 16:20:05 +02:00
pack_random.py release: 0.2.6 «Stephanus I» — dodano !analityka 2026-08-31 23:19:51 +02:00
pack_replies.py feat: add a photo to the album from the chat, tagged, stripped and verified 2026-08-31 11:20:00 +02:00
pack_report.py feat: import a folder of photos without importing it twice 2026-08-31 13:22:57 +02:00
pack_store.py feat: one page to manage the bot, and the tagger folded into it 2026-08-31 14:54:49 +02:00
pack_tags.py Rebuild the command table on demand, and survive a tag whose file is gone 2026-09-04 10:14:39 +02:00
pack.py Let the operator add aliases from the Commands tab 2026-09-04 16:20:05 +02:00
poem_command.py release: 0.2.6 «Stephanus I» — dodano !analityka 2026-08-31 23:19:51 +02:00
poems.json feat: two commands that answer with somebody else's work 2026-08-31 21:32:07 +02:00
popes_command.py release: 0.2.6 «Stephanus I» — dodano !analityka 2026-08-31 23:19:51 +02:00
popes.json release: 0.0.7 «Telesfor» — !papież, and the bot can test itself 2026-08-30 17:06:25 +02:00
portcheck.py feat: make the bot actually reply on Signal, and gate every way it went silent 2026-08-29 14:37:27 +02:00
portraits.py feat: a word with two meanings gets the one made of steel 2026-08-31 18:01:27 +02:00
quoting.py feat: answer the message that asked, not just the room 2026-08-29 23:01:01 +02:00
registry_holder.py Rebuild the command table on demand, and survive a tag whose file is gone 2026-09-04 10:14:39 +02:00
registry.py Let the operator add aliases from the Commands tab 2026-09-04 16:20:05 +02:00
reporting.py fix: the evening report is one message, not one per thing it has to say 2026-08-30 22:49:51 +02:00
roster.py feat: the message event log, and the nightly report built on it 2026-08-30 19:14:43 +02:00
scheduler.py feat: rewrite the bot so it runs, and gate it like the other repos 2026-08-29 13:05:42 +02:00
schema_commands.py release: 0.2.6 «Stephanus I» — dodano !analityka 2026-08-31 23:19:51 +02:00
schema.py A switchboard: any command off, off until, or on its own cooldown 2026-09-04 15:55:56 +02:00
selftest.py Handle frames side by side, and budget the bot's own share of a reply 2026-09-04 21:35:34 +02:00
served.py Handle frames side by side, and budget the bot's own share of a reply 2026-09-04 21:35:34 +02:00
startup_retry.py feat: the message event log, and the nightly report built on it 2026-08-30 19:14:43 +02:00
startup.py feat: the message event log, and the nightly report built on it 2026-08-30 19:14:43 +02:00
state_dir.py Let the operator add aliases from the Commands tab 2026-09-04 16:20:05 +02:00
store.py A switchboard: any command off, off until, or on its own cooldown 2026-09-04 15:55:56 +02:00
suggest_command.py feat: a word the bot does not know gets an answer, and gets kept 2026-08-31 16:48:26 +02:00
suggestions.py feat: a word the bot does not know gets an answer, and gets kept 2026-08-31 16:48:26 +02:00
transport_base.py !good bot: thank the asker with an emoji on their message, not a reply 2026-09-04 21:48:03 +02:00
transport_fake.py !good bot: thank the asker with an emoji on their message, not a reply 2026-09-04 21:48:03 +02:00
transport_rest.py !good bot: thank the asker with an emoji on their message, not a reply 2026-09-04 21:48:03 +02:00
traps_command.py release: 0.2.6 «Stephanus I» — dodano !analityka 2026-08-31 23:19:51 +02:00
traps.json feat: a word with two meanings gets the one made of steel 2026-08-31 18:01:27 +02:00
trust.py feat: !cisza silences the bot in one group for up to ten minutes 2026-09-04 10:31:08 +02:00
unknown.py feat: a word the bot does not know gets an answer, and gets kept 2026-08-31 16:48:26 +02:00
user_lock.py Handle frames side by side, and budget the bot's own share of a reply 2026-09-04 21:35:34 +02:00
versioning.py release: 0.2.6 «Stephanus I» — dodano !analityka 2026-08-31 23:19:51 +02:00
wiring.py Today's food and workout logs, read from where diet_guard and screen_locker keep them 2026-09-04 22:07:46 +02:00
wolnelektury.py feat: two commands that answer with somebody else's work 2026-08-31 21:32:07 +02:00
workout_command.py Today's food and workout logs, read from where diet_guard and screen_locker keep them 2026-09-04 22:07:46 +02:00