Skip to content

totalo-dev/botdiscord

Folders and files

NameName
Last commit message
Last commit date

Latest commit

Β 

History

16 Commits
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 

Repository files navigation

# bot-discordbot

Discord bot built with `discord.js`, `distube`, and `TypeScript` for discord servers.

## ⚑ Quick Start

git clone https://github.com/totalo-dev/botdiscord.git
cd botdiscord
npm install


Create `.env` in the root:
DISCORD_TOKEN=your_token_here


Enable in [Discord Developer Portal](https://discord.com/developers/applications) β†’ Bot β†’ Privileged Gateway Intents:
- βœ… MESSAGE CONTENT INTENT
- βœ… SERVER MEMBERS INTENT

npm run dev       # development
npm run build && npm start  # production

> Full setup guide below ↓

## Installation

### 1. Clone the repository

git clone https://github.com/totalo-dev/botdiscord.git
cd botdiscord


### 2. Install dependencies

npm install

### 3. Create the `.env` file

Create a `.env` file in the root of the project with the following content:

DISCORD_TOKEN=your_token_here

> The bot token is obtained from the Discord Developer Portal: [https://discord.com/developers/applications](https://discord.com/developers/applications)

### 4. Configure Discord Privileged Intents

The bot requires 2 mandatory Gateway Intents to be enabled in the Discord Developer Portal.

Go to [https://discord.com/developers/applications](https://discord.com/developers/applications) β†’ select your application β†’ **Bot** β†’ scroll to **Privileged Gateway Intents** and enable:

| Intent | Required for |
| ------ | ------------ |
| MESSAGE CONTENT INTENT | Reading message content to process prefix commands (`<command`). Without this, the bot starts but never responds to any command. |
| SERVER MEMBERS INTENT | `guildMemberAdd` (auto-role), `guildMemberRemove` (member log), and accurate member counts in `<serverinfo`. Without this, these features are completely non-functional. |
| PRESENCE INTENT | Not required β€” can be left disabled. |

> ⚠️ Both MESSAGE CONTENT and SERVER MEMBERS intents are mandatory. The bot will connect to Discord without them but will be completely unresponsive.

### 5. Invite scopes and slash commands

When adding the bot to a server, the OAuth2 invite must include both scopes:

| Scope | Required for |
| ----- | ------------ |
| `bot` | Bot connection, permissions, messages, moderation, voice, and events |
| `applications.commands` | Slash commands (`/command`) |

Slash commands are registered automatically when the bot starts. They are currently registered globally through Discord, so new or changed commands can take a while to appear in servers.

Most commands are available both as prefix commands (`<command`) and slash commands (`/command`). At the moment, `memberlog`, `welcome`, and `poll` are prefix-only.

### 6. (Optional) YouTube cookies

To avoid YouTube blocking issues in production, create a `cookies.json` file in the root of the project with your YouTube account cookies.

Use `cookies.example.json` as a reference for the correct format.

> Never commit `cookies.json` (already included in `.gitignore`).
> Use a dedicated Google account β€” never your personal account.

### 7. Start the bot

Development mode:

npm run dev

Production mode:

npm run build
npm start

## Automatically created files

| File                        | Created when                   |
| --------------------------- | ------------------------------ |
| `data/xp.json`              | First user gains XP            |
| `data/reminders.json`       | First reminder is set          |
| `data/blockedChannels.json` | First channel is blocked       |
| `data/autoRoles.json`       | First auto-role is set         |
| `data/memberLog.json`       | First member log is configured |
| `data/welcome.json`         | First welcome is configured    |

## Project structure

botdiscord/
β”œβ”€β”€ src/
β”‚   β”œβ”€β”€ commands/
β”‚   β”œβ”€β”€ config/
β”‚   β”œβ”€β”€ events/
β”‚   β”œβ”€β”€ services/
β”‚   β”œβ”€β”€ utils/
β”‚   └── index.ts
β”œβ”€β”€ data/
β”œβ”€β”€ .env
β”œβ”€β”€ cookies.json          (optional)
β”œβ”€β”€ cookies.example.json
β”œβ”€β”€ tsconfig.json
└── package.json

## Features

### Slash commands
- All commands support both prefix (`<comando`) and slash commands (`/comando`)
- Slash commands are registered globally on startup
- Slash commands respect the same cooldowns, admin-only restrictions and channel blocking as prefix commands

### XP & Rank system
- Users automatically gain XP (15–25) by sending messages, with a 60s cooldown per user
- XP formula to level up: `100 Γ— levelΒ²`
- On level up, the bot sends a congratulations DM to the user
- Persistent across restarts (`data/xp.json`)

### Reminders
- Users can set DM reminders with a time and message
- Supports `s`, `m`, `h`, `d` time formats β€” maximum 7 days
- Reminders persist across restarts and fire immediately if missed (`data/reminders.json`)

### Auto-role
- Automatically assigns a configured role to every new member that joins
- Configured per server by admins
- Persistent across restarts (`data/autoRoles.json`)

### Member log
- Logs member departures to a configured text channel
- Shows username, ID, join date, roles held, and remaining member count
- Can be enabled/disabled per server by admins β€” no cache is accumulated when disabled
- Persistent across restarts (`data/memberLog.json`)

### Welcome messages
- Sends a customizable welcome message when a new member joins
- Configured per server by admins via `<welcome #channel [message]`
- Supports `{user}` and `{server}` placeholders in the message
- Can be enabled/disabled independently β€” no cache when disabled
- Persistent across restarts (`data/welcome.json`)

### Channel blocking
- Admins can block specific channels so the bot ignores non-admin commands there
- Admins are always exempt and can use all commands in blocked channels
- Persistent across restarts (`data/blockedChannels.json`)

## Available commands

Commands listed below use the prefix form. All commands are also available as slash commands (`/ping`, `/play`, `/rank`, etc.).

### General

| Command              | Alias            | Cooldown | Description       |
| -------------------- | ---------------- | -------- | ----------------- |
| `<ping`              | `<p`             | 3s       | Check bot latency |
| `<help`              | `<h`, `<ajuda`   | 5s       | List all commands |
| `<avatar [@user]`    | `<av`            | 5s       | Show user avatar  |
| `<userinfo [@user]`  | `<ui`, `<user`   | 5s       | User info         |
| `<serverinfo`        | `<si`, `<server` | 5s       | Server info       |

### Voice πŸ”’

| Command           | Alias           | Cooldown | Description         |
| ----------------- | --------------- | -------- | ------------------- |
| `<enter {name}`   | `<e`, `<join`   | 1s       | Join voice channel  |
| `<getout`         | `<go`, `<leave` | 1s       | Leave voice channel |

### Music

| Command             | Alias         | Cooldown | Description          |
| ------------------- | ------------- | -------- | -------------------- |
| `<play {name/url}`  | `<pl`         | 3s       | Play YouTube music   |
| `<pause`            | `<pa`         | 3s       | Pause music          |
| `<resume`           | `<re`         | 3s       | Resume music         |
| `<skip`             | `<sk`, `<s`   | 3s       | Skip current song    |
| `<stop`             | `<st`         | 3s       | Stop and clear queue |
| `<loop`             | `<l`          | 3s       | Toggle loop mode     |
| `<queue`            | `<q`, `<fila` | 5s       | Show queue           |
| `<nowplaying`       | `<np`         | 5s       | Current song info    |

### Moderation πŸ”’

| Command                | Alias        | Cooldown | Description                          |
| ---------------------- | ------------ | -------- | ------------------------------------ |
| `<ban @user [reason]`  | `<b`         | 1s       | Ban a member                         |
| `<unban {id} [reason]` | `<ub`        | 1s       | Remove a ban by user ID              |
| `<clear {1-100}`       | `<cl`        | 1s       | Delete messages                      |
| `<blockchat`           | `<bc`        | 1s       | Block current channel for the bot    |
| `<blockchat off`       | β€”            | β€”        | Unblock current channel              |
| `<blockchat list`      | β€”            | β€”        | List all blocked channels            |
| `<autorole @role`      | `<ar`        | 1s       | Set auto-role for new members        |
| `<autorole off`        | β€”            | β€”        | Remove auto-role                     |
| `<autorole`            | β€”            | β€”        | Show current auto-role               |
| `<memberlog #channel`  | `<ml`        | 1s       | Enable member leave log in a channel |
| `<memberlog off`       | β€”            | β€”        | Disable member log                   |
| `<memberlog`           | β€”            | β€”        | Show current member log status       |
| `<welcome #channel`    | `<wc`        | 1s       | Enable welcome messages              |
| `<welcome off`         | β€”            | β€”        | Disable welcome messages             |
| `<welcome`             | β€”            | β€”        | Show current welcome config          |

### Rank & XP

| Command           | Alias       | Cooldown | Description       |
| ----------------- | ----------- | -------- | ----------------- |
| `<rank`           | `<r`, `<xp` | 10s      | Your level and XP |
| `<rank [@user]`   | β€”           | β€”        | Another user's profile |
| `<rank top`       | β€”           | β€”        | Server top 10     |

### Utility

| Command                  | Alias              | Cooldown | Description        |
| ------------------------ | ------------------ | -------- | ------------------ |
| `<remind {time} {msg}`   | `<rm`, `<lembrete` | 30s      | DM reminder        |
| `<coinflip`              | `<cf`, `<moeda`    | 3s       | Flip a coin        |
| `<poll {question}`       | `<votacao`, `<voto` | 10s      | Create a poll      |
| `<botinfo`               | `<bi`, `<info`     | 10s      | Bot technical info |
| `<donate`                | `<d`, `<apoiar`    | 10s      | Support the bot    |

> πŸ”’ Admin-only commands require the Administrator permission.

## Additional resources

- πŸ“„ [VPS deployment guide](docs/guia-para-subir-em-vps.pdf)

## Main dependencies

| Package | Purpose |
| ------- | ------- |
| `discord.js` | Discord API client |
| `distube` | Music playback engine |
| `@distube/youtube` | YouTube plugin for DisTube |
| `@discordjs/voice` | Voice channel connections |
| `ffmpeg-static` | Bundled FFmpeg binary |
| `dotenv` | Environment variable loader |
| `typescript` | TypeScript compiler |
| `ts-node-dev` | Development runner with hot reload |

Β© 2026 Totalo β€” All rights reserved.

About

Generic discord bot developed in TypeScript with AI for command automation, server moderation, and adding custom features.

Topics

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors