Building a Telegram bot for Todo management

For the longest time I have looked for a solution to manage todos. I have tried out a lot of different solutions from services like Todoist and Any.do to low tech solutions like Todo.txt. Nothing really stuck for a long time. I have a couple of requirements for a todo system:

Thats basically it. I don’t really need tags or projects or file upload or anything like that. For a long time Any.do was the closest contender, but it always had some weird pricing with some kind of perpetual 50% discount going on (but it will end next week! yeah this time for real!). I also was not to fond of the web version the UI could have used a bit more love. On the other hand the Any.do moment feature and their new grocery list feature I quite liked. The Any.do moment basically helps you to periodically review todos and sort them into buckets (done, today, tomorrow, later).

Since I was not really interested in purchasing the commercial version of Any.do (I was afraid I was not going to stick with it and wasting the yearly subscription) I went ahead and built my own minimal solution based on a telegram bot written in Java using this excellent library by pengrad. It fulfills my most important criteria:

I can describe my todo using natural language and keywords (german only). This is robust to a certain degree. I can leave out the time or date or only use a weekday. A task without any recognized keyword will receive a deadline for the next day at 10am. If the deadline of a task is met I get a reminder message from the bot and I can easily postpone it or mark it as done. It does not work that well for lists (like shopping lists), but it is great for one off tasks. So I only really miss the grocery shopping list from Any.do.

A basic interaction with the bot (excuse the german buttons meaning done, tomorrow, later)
A basic interaction with the bot (excuse the german buttons meaning done, tomorrow, later)

You can find the bot here. There is no guarantee that this bot will work forever. I included the source code in a gist: