Skip to content
Chethan Yadav
Work

Engineering/2021/Active

DisBotlist

A Discord bot listing platform — add your bot, track its growth, and discover other bots.

Node.jsEJS

Overview

DisBotlist is a Discord bot directory: developers list their bots, users browse and vote for them, and listed bots get a public API to report their own stats back. The codebase started as a fork of the v-codes botlist template (credited in the project's README) and grew from there — it now also runs a parallel directory for Discord servers, and a Discord-OAuth-gated code-sharing tool for developers.

Under the hood it's an Express + EJS site (server-rendered, no SPA framework) backed by MongoDB, with a companion discord.js bot that mirrors site activity — new listings, votes, uptime — into log channels on the support server. If you're a bot owner, the two things you'll actually touch are the submission form and the stats API, which has its own client wrapper in disbotlist-api.

Key Features

  • Bot listing & discovery — submit a bot, browse and search by tag, vote for bots, certified-bot badges (the certificate field the API returns)
  • Server listings — a second, separate directory for Discord servers, with its own vote/bump flow driven by a dedicated "Server List" Discord bot (configured via servers.token / servers.prefix)
  • Discord OAuth login — accounts run through passport-discord; logged-in users get profile pages and role-synced perks (booster, sponsor, supporter, partner roles on the support server)
  • Code sharing — a hastebin-style paste tool (hastebin-gen) gated behind Discord roles, with paste activity logged to a dedicated channel; access is tied to server-invite milestones (5/10/15/20 invites)
  • Public HTTP APIGET /api/bots/:botID, GET /api/bots/check/:userID, POST /api/bots/stats, POST /api/search, POST /api/search/servers — the same API the disbotlist-api client library wraps
  • Companion Discord bot — logs votes, uptime, and listing activity to configured channels, plus basic admin commands (eval, reboot, botinfo)

Setup

git clone https://github.com/chethanyadav456/DisBotlist
cd DisBotlist
npm install
cp config.txt config.js   # fill in bot token, MongoDB URL, OAuth secret, role/channel IDs
npm start

The essentials config.js expects:

module.exports = {
  bot: {
    token: "Your Discord Bot Token",
    prefix: "Prefix",
    owners: ["UserID"],
    mongourl: "Your MongoDB URL",
  },
  website: {
    callback: "https://yourdomain.com/callback",
    secret: "Your Discord OAuth Client Secret",
    clientID: "Your Bot Client ID",
    tags: ["Moderation", "Fun", "Music", "NSFW" /* ... */],
  },
  server: {
    id: "Your Discord Support Server ID",
    roles: { /* administrator, moderator, booster, sponsor, ... */ },
    channels: { /* codelog, uptimelog, botlog, votes, ... */ },
  },
};

package.json pins "engines": { "node": "12.x" }, and a Procfile ships alongside the app — both consistent with the project's 2021 origins and a Heroku-style deploy target.

How It Works

The site itself is a fairly standard Express/EJS + MongoDB app — Mongoose models for bots, servers, and votes back the listing pages. What's more specific to a botlist is the API's auth pattern: a bot's own DisBotlist token (not a user session) is sent as the Authorization header on POST /api/bots/stats and GET /api/bots/check/:userID, so a listed bot can push its live server count and check whether a given user has voted for it — without ever touching the site's login flow. The companion discord.js bot watches the same MongoDB collections to mirror that activity (votes, submissions, uptime pings) into log channels on the support server close to real time.

View on GitHub ↗ · Live ↗ · DisBotlist API client ↗