My imaginary friends hate to open CTFTime to see things π. I also cannot open it everyday.
So I force Yotsuba do these tasks for us. π
Here's the Yotsuba if you don't know who she is. She is from the manga Yotsuba&! (read it, it's very fun).
- Browse CTFTime events (upcoming/current/completed), plus countdown and info lookups
- Subscribe a server to event notifications with clean Discord embeds
- Send a weekly CTF digest to a chosen channel
- Search and browse writeups by keyword, event, category, or followed team
- Follow a CTFTime team and post new results
- Set reminders for events, timers, or recurring intervals
- Cipher/encoding tools and hash calculators
- Admin role mapping for command access control
Events and writeups are posted as separate notifications.
Plug in a Discord webhook and let your server scream at you the moment your bot (or anything else) gets nuked.
| Area | Tools |
|---|---|
| Core | Rust (2024 edition), Twilight |
| Data | PostgreSQL (SQLx), Redis, Moka |
| Observability | Prometheus, Grafana, Loki, Alertmanager, Promtail |
| Ops | Docker Compose |
- Rust (latest stable)
- Docker & Docker Compose
- A Discord Bot Token (from Discord Developer Portal)
-
Clone the repository:
git clone https://github.com/sotsuba/yotsubactf.git cd yotsubactf -
Configure environment:
cp .env.example .env # Edit .env and fill in DISCORD_TOKEN and DISCORD_APPLICATION_ID -
Start the services:
docker compose up -d
Useful files:
- CONTRIBUTING.md: Local dev workflow, Git branch workflow, git hooks, and SQLx offline data steps
- Bot setup: How to setup the bot in your server
- API endpoints: API endpoints
- Slash commands: Slash commands
Use Docker Compose for local or private hosting.
docker compose up -d- Production:
docker compose -f docker-compose.prod.yml --env-file .env.prod up -d
- Configure environment files: copy
.env.exampleto.env.prod - Migrations: run on startup inside each environment
Monitoring is off by default. Enable the full stack (Prometheus, Grafana, Loki, Alertmanager, Promtail):
docker compose --profile monitoring up -dDashboards:
- Grafana: http://localhost:3030 (Default login:
admin/admin) - Prometheus: http://localhost:9090
Gateway and Scheduler dashboards are pre-provisioned in Grafana.
MIT @ sotsuba