Discord Team Balance Bot for Custom Matches | Monvoke
Run enough custom matches with the same group and someone ends up doing the same job every time: splitting everyone into two even teams and remembering who won last time so the next lineup isn't lopsided. Monvoke's /custom command hands that job to the bot, so you don't have to write one yourself.
What manual team balancing costs you
Between gathering players and starting the match, someone has to decide the lineup. Take a 5-vs-5 with ten players: you split them by hand while weighing each player's skill, and from the second match on you want last game's result factored in. Without a written record, that means relying on memory.
/custom splits teams the moment enough players join
/custom is Monvoke's recruitment command for custom matches. Members join with a button, the same as a regular recruitment message, but once enough members join, Monvoke completes the recruitment with members already sorted into Team A and Team B.
The player count you enter in the modal doesn't include yourself as the host. For a 4-vs-4 match, you'd enter 7: that's 7 players plus you, 8 players split evenly into two teams of 4. The modal accepts only odd numbers from 1 to 9, since the total of your entry plus the host needs to divide evenly into two teams.
If your server has more than one rating type configured, the rating_type parameter lets you choose which one applies to the match.
Symmetric and asymmetric matches balance teams differently
/custom supports two match formats, and Monvoke assigns teams differently in each.
| Format | Players | How teams are decided |
|---|---|---|
| Symmetric | Odd number (1, 3, 5, 7, 9) + host | Alternating assignment by rate, highest first |
| Asymmetric (1v4) | 1 killer + 4 survivors (fixed at 5) | Random shuffle |
| Asymmetric (2v8) | 2 killers + 8 survivors (fixed at 10) | Random shuffle |
Symmetric matches suit games where both sides compete on equal footing, like FPS or MOBA titles. Monvoke sorts everyone by rate from highest to lowest and alternates the assignment between Team A and Team B, which keeps the average rate gap between the two sides small.
Asymmetric matches fit games like Dead by Daylight, where one side plays a different role from the other. Set the asymmetric parameter to 1v4 or 2v8 to use it. Since killer and survivor aren't comparable on the same rate scale, assignment is random instead of rate-based. The player count is fixed too, so there's no headcount to enter.
Rearrange teams before the match starts
Once teams are set but before the match begins, you can still adjust the lineup from the recruitment message.
- Switch Team: a member presses this to move themselves to the other team
- Shuffle: the host presses this to redo the team split from scratch
Both work on symmetric and asymmetric matches alike. Once teams are locked in, though, the settings menu that let you edit the title or description while recruiting disappears. From that point, these two buttons are the only way to adjust the lineup.
Reporting the result updates rates automatically
After the match, you report the result from the recruitment message, choosing "Team A wins," "Team B wins," or similar. Rates for everyone involved update automatically once you report. If the match never happened (a dropped connection, say), you can report it as void instead. A void match leaves rates untouched and only adds to the match count.
A separate post covers how rates are calculated and what the Rate Ranking looks like.