{"id":13501364,"url":"https://github.com/wetterkrank/dasbot","last_synced_at":"2025-03-29T08:32:24.272Z","repository":{"id":44893757,"uuid":"299021701","full_name":"wetterkrank/dasbot","owner":"wetterkrank","description":"A Telegram bot that helps you learn German der/die/das articles.","archived":false,"fork":false,"pushed_at":"2025-03-19T20:34:36.000Z","size":1115,"stargazers_count":20,"open_issues_count":5,"forks_count":3,"subscribers_count":2,"default_branch":"master","last_synced_at":"2025-03-19T21:38:38.866Z","etag":null,"topics":["aiogram","asyncio","docker","dynaconf","german-language","i18n","marshmallow","mongodb","mongomock","posthog","quiz","telegram-bot","wordfreq"],"latest_commit_sha":null,"homepage":"https://dasbot.yak.supplies","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/wetterkrank.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":"2020-09-27T11:56:37.000Z","updated_at":"2025-03-19T20:34:40.000Z","dependencies_parsed_at":"2023-12-28T19:33:35.878Z","dependency_job_id":"a115e31c-68dd-47cf-a0fa-7a91d3e79287","html_url":"https://github.com/wetterkrank/dasbot","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/wetterkrank%2Fdasbot","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/wetterkrank%2Fdasbot/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/wetterkrank%2Fdasbot/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/wetterkrank%2Fdasbot/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/wetterkrank","download_url":"https://codeload.github.com/wetterkrank/dasbot/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":246162092,"owners_count":20733351,"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":["aiogram","asyncio","docker","dynaconf","german-language","i18n","marshmallow","mongodb","mongomock","posthog","quiz","telegram-bot","wordfreq"],"created_at":"2024-07-31T22:01:34.721Z","updated_at":"2025-03-29T08:32:24.266Z","avatar_url":"https://github.com/wetterkrank.png","language":"Python","funding_links":[],"categories":["Python"],"sub_categories":[],"readme":"# dasbot\nA Telegram bot that helps you learn German der/die/das articles\n\nhttps://dasbot.yak.supplies\n\n\n## How to run locally\n1. Clone the repo\n2. Edit settings/set the env variables (see `settings.toml` and `.env.example`)\n3. Create and activate a virtual environment: `python3 -m venv .venv \u0026\u0026 source ./.venv/bin/activate`\n4. Install dependencies: `pip install -r requirements.txt`\n5. Run `make run`\n\nAs an alternative,\n- Run `docker compose up` after the first two steps\n\n## Deployment\n- Run `docker compose pull \u0026\u0026 docker compose up -d`\n\n### Dictionary\nYou'll need a db collection 'dictionary' with documents like this:\n```\n{\"word\":\"Bahnhof\",\"articles\":\"der\",\"notes\":{\"en\":\"(railway) station\"},\"frequency\":1.0},\n{\"word\":\"Teil\",\"articles\":\"der/die\",\"notes\":{\"en\":\"part, detail\"},\"frequency\":0.5}\n```\n\n## Notes\n\n**Spaced repetition**\n\nI've adapted a simple algorithm borrowed from [drill-srs](https://github.com/rr-/drill).\n\nCard score | Wait time\n---------- | ---------\n0          | (new question)\n1          | 1 hour\n2          | 1 day\n3          | 1 week\n4          | 1 month\n5          | 3 months\n6          | 6 months\n\nA correct answer increases the card's score by 1, while a mistake decreases its score by 1.\n\n**Сorner cases**\n- Some nouns can have different gender depending on the meaning: *der See* (lake) - *die See* (sea), *der Leiter* (leader) - *die Leiter* (ladder)\n- For some nouns, more than one gender is correct, with the same meaning (*der/das Teil*)\n- Sometimes gender depends on the context (die/der *Jugendliche*, *Beschäftigte*, *Erwachsene*, *Geliebte*)\n- ... what else?\n\n**Todo**\n- Daily quiz ✔\n- Spaced repetition ✔\n- Statistics ✔\n- Hint: translation and/or context ✔\n- Webhooks instead of long polling ✔\n- Add Docker build/push actions to CI ✔\n- Randomize quiz time on 1st start ✔\n- Move DB to MongoDB Atlas ✔\n- i18n ✔\n- Revise the dictionary ✔\n- Add some tools for dictionary management\n- Select words by level -- A1, B1, ...\n- Let users add their words\n- \"Forget me\" command\n- Custom quiz intervals (\"N times/day every 3 hours\")\n- Postpone broadcast when restarting after outage (use a one-off script?)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fwetterkrank%2Fdasbot","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fwetterkrank%2Fdasbot","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fwetterkrank%2Fdasbot/lists"}