← back

TUMCSBot

Contributions to the infrastructure of the communication platform Zulip, which is used in most of the computer science courses at TUM. Zulip is structured similarly to Slack, having channels and direct messages.

As the TUMCSBot was rewritten in Go in 2026, the version with my contributions is not in production anymore. Nevertheless, this implementation was used in practice for at least 1.5 years, with student- and instructor-communication relying on it. With my work as an instructor of a large computer science course that was responsible for the Zulip setup, I myself also gained first-hand experience with those features.

As this was my first exposure to Python in my second semester (and one of the first coding projects I worked on in general), I honestly cannot say that this is particularly representative of my abilities now. I primarily worked on a plugin enabling a fast and easy way to (un)subscribe to multiple related channels at once, a plugin grouping all properties of a course, as well as some custom emotes and introductory slides.

ChannelGroup

A ChannelGroup groups together different channels (who would have thought?) and, in practice, is used to associate all channels belonging to a certain course that utilizes Zulip with an emote, e.g. its announcement channel, a channel belong to each tutorial, or individual channels for weekly homeworks. In a centralized, general channel the bot has a special message, which students can react to with an emote and the get automatically subscribed to the associated channels. I rewrote the existing plugin implementing this functionality within a new decorator-based framework utilizing object-relational mapping.

Course

I designed and implemented a big plugin for the bot, which essentially builds on top of all the other plugins, orchestrating them to model the functionality of a complete course, which included things like

An instructor could create such a course easily with a wizard I implemented, already adding all tutors, instructors, and custom channels for announcements, feedback and much more. This plugin was also implemented within the decorator-based framework with object-relational mapping.

Emotes

I additionally drew some stylized emotes for the bot, which it could utilize in its messages, or with which it could react to user messages.

Happy Bot Happy Pat Bot Nice Bot Sad Pat Bot Skeptical Bot Sweat Bot
Happy Bot Happy Pat Bot Nice Bot Sad Pat Bot Skeptical Bot Sweat Bot

Introduction Slides

I also designed a set of introductory slides to the features of Zulip, which can and was provided to first-semester students. The LaTeX project was customizable w.r.t. language and mode (light vs dark), with exemplary screenshots adapting to the targeted version.