{"id":22550910,"url":"https://github.com/rednafi/acrobot","last_synced_at":"2026-05-09T09:32:04.368Z","repository":{"id":265965044,"uuid":"891130394","full_name":"rednafi/acrobot","owner":"rednafi","description":"A dead-simple Telegram bot for managing key-value pairs","archived":false,"fork":false,"pushed_at":"2024-12-01T20:29:30.000Z","size":193,"stargazers_count":1,"open_issues_count":1,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-02-02T10:34:20.043Z","etag":null,"topics":["docker","flyio","fulltext-search","key-value","python","search","sqlite","sqlite3","telegram-bot"],"latest_commit_sha":null,"homepage":"http://github.com/rednafi/acrobot","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/rednafi.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2024-11-19T19:27:50.000Z","updated_at":"2024-12-01T20:33:38.000Z","dependencies_parsed_at":"2024-12-01T20:41:04.708Z","dependency_job_id":null,"html_url":"https://github.com/rednafi/acrobot","commit_stats":null,"previous_names":["rednafi/acrobot"],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rednafi%2Facrobot","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rednafi%2Facrobot/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rednafi%2Facrobot/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rednafi%2Facrobot/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/rednafi","download_url":"https://codeload.github.com/rednafi/acrobot/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":246009078,"owners_count":20708881,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["docker","flyio","fulltext-search","key-value","python","search","sqlite","sqlite3","telegram-bot"],"created_at":"2024-12-07T17:08:58.258Z","updated_at":"2026-05-09T09:31:59.342Z","avatar_url":"https://github.com/rednafi.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"\u003cdiv align=\"left\"\u003e\n\n\u003ch1\u003eAcrobot\u003c/h1\u003e\n\n\u003cstrong\u003e\u003e\u003e \u003ci\u003eA dead-simple Telegram bot for managing key-value pairs\u003c/i\u003e \u003c\u003c\u003c/strong\u003e\n\n\u003c/div\u003e\n\n## Why\n\nI built this for an internal chat group because I kept forgetting all the random acronyms\nflying around. I needed a quick way to store and retrieve them, even if I could only\nremember a fragment.\n\nThis bot can be added to any Telegram group and invoked with the `/acro` command. It manages\nkey-value pairs and includes a `search` feature that performs a full-text search across the\ndatabase. If I remember even part of a key or value, I can find it in no time.\n\n## Architecture\n\nThe backend is a single long-polling Telegram bot backed by a distributed SQLite database on\nTurso. Full-text search is powered by SQLite's [FTS5] with the [Trigram] tokenizer and\n[BM25] ranking. The app runs on a small 512MB Fly.io instance. You can check the full\ndatabase structure in the [DDL] file.\n\n## Usage\n\nHere's a list of all the supported commands:\n\n| **Feature**                                 | **Command**                                          |\n| ------------------------------------------- | ---------------------------------------------------- |\n| **Add a key with values**                   | - `/acro add \u003ckey\u003e \u003cval1\u003e \u003cval2\u003e ...`                |\n|                                             | - `/acro add \"key with spaces\" \u003cval1\u003e \u003cval2\u003e ...`    |\n|                                             | - `/acro add \u003ckey\u003e \"value with spaces\"`              |\n| **Retrieve values for a key**               | - `/acro get \u003ckey\u003e`                                  |\n|                                             | - `/acro get \"key with spaces\"`                      |\n| **Remove specific values**                  | - `/acro remove \u003ckey\u003e \u003cval1\u003e \u003cval2\u003e ...`             |\n|                                             | - `/acro remove \"key with spaces\" \u003cval1\u003e \u003cval2\u003e ...` |\n| **Delete a key**                            | - `/acro delete \u003ckey\u003e`                               |\n|                                             | - `/acro delete \"key with spaces\"`                   |\n| **List a few random keys**                  | - `/acro list`                                       |\n| **Fuzzy search across all keys and values** | - `/acro search \u003ckey\u003e`                               |\n|                                             | - `/acro search \"key with spaces\"`                   |\n|                                             | - `/acro search \u003cvalue\u003e`                             |\n\nHere's a GIF showing the bot in action:\n\nhttps://github.com/user-attachments/assets/7271124b-be35-43b6-9869-8b7afa0a8809\n\n## Deployment\n\nThe [CI] is configured to deploy the bot to a 512MB [Fly.io] machine on every push to the\n`main` branch.\n\n## Observability\n\nThe app streams all log messages to [Pydantic Logfire]. Logs appear as follows:\n\n![Pydantic logfire](https://github.com/user-attachments/assets/7b542bb3-e5f8-4f37-93d7-0b9d992fed94)\n\n\n\u003cdiv align=\"center\"\u003e\n    — ⁂ —\n\u003c/div\u003e\n\n[ddl]: ./sql/ddl.sql\n[fts5]: https://sqlite.org/fts5.html\n[trigram]: https://sqlite.org/fts5.html#the_trigram_tokenizer\n[bm25]: https://sqlite.org/fts5.html#the_bm25_function\n[telegram bot]: https://core.telegram.org/bots#how-do-i-create-a-bot\n[ci]: ./.github/workflows/ci.yml\n[fly.io]: https://fly.io/\n[pydantic logfire]: https://pydantic.dev/logfire\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Frednafi%2Facrobot","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Frednafi%2Facrobot","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Frednafi%2Facrobot/lists"}