This is a proof-of-concept bot to automatically purchase tickets for ShmooCon, a conference that is notoriously hard to get tickets for. This repository serves as a directory for everything that has been orchestrated.
Caution
This project is provided for research and educational purposes only. It is intended solely as a proof of concept. The author is not responsible for any misuse or actions taken by end users based on this code. Use at your own risk. We are not affiliated with ShmooCon in any way.
This project was an attempt to see what a working ticket bot would look like for ShmooCon, considering that it was the last year the conference was occurring. A lot of effort was put into this project over the years, including a feature for automatically answering the riddles using AI. Everything was written in TypeScript, and I would consider this overengineered (but that just makes it even more fun!).
A talk was even done on this very thing! (~2 hour mark)
Everything was run with Docker. Below is the architecture for the latest proof-of-concept:
- dashboard: Served as the "user-facing" portion of the bot and was where configuration (accounts, URLs, etc.) was managed. Built with NextJS and a very nice UI.
- bot-ts: The actual "bot," which used Playwright to execute its commands. Used a "stages" system to execute its tasks. Handles errors incredibly and communicates with the API.
- ticket-server: Acted as a replicated mock version of the ShmooCon ticket server, as using the real ShmooCon ticket server would be unwanted. Built with Bun, SQLite, Elysia, and React.
- api: Did the "heavy lifting" / processing for the bot. Handled AI responses, configuration, and user management. Communicated with
bot-ts
,extension
, anddashboard
. Built with Bun, SQLite, and Elysia. - extension: Sent the riddle to the API, retrieved the answer, and input it. Meant for a human version (which was not the final version, still a cool concept though). THIS PART WAS MORE OF A CONCEPT AND IS NOT PART OF THE FINAL VERSION.
Below is a diagram of the above (for the final version):
This project / experiment is over and is not open to changes. Please contact me if you have questions.