{"id":45974277,"url":"https://github.com/flipdot/voucherbot","last_synced_at":"2026-02-28T16:02:52.379Z","repository":{"id":50151386,"uuid":"216409727","full_name":"flipdot/voucherbot","owner":"flipdot","description":null,"archived":false,"fork":false,"pushed_at":"2025-07-24T05:15:13.000Z","size":43,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":11,"default_branch":"master","last_synced_at":"2025-07-24T08:46:32.998Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"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/flipdot.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,"zenodo":null}},"created_at":"2019-10-20T18:42:10.000Z","updated_at":"2025-07-24T05:13:58.000Z","dependencies_parsed_at":"2024-01-18T03:26:35.820Z","dependency_job_id":"277e65ae-7c71-4a1d-b818-f03c02858a0f","html_url":"https://github.com/flipdot/voucherbot","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/flipdot/voucherbot","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/flipdot%2Fvoucherbot","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/flipdot%2Fvoucherbot/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/flipdot%2Fvoucherbot/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/flipdot%2Fvoucherbot/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/flipdot","download_url":"https://codeload.github.com/flipdot/voucherbot/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/flipdot%2Fvoucherbot/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":29941798,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-02-28T13:49:17.081Z","status":"ssl_error","status_checked_at":"2026-02-28T13:48:50.396Z","response_time":90,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.5:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"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":[],"created_at":"2026-02-28T16:02:51.668Z","updated_at":"2026-02-28T16:02:52.365Z","avatar_url":"https://github.com/flipdot.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"# voucherbot for discourse\n\nThe voucherbot manages the distribution of vouchers via Discourse. It was originally created for distributing the\nvouchers for the 36C3.\n\nA voucher is usable a single time, but replicates itself. The idea is therefore to pass the generated tokens to your\nfriends.\n\nWe, flipdot, receive a list of vouchers. We distribute them via Discourse to our members, who can then pass them\nto their friends. As soon as all their friends bought their ticket, they should send them back to us, so we can\ndistribute it to another member.\n\nThis bot simplifies this process by automating parts of it. A yaml file serves as a database, containing a mapping\nof vouchers and member accounts. Optionally, you can enter a number of persons, so you are able to estimate how\nlong the voucher will be on it's way.\n\n## Features\n\n- Updates a post in the forum. The post contains a table with the information which member received a vouchers\n- Sends the voucher via forum message to the member\n- Receives a returned voucher and updates the yaml file with the new one\n- Broadcast: Allows to send a message to all current voucher owners\n\n## Usage\n\nPython 3.7 required (TODO: require 3.8 to be able to use TypedDict eventually)\n\nCopy `example_voucher.yml` to `voucher.yml`. Enter your vouchers and their owners. Make a backup of this file (we do not make one for\nyou and we **WILL** modify this file. Don't cry if something get's lost).\n\nOpen `constants.py` and change `VOUCHER_TABLE_POST_ID`. This post will be constantly updated with the table of members\nwho currently own a voucher.\n\n    pip install -r requirements.txt\n    DISCOURSE_API_KEY=deadbeef python src/app.py --dry  # leave out --dry if you are brave\n\nThe script will send a message with a voucher to each person who is in `voucher.yml`. It will save the Discourse topic\nid in the file as `message_id`, so it won't send the same message twice.\n\nIf a user replies to that message, the script will scan for the string `CHAOS[a-zA-Z0-9]+` in their messages. If it\nfinds a new voucher, the old voucher in the yml file get's replaced by the new one and all other fields will be reset.","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fflipdot%2Fvoucherbot","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fflipdot%2Fvoucherbot","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fflipdot%2Fvoucherbot/lists"}