FlashVCTPredictions

A Discord bot that runs Valorant Champions Tour match predictions across multiple servers, fully automated from schedule to scoreboard.

Overview

FlashVCTPredictions turns the Valorant Champions Tour into a season-long game for Discord communities. Members predict match winners, the bot scores them once results are in, and leaderboards track who actually knows the scene. One bot instance serves several servers at once, each with its own channels, settings, and standings.

The goal was zero babysitting. Once a server is set up, matches appear, predictions open and close, and results are confirmed without anyone running a command.

Highlights

  • Fully automated match lifecycle. Upcoming matches are staged, then posted to each server’s predictions channel on schedule. Voting locks at match start, and results are confirmed automatically once the match is decided.
  • Resilient scraping. Match data comes from Liquipedia, parsed with HtmlAgilityPack. The scraper handles two distinct page layouts, so it keeps working whether an event uses one format or the other.
  • Leaderboards and achievements. Players compete on leaderboards and earn achievements.
  • Multi-server by design. Every prediction, score, and setting is scoped per server in the data model, so communities never see each other’s data.
  • Embedded admin dashboard. A Blazor admin UI runs in the same process as the bot, so tasks like reviewing staged matches, correcting a result, or adjusting settings don’t need raw database access.

How it works

The bot is a single .NET 8 process with a few cooperating parts:

  1. Ingestion. A scheduled scraper pulls event and match pages, normalises both layouts into one internal match model, and upserts them through EF Core into MySQL.
  2. Scheduling. A background service walks each match through its states (staged → posted → locked → confirmed) and acts when a transition is due.
  3. Discord layer. Discord.Net handles posting, interaction buttons for predictions, and leaderboard commands.
  4. Admin. The embedded Blazor dashboard reads and writes the same EF Core model, so the bot and the UI always agree on state.

Stack

C# · .NET 8 · Discord.Net · Entity Framework Core · MySQL · HtmlAgilityPack · Blazor