Skip to content

Release v1.0.0

Latest

Choose a tag to compare

@substantivum substantivum released this 04 Sep 20:17
· 2 commits to master since this release

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 me and /stats leaderboard
  • Bans and unbans, audit log, role grants, notify role
  • /profile (one card for all three games), /setmain, /link, /unlink, /refresh_rank
  • /help listing every command grouped by area
  • /language to 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 --build

Without 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 the data/ 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_KEY is required for CS2 ranks. HENRIK_API_KEY and OPENDOTA_API_KEY are optional and only raise rate limits.

License

Apache 2.0