# Atlanta: a Discord bot with a web dashboard for guild configuration

> Atlanta is an open source Discord bot written in TypeScript on Discord.js and Mongoose, with 96 slash commands across eight categories and an Express and EJS dashboard for editing configuration. Version 5 was a ground-up rewrite that moved the bot to slash commands, moved configuration into an encrypted .env, and added a multi-stage Dockerfile.

**Androz2091/AtlantaBot** — 🤖 Another powerful Discord Bot with a web-dashboard used by more than 130k users!

- Repository: https://github.com/Androz2091/AtlantaBot
- Stars: 918 · Forks: 556
- Language: Less
- License: GPL-3.0
- Published: 2026-10-20 · Updated: 2026-10-20 · Language: en
- Canonical page: https://hysenlabs.com/projects/androz2091-atlantabot

## Version 5 replaced the JavaScript codebase wholesale rather than patching it

Atlanta started as a JavaScript codebase and version 5 is described in the README as a ground-up rewrite, with the original author noting in passing that he started the project when he was 13. The changes are listed plainly: the entire codebase moved from JavaScript to TypeScript, every command was migrated to slash commands through discord-sync-commands, and the dependency set was refreshed to Discord.js v14, Mongoose 8, discord-player v6, i18next v24 and dayjs. Configuration moved out of a config.js file into a .env encrypted with dotenvx, and Docker support arrived with a multi-stage Dockerfile. The package manifest records version 5.0.0 with the main entry point at dist/index.js, and the scripts section is small: build runs tsc, start runs node dist/index.js, dev runs tsx watch src/index.ts, and lint runs eslint over src. That is a coherent v5 shape, and the practical consequence for anyone arriving from v4 is that the configuration file and the command invocation syntax both changed.

## Ninety-six slash commands across eight categories, with the owner commands worth reading first

The command surface is the product. Atlanta counts 96 slash commands in 8 main categories, and the README enumerates them with counts. Administration has 17, including welcome, goodbye, autorole, automod, backup, setlang and slowmode. Moderation has 14, with ban, kick, mute, warn, clear, giveaway and sanctions among them. Music has 13, including play, skip, queue, np, lyrics, filter and autoplay. Economy has 15, including profile, work, slots, rob, leaderboard, marry and achievements. Fun has 8, General has 20, Images has 6 including avatar, qrcode, love, facepalm, captcha and clyde, and Owner has exactly 3: eval, reload and servers-list. Those last three are the ones to look at before you deploy. An eval command runs code, and it belongs to the person who owns the bot, so it is a deliberate capability rather than an oversight, but it is a capability you should confirm is gated the way you expect.

## The dashboard is a separate Express and EJS app inside the same repository

Atlanta ships its own web dashboard, described as running with Express and EJS, and the README points to a dashboard folder in the repository for the code. From it you can edit your configuration, manage your servers, view rankings, modify your profile, and more. The screenshots in the README show the dashboard screens. The tree confirms the layout, with a dashboard directory alongside src, assets, languages, docs and an emojis.json file, plus a crowdin.yml for translations. The dependency list explains how it is built: express 5 and express-session for the server side, ejs for the templates, and separate dependencies for the odd corners, such as canvas for image manipulation, mathjs for the calculator-style commands, gamedig for game server queries, figlet for text banners, google-translate-api for the translate command, lyrics-finder for music, cron for scheduled jobs, and discord-backup and discord-giveaways as whole subsystems. Running a web dashboard alongside a bot means there is an HTTP surface to secure, which the deployment instructions below do not address directly.

## MongoDB and Mongoose carry guild configuration, and i18next carries nine languages

The state model behind the commands is a MongoDB instance accessed through Mongoose, and the manifest shows mongoose at 9.6.2 alongside caret range pins throughout the dependency list. The guild configuration surface described in the README includes language, welcome and goodbye messages, autorole, automod and similar per-server settings, which is exactly the kind of data that belongs in a database rather than in the bot's memory: it has to survive restarts and be queryable per guild. Localisation runs through i18next with the i18next-fs-backend reading from the filesystem, the languages directory at the root of the repository, and the README states that translations ship for 9 languages out of the box. The top.gg integration appears as a dependency, the @top-gg/sdk, matching the README's claim that the bot supports top.gg votes with rewards, and the manifest also carries @sentry/node for error reporting, which is worth noting if you run this in an environment where telemetry is not wanted.

## Setting it up: Node 22, MongoDB, Yarn and three values in .env

The prerequisites are Node.js v22 or later, a MongoDB instance, the Yarn package manager, and a Discord application with a bot token. The setup is four steps. Clone and install:

```bash
git clone https://github.com/Androz2091/AtlantaBot.git
cd AtlantaBot
yarn install
```

Then fill the .env file, and the README is specific that at minimum you set your bot token, the MongoDB URI and your owner ID. Configuration encryption with dotenvx is optional and takes two commands:

```bash
brew install dotenvx/brew/dotenvx
dotenvx encrypt
```

Build and start:

```bash
yarn build
yarn start
```

For work in progress there is a hot reload variant, yarn dev, which runs tsx watch over src/index.ts. That is the whole setup. There is no separate configuration schema to satisfy, no migration step and no seed data described, which makes the first run short, though it also means the bot's behaviour depends entirely on what is in the database once it starts writing.

## The supplied Dockerfile expects an npm lockfile that the yarn workflow does not create

A Dockerfile is included for containerised deployments and the README gives the two commands:

```bash
docker build -t atlantabot .
docker run -d --env-file .env atlantabot
```

The image itself is a two-stage build on node:22-slim. The builder stage copies package.json and package-lock.json and runs npm ci, then compiles with npm run build. The runner stage installs the native build dependencies that canvas and the image commands need, including build-essential, libcairo2-dev, libjpeg-dev, libpango1.0-dev, libgif-dev and librsvg2-dev, then copies the compiled dist directory, the languages and assets, and the dashboard views and public folders. It sets NODE_ENV to production, exposes port 8080, and runs node dist/index.js. One inconsistency is worth flagging before you build: the documented local workflow uses Yarn, while the Dockerfile copies package-lock.json and runs npm ci, so a checkout that only has yarn.lock may fail that step until a package-lock.json exists. The port is also exposed but not published by the sample docker run command, so a dashboard would not be reachable from the host without adding a port mapping.

## GPL 3.0 in the README, ISC in the package manifest, and a request for credit

The licence field on the repository says GPL-3.0, and the README states that Atlanta is licensed under the GPL 3.0 licence with a LICENSE file in the root. The package manifest, however, records a different identifier, ISC, in its licence field. That mismatch is small but real, and it is the kind of thing worth resolving before you redistribute anything: if you package Atlanta, the terms in the LICENSE file and the terms declared in the manifest you ship are not the same. Read the LICENSE file to see which text the project actually intends. On top of that, the README asks that if you plan to use any part of the source code in your own bot, you include some form of credit, which is a request rather than a licence condition. The repository is not archived and the last push was on 2026-08-19, with v5.0.0 published on 2026-03-15 after a long gap from v4.12.0 in 2021.

## Conclusion

Atlanta suits someone running a community Discord server who wants administration, moderation, music, economy and fun commands in one self-hosted bot and wants to edit server settings from a browser rather than from chat commands. It does not suit anyone who needs a Discord bot they can customise freely in their own product, because the project asks for credit if you reuse the code, and the owner category ships an eval command, so you should read what you are deploying before you expose it. Before you run it, set the bot token, MongoDB URI and owner ID in the .env file, check which licence terms apply to your build because the README says GPL 3.0 while the package manifest records ISC, and use yarn rather than npm given that the supplied Dockerfile copies a package-lock.json the yarn workflow does not produce.

## FAQ

### How do I install and start the Atlanta Discord bot?

You need Node.js v22 or later, a MongoDB instance, Yarn and a Discord bot token. Clone the repository, run yarn install, fill in the .env file with at least your bot token, MongoDB URI and owner ID, then run yarn build and yarn start.

### What commands does Atlanta support?

The README counts 96 slash commands in 8 categories: Administration with 17, Moderation with 14, Music with 13, Economy with 15, Fun with 8, General with 20, Images with 6 and Owner with 3.

### Can I manage Atlanta from a web dashboard?

Yes. The dashboard runs with Express and EJS, and you can edit configuration, manage servers, view rankings and modify your profile from it. The code is in the dashboard folder of the repository.

### Can I run Atlanta with Docker?

A multi-stage Dockerfile is included, with docker build -t atlantabot . and docker run -d --env-file .env atlantabot documented in the README. Note that the Dockerfile copies a package-lock.json and runs npm ci, while the documented local workflow uses Yarn.

## Sources

- [Androz2091/AtlantaBot on GitHub](https://github.com/Androz2091/AtlantaBot)
- [Issues](https://github.com/Androz2091/AtlantaBot/issues)
- [License: GPL-3.0](https://github.com/Androz2091/AtlantaBot/blob/master/LICENSE)
- [README](https://github.com/Androz2091/AtlantaBot/blob/master/README.md)
- [Releases](https://github.com/Androz2091/AtlantaBot/releases)

---

Hysen Labs editorial analysis, written from the project's own repository and release notes. Cite the canonical page: https://hysenlabs.com/projects/androz2091-atlantabot
