A Discord selfbot that does the boring stuff for you —
presence, auto-reactions, message sniping, and juggling a pile of accounts.
Basically, it does the tedious Discord stuff so you don't have to think about it — keeps your presence looking alive, fires off reactions and replies on its own, grabs deleted messages before they vanish, and lets you run a handful of accounts at the same time. Everything runs off short prefix commands, with MongoDB holding your setup between restarts.
I threw this together a few years back, got bored of it, and it sat in a folder collecting dust for a while. Dug it up recently, cleaned out the mess, wrote some actual docs, and here it is.
Warning
Selfbots violate Discord's Terms of Service and may result in account termination. This project is provided as-is, without warranty of any kind. It has only been lightly re-tested since being revived, so expect rough edges. You use it entirely at your own risk.
Presence & Status
- Custom Rich Presence with buttons, images, and streaming / listening / watching / playing modes
- Live activity from Last.fm (now-playing) and Roblox game tracking
- AFK auto-responder and rotating status quotes
Automation
- Auto-react to specific users — with multi-account support
- Auto-reply to users, or mirror their messages (mimic)
- Auto-delete messages from targeted users
Multi-Account
- Load and manage alt accounts (nickname, status, bulk token upload)
- Join servers across multiple tokens and boost with Nitro
Utility & Fun
- Snipe deleted messages, edited messages, and Nitro gifts
- Bulk-purge your own messages
- Built-in to-do list, spam tools, and a set of fun percentage commands
- Node.js
>= 18(v22 LTS recommended) - A MongoDB connection string — local or Atlas
- A Discord account token — it is a Discord bot, after all
Clone the repo and install dependencies:
git clone https://github.com/revxshafi/TooLazy.git
cd TooLazy
npm installThen configure it and start it:
npm start # start the bot
npm run dev # install dependencies, then start
node bot.js # run directlyThat's the whole thing. If you have Node and MongoDB, you're done — the rest of this section is per-platform hand-holding for getting those two installed.
Tip
Too lazy for even that? Fitting. There's a setup script that installs dependencies and creates your .env for you:
bash setup.sh # macOS, Linux, Termux
setup.bat # Windows (or just double-click it)It's safe to re-run and won't touch an existing .env. You still have to fill in your token afterward — it's lazy, not psychic.
macOS / Linux
The easy way — one command does everything below:
bash setup.shThe manual way — install Node (via nvm, recommended):
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.40.1/install.sh | bash
nvm install 22For MongoDB, either point MONGO at a free Atlas cluster (easiest), or run it locally:
# macOS (Homebrew)
brew tap mongodb/brew && brew install mongodb-community
brew services start mongodb-community
# Debian / Ubuntu — see MongoDB's official docs for the apt setup, then:
sudo systemctl start mongodThen follow the shared steps above.
Windows
- Install Node 22 LTS from nodejs.org (the installer adds it to PATH for you).
- For MongoDB, point
MONGOat a free Atlas cluster, or install MongoDB Community Server and let it run as a service. - Open PowerShell or Windows Terminal in the project folder, then either run
setup.bat(or double-click it) to auto-install everything, or follow the shared steps above manually.
If npm isn't recognized after installing Node, close and reopen your terminal so PATH refreshes.
Android / Termux — for the "run it on my phone" crowd
It runs on a phone. That isn't the same as it being a good idea, but here you go.
pkg update && pkg upgrade
pkg install nodejs git
git clone https://github.com/revxshafi/TooLazy.git
cd TooLazy
bash setup.shThat script installs the dependencies and creates your .env. Two things it can't do for you, so read on before opening an issue:
1. MongoDB does not run on Termux. Don't pkg install mongodb — the package isn't there, and it isn't coming. Point your MONGO value at a free Atlas cluster instead.
2. There's no editor and no mouse. You can't tap the config to open it. Install one:
pkg install nano
nano .env # edit, then Ctrl+O to save, Ctrl+X to exitPrefer configuring inline? Same command, different file: nano data/config.js.
A few more things that will trip you up:
- Run
termux-setup-storageif you need files from outside Termux (e.g. for token uploads). - Keep the app in the foreground — Android will kill it in the background, and then you'll insist the bot "randomly stops."
npm installis slow on mobile. It hasn't frozen. Wait.
Then npm start. You are now running a ToS-breaking selfbot off a phone. Godspeed.
TooLazy can be configured two ways, and you can mix them freely:
- Environment variables — copy the example file and fill it in.
- Inline — edit the defaults directly in
data/config.js.
For each value, the environment variable wins if it's set; otherwise the inline default in data/config.js is used. So you can keep, say, your userID inline while loading your token from .env.
cp .env.example .envThen edit .env:
TOKEN="your_discord_token"
MONGO="your_mongodb_connection_string"
USER_ID="your_discord_user_id"
PREFIX="."
LASTFM_USER="your_lastfm_username"
LASTFM_API_KEY="your_lastfm_api_key"
SPOTIFY_CLIENT_ID="your_spotify_client_id"
SPOTIFY_CLIENT_SECRET="your_spotify_client_secret"
GIPHY_KEY="your_giphy_api_key"
ROBLOX_COOKIE="your_roblox_cookie"Only TOKEN, MONGO, and USER_ID are required. The rest enable optional integrations — Last.fm / Spotify rich presence, Roblox tracking, and Giphy-powered actions.
How to get your Discord token
[!WARNING] Never share your token with anyone. It grants full access to your account.
Open the Discord console (Ctrl + Shift + I → Console) and run this to copy your token to the clipboard:
window.webpackChunkdiscord_app.push([
[Symbol()],
{},
req => {
if (!req.c) return;
for (let m of Object.values(req.c)) {
try {
if (!m.exports || m.exports === window) continue;
if (m.exports?.getToken) return copy(m.exports.getToken());
for (let ex in m.exports) {
if (m.exports?.[ex]?.getToken && m.exports[ex][Symbol.toStringTag] !== 'IntlMessagesProxy') return copy(m.exports[ex].getToken());
}
} catch {}
}
},
]);
window.webpackChunkdiscord_app.pop();
console.log('%cWorked!', 'font-size: 50px; color: green;');
console.log('%cYou now have your token in the clipboard!', 'font-size: 16px;');How to get your user ID
- Open Discord and go to User Settings.
- Go to the Advanced tab and enable Developer Mode.
- Right-click your own profile and choose Copy User ID.
The default prefix is . and can be changed via the PREFIX env var, in data/config.js, or at runtime with setprefix.
Note
setprefix is triggered without a prefix (e.g. type setprefix !) — it's how you set or disable the prefix in the first place.
| Command | Description |
|---|---|
setprefix <char> |
Change the command prefix (single character) |
setprefix off |
Disable the prefix (use commands without one) |
General
| Command | Description |
|---|---|
.help [category/command] |
Show command list or command details |
.credits |
Show developer credits |
Rich Presence
| Command | Description |
|---|---|
.rpc start |
Enable RPC |
.rpc stop |
Disable RPC |
.rpc type <streaming/watching/listening/playing> |
Set RPC type |
.rpc mode <basic/advanced> |
Set RPC mode |
.rpc img |
Set RPC image (attach an image) |
.rpc btn <1/2> <text/disable> [link] |
Set RPC buttons |
.ms |
Toggle music RPC visibility |
AFK
| Command | Description |
|---|---|
.afk [status] |
Set AFK with an optional status |
.afk true [status] |
Set AFK and hide music |
.afk off |
Disable AFK |
Auto-Reactions
| Command | Description |
|---|---|
.react add <user> <emojis...> |
Add auto-reactions for a user |
.react rmv <user> <emojis...> |
Remove specific reactions |
.react end <user> |
Remove all reactions for a user |
.react list [user] |
List auto-reaction configs |
.react trigger [user] |
Toggle reactions on/off |
Flag: -multi enables reactions on all alt accounts.
Auto-Reply & Mimic
| Command | Description |
|---|---|
.autoreply start <user> <message> |
Auto-reply to a user |
.autoreply stop <user> |
Stop auto-replying |
.mimic start <user> |
Mirror a user's messages |
.mimic stop <user> |
Stop mimicking |
Multi-Account
| Command | Description |
|---|---|
.alts name <name> |
Set nickname on all alts |
.alts status <status> |
Set status on all alts |
.alts upload |
Upload tokens via attachment |
.alts upload clear |
Clear all alt accounts |
.clients [page/index] |
List loaded accounts |
.join <code> [count] [boost] |
Join a server with tokens |
Utility
| Command | Description |
|---|---|
.purge <count> |
Delete your recent messages |
.snipe |
Snipe the last deleted message |
.editsnipe |
Snipe the last edited message |
.nitrosnipe <on/off> |
Toggle Nitro gift sniping |
.autodelete <start/end/list> <user> |
Auto-delete a user's messages |
.user <user> |
Get user info |
.voiceinvite |
Get the current VC invite link |
.todo |
Task management (add/rmv/done/undo/list) |
Fun
| Command | Description |
|---|---|
.actions <action> <user> |
Perform an action (kiss, hug, slap, etc.) |
.aura |
Check your aura |
.chad |
How chad are you? |
.cupsize |
Random cup size |
.femboy |
Femboy percentage |
.gay |
Gay percentage |
.ppsize |
PP size |
.sigma |
Sigma rating |
.simp |
Simp percentage |
.skibidi |
Skibidi rating |
.sus |
Sus rating |
Last.fm
| Command | Description |
|---|---|
.nowplaying / .np |
Show the currently playing track |
.recent |
Show recent tracks |
.top |
Show top tracks |
TooLazy/
├── bot.js # Entry point
├── data/
│ ├── config.js # Main configuration
│ ├── files/ # Token files, word lists
│ └── logs/ # Command logs
├── commands/
│ ├── base/ # Credits, help
│ ├── chatpack/ # Spam, auto-reply, mimic
│ ├── fun/ # Fun commands
│ ├── lastfm/ # Last.fm integration
│ ├── multi/ # Multi-account management
│ ├── presence/ # RPC, AFK, quotes
│ └── utility/ # Snipe, purge, todo, etc.
├── events/ # Discord event handlers
├── handlers/ # Command/event/error loaders
├── models/ # MongoDB schemas
└── package.json
Contributions are welcome — all of them. If you like the project and want to make it better, open a pull request; anything from a new command to a typo fix is fair game.
Not a coder, or just don't have the time to dig in? That's fine too. If you run into a bug or something acting weird, drop it in the Issues tab and I'll do my best to fix it.
Currently maintained by Reversal (@revxshafi).
Originally created by Resilience (@resilynx), who built it for fun and later abandoned it.
Released under the MIT License.