Real-time Discord bot that detects, scores, and brutally calls out flirty behaviour.
Feature
Details
Rizz Scoring
0–100 hybrid score (keywords, emojis, mention targeting, frequency)
Escalating chat responses
Mild → Strong → Aggressive callouts
Meme reactions
GIF/image posted at score ≥ 60 (cooldown: 20 s)
Voice callout
Joins voice channel, speaks via ElevenLabs TTS at score ≥ 80
DM escalation
Private warnings after repeated high-score messages
Cheating detection
Calls out users targeting multiple people within 2 minutes
Timeout system
Escalating timeouts (30 s → 5 min) for repeat offenders
/rizz command
Check any user's aggregate rizz score and status
1. Discord Developer Portal
Go to https://discord.com/developers/applications and create a new application.
Navigate to Bot → copy your Token .
On the same page, enable these Privileged Gateway Intents :
✅ Message Content Intent
✅ Server Members Intent (for timeouts)
Navigate to General Information → copy your Application ID (= Client ID).
Invite the bot to your server using OAuth2 → URL Generator with scopes:
bot, applications.commands
Bot permissions: Send Messages, Read Messages/View Channels,
Moderate Members, Connect, Speak, Send TTS Messages
2. ElevenLabs API Key (for voice)
Sign up at https://elevenlabs.io (free tier works for demos).
Go to Profile → API Key and copy your key.
Optionally browse https://elevenlabs.io/voice-library to pick a different voice ID.
# Clone / copy the project
cd rizzless
# Install dependencies
npm install
# Copy and fill in environment variables
cp .env.example .env
# → Edit .env with your DISCORD_TOKEN, CLIENT_ID, ELEVENLABS_API_KEY
# Start the bot
npm start
Variable
Required
Description
DISCORD_TOKEN
✅
Bot token from Discord Dev Portal
CLIENT_ID
✅
Application ID for slash command registration
ELEVENLABS_API_KEY
✅
ElevenLabs API key for TTS
ELEVENLABS_VOICE_ID
❌
Voice to use (default: Bella)
Run through this sequence to demonstrate all features:
Mild flirt — send hey cutie 😉 → bot replies with mild callout
Strong flirt — send omg you're so gorgeous babe 💕 → stronger response + GIF
Max rizz — send i love you marry me xoxo 💘💋❤️ come over → aggressive callout + bot joins voice and speaks
DM escalation — repeat step 3 within 60 s → bot DMs the user a warning
Cheating — ping two different users with flirty messages within 2 minutes → public cheat callout fires
/rizz command — run /rizz @user to see the score embed
rizzless/
├── index.js # Bot entry, slash commands, event routing
├── handlers/
│ └── messageHandler.js # Orchestrates per-message logic
├── services/
│ ├── scoringService.js # Hybrid 0–100 rizz scoring
│ ├── voiceService.js # ElevenLabs TTS + @discordjs/voice playback
│ └── moderationService.js # DM escalation, cheat detection, timeouts
├── state/
│ └── stateManager.js # In-memory state (users, cooldowns)
├── config/
│ └── responses.js # All response strings and meme URLs
├── .env.example
└── package.json
Action
Cooldown
Voice join (per guild)
30 s
Meme post (per channel)
20 s
DM warning (per user)
60 s
Cheat callout (per user)
90 s
All state is in-memory — restarting the bot resets scores.
Slash commands are registered globally — allow up to 1 hour to propagate on first run (use guild commands for instant updates during dev).
Voice requires ffmpeg — handled automatically via ffmpeg-static.
The bot needs to be higher in the role hierarchy than users it timeouts.