Inspiration
Valentine’s Day is coming up, and everyone in our Discord kept spamming each other for situationship advice. Instead of endlessly arguing in chat, we built RizzOverflow to settle it for us: one bot hypes you up, one bot keeps it real, and both give fast takes on your current situation.
What it does
Rizzoverflow runs two separate bot personas in the same server:
Optimist bot: encourages your approach
Pessimist bot: challenges your approach
With /setup, admins choose players and channels. With /analyze, the system:
- Pulls recent chat context from a monitored channel
- Runs a turn-based debate between both personas
- Streams responses into player-specific rooms
- Python + FastAPI-style service structure
- Discord.py for slash commands and message routing
- Backboard API + OpenAI provider for assistant/thread orchestration
- Single-process dual-bot runtime using concurrent tasks
Challenges we ran into
Running two Discord bot identities concurrently without cross-posting mistakes Preventing command spam and race conditions with async locks/cooldowns Keeping outputs short, funny, and safe for server use
Accomplishments that we’re proud of
Clean dual-bot architecture with shared orchestrator Real-time debate flow that feels like a live conversation Stable command flow (/setup, /analyze) with clear error handling Per-server message buffering and channel-specific routing
What we learned
Multi-agent UX is mostly orchestration, not just prompting Async safety (locks/timeouts/cooldowns) is critical for Discord bots Persona consistency improves a lot when context is tightly controlled turn-by-turn
What’s next
- Better personalization from user history and prior debates
- Richer scoring/rizz analytics over time
- Web dashboard for server admins
- More personas (coach, wingman, therapist, etc.)
Built With
- backboard.io
- discord.py
- python
Log in or sign up for Devpost to join the conversation.