I Had Time to Kill, So I Built a Bot for My Friend’s Gaming Clan
It started as a favour. It ended with me never wanting to touch a webhook again.
I Had Time to Kill, So I Built a Bot for My Friend’s Gaming Clan
It started as a favour. It ended with me never wanting to touch a webhook again.
So I’m recently placed at TCS (2026 grad) and waiting to join. Which means I have a weird amount of free time. Not vacation free time, more like “I should probably be doing something” free time.
So I’ve been building things.
A WhatsApp bot for a bakery. Some Instagram automation. Nothing serious, just staying sharp. And then my friend, who runs a competitive gaming clan called Nyxari (yes, i built the website as-well :P), mentioned offhand that their mods spend a stupid amount of time doing manual admin work.
Updating the leaderboard after every match. Handing out cool-downs. Reassigning rank roles when positions change. All of it done by hand, every time, by actual people.
I said I’d take a look.
What they were actually dealing with
Nyxari takes ranked play seriously. There’s a proper ladder with fixed positions, region support (IND and SG), and role-based ranks. Players challenge each other to climb it. Mods verify results. Cool-downs get tracked. Tournaments run with brackets.
All of this was being managed manually. Someone specific always had to be available, like to edit the leaderboard, reassign roles, remove ranks. Someone always had to remember the rules. It worked, but only because people were putting in the time to make it work.
The fix was obvious. Automate the repetitive parts. Any mod with the right permissions should be able to update standings. Players should be able to challenge, check their profile, view the leaderboard, without pinging a mod every time.
I said I’d build it. I’d never built a Discord bot before.
The first thing I noticed
Before I could build anything real, I had to figure out how Discord bots actually work.
Coming from WhatsApp and Instagram automation, I expected the same setup. You write your logic, you spin up a server with a webhook endpoint, you register a public URL with the platform, and then the platform calls you whenever something happens. That’s just how it works. Or so I thought.
I installed discord.js, followed the docs, and ran the hello-world:
const client = new Client({ intents: [GatewayIntentBits.Guilds] });
client.once('Ready', () => {
console.log(`Logged in as ${client.user.tag}`);
});
client.on('interactionCreate', async interaction => {
if (interaction.commandName === 'ping') {
await interaction.reply('Pong!');
}
});
client.login(process.env.DISCORD_TOKEN);
No server setup. No webhook URL. No tunnel. Just ran it on my laptop.
Went to Discord. Typed /ping. Got Pong! back.
I actually checked if I’d missed something. I hadn’t.
Why it felt different
With WhatsApp, the platform pushes events to you. You need a public URL it can reach. Which means you need a running server, or a tunnel to your local machine, before you can test anything. ngrok, Cloudflare Tunnel, whatever. You’re managing that the whole time you’re developing. And if the session drops, your bot stops receiving events.
Discord works the other way. Your bot opens a WebSocket connection to Discord’s Gateway and keeps it open. Events flow in through that connection: slash commands, messages, reactions, everything. Discord doesn’t need to reach you. You reached out first.
So in development: you run the script, it works. You stop it, it stops. No orphaned servers. No expired tunnels. No “why isn’t my webhook firing” at midnight.
It sounds like a small thing. It isn’t. It’s the difference between your bot’s uptime being tied to your infrastructure and your bot’s uptime being tied to whether your script is running.
What I actually built
Once I understood the model, the rest moved fast.
Nyxie ended up being a proper clan management system:
- A ranked ladder with fixed positions and role-based ranks
- 1v1 challenges where you can only challenge someone ranked above you
- Staff-verified results with a 24hr expiry window
- Single-elimination tournament brackets with auto-advancing rounds
- Live player profiles with stats and match history
- A forfeit system with cooldowns and admin overrides
Any mod with manage server permissions can update standings, verify results, run tournaments. Any player can challenge, check their profile, view the ladder. Nobody has to ping a mod for basic stuff anymore.
The stack: Bun, TypeScript, discord.js v14, MySQL, Drizzle ORM, Hono, and a WebSocket API for real-time leaderboard updates.
More than I scoped originally. But once you’re in it and the pieces are clicking together, it’s hard to stop.
The part that surprised me
discord.js as a library is just good. The API maps to how you’re already thinking. Register a handler, something happens, you respond. Slash commands have a clean pattern. Embeds, buttons, select menus, modals. You construct objects and pass them in. The library handles rate limiting, reconnection, intent registration. You write the behaviour.
Compare that to the WhatsApp Graph API, where you’re dealing with webhook verification tokens, different message types per media format, and a sandbox environment that resets on you mid-development. It’s not impossible, but it has friction at every step.
Discord just gets out of the way.
The thing that stuck with me
Nyxari isn’t my clan. I didn’t start it, I’m not in charge of it, I’m just a friend of the person who runs it. I built the bot because I had time and it seemed like a fun problem.
But watching people use slash commands I wrote to challenge each other and climb a leaderboard, in a server I had nothing to do with building, that’s a strange feeling. Good strange. You built the infrastructure for a community you’re just a part of.
Discord as a platform makes that kind of thing happen a lot. It’s where people organise around things they care about. Games, dev tools, open source projects, whatever. The server structure exists specifically for that. And because it does, there’s always someone nearby who needs something built.
I was thinking about starting a dev-focused server for a while. A place for builders working on similar stuff. Haven’t done it yet. But I keep coming back to the idea. The tooling is right. The model is right. It’s just a matter of doing it.
If you want to try it
Discord Developer Portal, create an application, add a bot, enable the intents you need, npm install discord.js, token and application ID in .env, write your index.js, run it, invite to a test server.
Under an hour. Probably less. And you won’t need a server, a tunnel, or a deployment to get there.
Nyxie is live at nyxari.vercel.app/bot if you want to see what the full thing looks like.
The /ping to Pong! moment was small. But it was the first time I'd built something on a platform that just worked from my laptop, no setup, no infrastructure, nothing. After WhatsApp and Instagram, that felt like cheating.
It kind of is.
Building more stuff like this. Check out my other projects at gowth.tech
메타데이터
- post_id
- 0dfee3024c52
- slug
- i-had-time-to-kill-so-i-built-a-bot-for-my-friends-gaming-clan-0dfee3024c52
- url
- https://medium.com/@gowtham.ala.2oo5/i-had-time-to-kill-so-i-built-a-bot-for-my-friends-gaming-clan-0dfee3024c52
- canonical_url
- https://medium.com/@gowtham.ala.2oo5/i-had-time-to-kill-so-i-built-a-bot-for-my-friends-gaming-clan-0dfee3024c52
- author_url
- https://medium.com/@gowtham.ala.2oo5
- status
- ok
- fetched_at
- 2026-06-22 19:40:15