{"id":17128292,"url":"https://github.com/elinorbgr/matrix-tabsbot","last_synced_at":"2026-02-24T17:32:38.843Z","repository":{"id":66195123,"uuid":"110373487","full_name":"elinorbgr/matrix-tabsbot","owner":"elinorbgr","description":"A small matrix bot for keeping tabs in a room","archived":false,"fork":false,"pushed_at":"2024-07-26T18:09:12.000Z","size":30,"stargazers_count":3,"open_issues_count":0,"forks_count":0,"subscribers_count":2,"default_branch":"master","last_synced_at":"2025-02-05T14:02:12.534Z","etag":null,"topics":["bot","matrix-org"],"latest_commit_sha":null,"homepage":null,"language":"Rust","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/elinorbgr.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":"2017-11-11T19:25:12.000Z","updated_at":"2024-07-26T18:09:15.000Z","dependencies_parsed_at":null,"dependency_job_id":"75926d0b-93ca-4264-b5ed-06f324fac700","html_url":"https://github.com/elinorbgr/matrix-tabsbot","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/elinorbgr%2Fmatrix-tabsbot","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/elinorbgr%2Fmatrix-tabsbot/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/elinorbgr%2Fmatrix-tabsbot/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/elinorbgr%2Fmatrix-tabsbot/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/elinorbgr","download_url":"https://codeload.github.com/elinorbgr/matrix-tabsbot/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":240044423,"owners_count":19739183,"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":["bot","matrix-org"],"created_at":"2024-10-14T19:06:42.254Z","updated_at":"2025-10-24T16:32:19.250Z","avatar_url":"https://github.com/elinorbgr.png","language":"Rust","readme":"# Tabsbot\n\nTabsbot is a small matrix bot that can be used in a room to keep track of money exchanges in a room.\n\nAn example use-case would for flatmates willing to keep track of who paid how much to fill the fridge, to balance out over time.\n\n## Use it on matrix\n\nOnce the bot is in the room, it recognises 4 commands:\n\n```\n!balance\n```\n\nThis displays the current value of the tabs in this room for each known user. The displayed value\nrepresents **how much the group owes to this person**.\n\nAs such, a positive amount means this person has given to the group more than it has received, while\na negative amount means this person is late and should be the next one to pay, for example.\n\n```\n!paid \u003camount\u003e [for some reason]\n```\n\nThis command means you have paid `\u003camount\u003e` for the group. This amount will be added to your tab.\n\nAnything you write after the amount will just be repeated by the bot as an acknowledgement. The bot\ndoes not use this value, but it can serve in the room to keep track of why a person paid.\n\n```\n!paidto \u003cusername\u003e \u003camount\u003e [for some reason]\n```\n\nThis commands register that you have paid some amount to a particular member. This amount will be\nadded to your tab and substracted from their.\n\nThis can be used if someone lended some money to an other member for example, or for a member to compensate\ntheir debt by directly paying an other member rather than buying something for the group.\n\n```\n!rebalance\n```\n\nCompute the means of all tabs and substract it from each tab, so that the global sum of the tabs is zero.\n\nAfter many money transfert, all tabs will typically be large positive numbers, while the real information of\ninterest is the difference between them. This command can be used to get a better view of who is behind.\n\n## Permissions\n\nThe bot stores the tab for the room in a state key in the matrix room, for improved robustness. As such, it requires\nthe `m.add_state_level` permission. Riot does not seem to give direct access to this permission level, so this will\ntypicall require to make the bot moderator (power level 50).\n\n## Where does it run?\n\nI host an instance of this bot as `@tabsbot:safaradeg.net`, but you can easily run you own as well: simply compile\nthe project, and run the program with given arguments:\n\n```\nmatrix-tabs \u003cSERVER\u003e \u003cUSERNAME\u003e \u003cNAMESPACE\u003e\n```\n\nHere, `\u003cSERVER\u003e` is the URL of the homeserver that hosts the account of the bot, `\u003cUSERNAME\u003e` is the username\nof this account, and `\u003cNAMESPACE\u003e` is a name-spacing value for the state key the bot will use (for example\nmy isntance of the bot uses `net.safaradeg.tabsbot`.\n\nThe bot will then prompt you for the password of the account, and then run.\n","funding_links":[],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Felinorbgr%2Fmatrix-tabsbot","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Felinorbgr%2Fmatrix-tabsbot","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Felinorbgr%2Fmatrix-tabsbot/lists"}