At the moment, it fetches the lecture plan and also the meme for every user seperately which is quite inefficient. Try fetching these before iterating over all users (although this causes a problem because of the different courses)
Especially the maps and menu callouts to external servers sometimes need 0.5-1s each, so with many users, this is a problem. If possible, implement a solution to handle multiple requests at the same time.
Currently, the push does not check if there are no lectures and therefore sends some crap message. It should be checked and in case that there are no lectures it should say smth like "No lectures tomorrow". Implementation should be similar to the getLectures command implementation
This task includes the automatic fetch of the newest version of the iCal file, the analysis to check what lectures the user has the next day and all related bot logic.
At the moment, if you want to send a photo, you have to include the logic to check if this is the file itself or just the file_id. Include this in either function to prevent some goddamn shit duplicate code.
Sometimes, at specific dates, the RaPla iCal file contains blockers (or „markers“) for that day. They usually go from 07:30 to 07:45 and start with something like TINF19. Try to delete them from the sent message as these are just markers and the user does not have to be at DHBW at 07:30 because of this.
So that the user can choose to be at DHBW at least e.g. 15 minutes before his lecture starts (because after all, we are limited to DB‘s punctuality here in Germany).
This task includes using the google maps api to get public transport information for the user so that he arrives at the DHBW on time for his first lecture the next day. This is called by the bot logic of the iCal-Task.
Validate every important user input and try to change the code so that a problem that occurs just prints an error to the command line and doesn't break the whole fucking bot
Provide documentation for the data model and also for every class so that its easy to understand how something works for others. Also provide information on how to contribute to this project.