Giveaways
two distributed tables replace Giveaways.db; v1's /giveaway never completed (json.loads on a de-quoted callback payload) and its enter button was admin-only - both fixed, see docs/contracts/x_giveaways.md; QA authored, not ported (10 scenarios)
/giveaway- v1 scenarios
- —
- Ported
- 10
- Green
- 10
- Failing
- —
two distributed tables replace Giveaways.db; v1's /giveaway never completed (json.loads on a de-quoted callback payload) and its enter button was admin-only - both fixed, see docs/contracts/x_giveaways.md; QA authored, not ported (10 scenarios)
Giveaways.py:25-173What it does
Behaviour that must not change
How to verify it
Message analysis (reply_to_message dump)
dumps the replied-to message's fields back to chat, ungated exactly as v1 dispatches it (COOKIEBOT.py:202); truncates at 4000 chars, where v1 sent the whole dump and Telegram rejected anything over 4096 - so the command did nothing on exactly the messages worth analysing. QA authored, not ported
Image search (v1's catch-all)
the three triggers only print the usage line; the feature is that every unrecognised /command is a search. Search + sends in cb-worker, quotas in Valkey (v1's dict was per-process), catch-all raises SkipHandler - it is registered ahead of three routers that own real commands