Rift Herald is a professional-grade Discord bot designed to track League of Legends ranked progress. It provides automated daily LP updates, live server leaderboards, and detailed profile lookups with a focus on visual elegance and reliability.
Unlike basic bots, Rift Herald tracks players by their PUUID, meaning it never breaks—even if a player changes their Riot ID.
- 🔄 Automated Daily Updates: Automatically posts LP gains/losses, promotions, and demotions to a configured channel every day.
- 🏆 Live Leaderboard: A real-time, sorted leaderboard for your server, complete with rank icons and win rates.
- 🆔 PUUID Tracking: Tracks the account, not the name. Handles name changes automatically.
- 🏢 Multi-Guild Support: Works across multiple Discord servers with independent tracking lists.
- 🎨 Visual Elegance: Uses custom server emojis for Rank Icons (Iron - Challenger) and dynamic color-coded embeds.
- ⚡ Rate Limit Handling: Smart queuing system to respect Riot API limits.
- Node.js (v16.9.0 or higher)
- NPM or Yarn
- Discord Bot Token (Get it here)
- Riot Games API Key (Get it here)
git clone https://github.com/yourusername/rift-herald.git
cd rift-heraldnpm installCreate a .env file in the root directory:
touch .envOpen it and paste the following configuration:
# Discord Configuration
DISCORD_TOKEN=your_discord_bot_token
CLIENT_ID=your_discord_application_id
# Riot Games Configuration
RIOT_API_KEY=your_riot_api_key
# Cron Schedule (Default: Daily at 8:00 PM Asia/Kolkata)
CRON_SCHEDULE=0 20 * * *
CRON_TIMEZONE=Asia/KolkataRegister the commands with Discord:
node deploy-commands.jsnode src/index.js(For production, use PM2: pm2 start src/index.js --name "rift-herald")
For the Leaderboard and Rank Updates to look 10/10, you must upload custom emojis to your Discord server.
- Go to Server Settings > Emoji.
- Upload rank icons (download them from the LoL Wiki or similar).
- Name them exactly like this:
iron,bronze,silver,gold,platinum,emerald,diamond,master,grandmaster,challenger.
The bot automatically detects these emojis and renders them in the embeds.
| Command | Description |
|---|---|
/setup channel:<#channel> |
(Admin) Configure where daily updates are posted. |
/track riot_id:<Name#Tag> region:<SG2/NA1...> |
Start tracking a player's ranked progress. |
/untrack player:<Select from list> |
Stop tracking a player (Autocomplete supported). |
/lolranking |
Show the server's live ranked leaderboard. |
/lolprofile riot_id:<Name#Tag> |
Lookup a player's current rank and stats instantly. |
rift-herald/
├── data/ # SQLite Database storage
├── src/
│ ├── commands/ # Slash Command definitions
│ ├── core/ # Database & Riot API Logic
│ ├── events/ # Discord Event Handlers
│ ├── tasks/ # Cron Jobs (Daily LP Check)
│ ├── utils/ # Embed builders & helpers
│ └── index.js # Entry point
├── .env # Secrets
└── deploy-commands.js # Command registration script
If you are using a standard Riot Development Key, it expires every 24 hours.
If the bot starts throwing 403 Forbidden errors:
- Go to Riot Developer Portal.
- Regenerate Key.
- Update
.env. - Restart Bot.
This project is licensed under the MIT License - see the LICENSE file for details.
Built with ❤️ by Suvodeep Ghosh