Zero downtime, Infinite bagels.
Because a monolith wasn't complicated enough.
Explore the docs »
Report Bug
·
Request Feature
Table of Contents
There are thousands of Twitch bots out there, yet none that quite fit my needs. ItsBagelBot is my attempt at creating a bot that is.
I have been running so many bots at once to get the features I want, that I decided to make my own bot that can handle everything I need in one place. ItsBagelBot is designed to be modular, so I can easily add or remove features as needed.
After years of research on making my stream better, I have finally decided to share my creation with the world. ItsBagelBot is the culmination of all my knowledge and experience in the Twitch community. All this in a single cloud-native, zero-downtime, microservices-based Twitch bot.
Some might say it's over-engineered for a Twitch bot. It is.
The reason? Because I can.
And because I want to learn more and apply modern software engineering practices to a fun project while showcasing my capabilities.
The entirety of the bot is hosted on Oracle Cloud Infrastructure's in Canadian region. The location was chosen for higher availability of the resources I need, as well as the advantages of data sovereignty and Canadian privacy laws. Moreover, the data centers are located in a region where hydroelectric power is abundant, making it an environmentally conscious choice.
ItsBagelBot is built using a microservices architecture, with each feature being its own service. This allows for zero-downtime updates, as services can be updated independently without affecting the entire system.
The main flow of the bot is as follows:
- Ingress Service: Handles incoming Twitch chat messages and routes them to the appropriate service. It is based on Twitch's conduit architecture for scalability and reliability. Twitch's EventSub WebSockets connections are managed here for chat data while other events are handled via Twitch's EventSub webhooks.
- Message Broker: RabbitMQ is used as the message broker to facilitate communication between services.
- Services: Each feature of the bot is implemented as a separate service, which subscribes to relevant messages from the message broker and processes them accordingly.
- Egress Service: Sends messages back to Twitch chat based on the processed data from the services.
Currently in development, but will be built with the following technologies:
I take security seriously. ItsBagelBot uses Tink for encryption of sensitive data at rest and in transit. To ensure that I are not using the insecurecleartextkeyset function of Tink, I have acquired a Vault (KMS) from Oracle to secure my keysets.
The internal services communicate using a service mesh (Linkerd) to ensure secure communication between services and the message broker.
The Oracle VPS hosting the bot is secured using Tailscale VPN, ensuring that only authorized devices can access the services. The VPS is completely locked down with a strict firewall allowing only necessary ports. A VCN will eventually be used for further isolation and avoiding Kubernetes public exposure.
Cloudflare is used for DNS management and DDoS protection.
This project exists thanks to the people who contribute.
If you have suggestions for how ItsBagelBot could be improved, or want to report a bug, please open an issue! I'd love to hear your ideas and help you fix any problems.
For contributing code, please contact me directly at [email protected] before making any changes or submitting a pull request.
This project is licensed under the Proprietary License Agreement - see the LICENSE file for details.
README template inspired by othneildrew/Best-README-Template