Automated esports match management for osu!
+ {#if !data.user} + + {:else} + +ELO
+{data.rating?.elo ?? 1000}
+W / L
++ {data.rating?.wins ?? 0} + / + {data.rating?.losses ?? 0} +
+Create and manage competitive matches
- + ++ Searching for opponent... + {queueTimer} +
++ {data.queueStatus.queueSize} player{data.queueStatus.queueSize !== 1 ? 's' : ''} in queue +
++ {#if data.poolCount > 0} + 1v1 · Best of 7 · + {data.queueStatus?.queueSize ?? 0} searching + {:else} + No mappools available — create one first + {/if} +
+Build and share beatmap pools
- + +Manage your teams and rosters
- -No matches yet. Join the queue!
+All matches
++ {p1?.team.name ?? '?'} vs {p2?.team.name ?? '?'} + · {new Date(m.createdAt).toLocaleDateString()} +
+No matches yet
++ Best of {config.bestOf} · First to {winsNeeded} + {#if m.osuLobbyId} + · osu! mp/{m.osuLobbyId} + {/if} +
+{p1.team.name}
+ {#if p1.rollValue != null} +Roll: {p1.rollValue}{p1.pickOrder === 1 ? ' ★' : ''}
+ {/if} +{p2.team.name}
+ {#if p2.rollValue != null} +{p2.pickOrder === 1 ? '★ ' : ''}Roll: {p2.rollValue}
+ {/if} +Highest roll picks first
+ +{p.team.name}
+ {#if p.rollValue != null} +{p.rollValue}
+ {:else} +—
+ {/if} +or type !roll in osu! chat
Waiting for all rolls...
+ {/if} ++ {expectedPicker?.team.name}'s turn to pick +
+
+ or type !pick NM1 in osu! chat
+
{pickError}
+ {/if} + +{bm.artist} - {bm.title} [{bm.version}]
+★{bm.starRating.toFixed(1)} · {bm.bpm}bpm · {formatLength(bm.totalLength)}
+ {/if} ++ Waiting for players to ready up & play in osu!... +
+ + + ++ {p1?.score} – {p2?.score} +
+ + +{bm.artist} - {bm.title} [{bm.version}]
+ {/if} +Creating osu! lobby...
+Lobby created. Waiting for players to join...
+ {#if m.osuLobbyId} + + {/if} +This match was cancelled.
+