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

Share this project:

Updates