Repository navigation
Customly v1.0.0 β first release π
Customly is a Discord bot for running custom matches in Valorant, CS2 and Dota 2. It takes a custom from registration all the way to a match lobby β ready check, coin toss, captain draft, map veto β and gives staff live control panels to manage it all. Everything is localised in English and Russian.
This is the first stable release.
Highlights
Three games, one flow. Every custom follows the same path: registration β ready check β coin toss β draft β lobby. Each game keeps its own rules on top:
| Valorant | CS2 | Dota 2 | |
|---|---|---|---|
| Formats | BO1 / BO3 / BO5 | BO1 | BO1 |
| Map veto | Yes, with attack/defence side pick | Yes (side via knife round) | No β straight to the lobby |
| Connect info | Party code | Server IP | Lobby name + password |
Ranks from real APIs. Players link a game identity, an admin approves it, and the bot fetches and refreshes their rank:
- Valorant β
/register <Riot ID>via HenrikDev (rank, RR, peak) - CS2 β
/register_cs2 <Faceit nickname>via Faceit (skill level + elo) - Dota 2 β
/register_dota <friend id>via OpenDota (rank medal)
Approved ranks show on /profile and drive rank-based captain selection (highest_rr / highest_peak) using the right metric for each game.
Live panels. /panel posts a board that redraws itself whenever a custom changes:
- Player board β browse open games and join
- Admin board (
/panel tier:admin) β create and manage customs, per-game map pools, bans, rank approvals, audit log - Super Admin board (
/panel tier:superadmin) β bot roles, server language, prune
Staff boards can be locked to specific channels via .env.
Match lobby with map cards. After the veto the lobby shows a picture card for each map in play order, with sides. Drop images under bot/assets/maps/<game>/ β maps without a picture fall back to a plain list.
Everything else in the box
- Automated ready checks, draft and veto timers (all configurable)
- Coin toss and team drafting with auto last pick
- Per-game map pools: seed defaults, add, remove, toggle, set the competitive pool
- Team voice channels created per custom, players moved back when the match ends
- Match results,
/stats meand/stats leaderboard - Bans and unbans, audit log, role grants, notify role
/profile(one card for all three games),/setmain,/link,/unlink,/refresh_rank/helplisting every command grouped by area/languageto switch the whole server between English and Russian
Getting started
git clone https://github.com/substantivum/customly.git
cd customly
cp .env.example .env # set environment variables
docker compose up -d --buildWithout Docker: Python 3.12+ and Poetry, then poetry install --only main and poetry run python -m bot.
Enable the Server Members Intent in the Discord Developer Portal and give the bot Manage Roles / Move Members. Full setup, configuration and deployment notes are in the README.
Notes
- Storage β SQLite at
data/bot.db; back up thedata/directory to keep registrations, match history and rankings. - Upgrades are safe β on boot the bot creates missing tables and adds new columns; nothing is dropped or rewritten.
- API keys β
FACEIT_API_KEYis required for CS2 ranks.HENRIK_API_KEYandOPENDOTA_API_KEYare optional and only raise rate limits.
License
Apache 2.0