Discord.
Account linking, the level and live roles, and the message posted when a creator goes live.
Staff access required
The Admin Control Room is only available to CPWGames staff and CP Elora admins.
Where Discord is today
Three separate jobs, each with its own switch: linking proves which Discord member an account is, roles put the badges on that member, and the announcement webhook posts to a channel the moment a creator goes live. Linking works on its own; roles and announcements each need their own values below.
Checking Discord…
Account linking
From the Discord Developer Portal → your application → OAuth2. The site only asks for identify, so it learns which member someone is and nothing else — no messages, no guild list, no email. The redirect URI has to be registered on the application exactly as shown.
Roles in your server
A bot puts the roles on members. Invite it to the server with Manage Roles, then move the bot's own role above every role it hands out, or Discord refuses the changes. The live role is worn while a channel is broadcasting; level roles are worn for the highest level reached.
Comma-separated, level first: 5=roleId, 10=roleId, 25=roleId. A member wears the highest entry at or below their level, and Discord roles are swapped as they level up — the level-up is applied within a second of it happening, without the account page being open. A member who has not joined the server is told to join rather than retried forever.
Live announcements
When a channel starts broadcasting, CP Elora posts one message to a Discord channel: the streamer, their title, the game and a link to watch. Nothing else is posted, nobody is pinged, and the message arrives whether or not anyone has the site open — the API notices the live state itself.
In Discord: channel settings → Integrations → Webhooks → New Webhook → Copy Webhook URL. A webhook only posts to the one channel it was made for, so revoke it there if it ever leaks. Live state comes from MediaMTX (MEDIAMTX_API), so announcements need that configured; a channel is announced at most once every ten minutes, which stops an encoder reconnect from spamming the channel.