diff --git a/README.md b/README.md index ea754ce..d6cd00e 100644 --- a/README.md +++ b/README.md @@ -1,43 +1,43 @@ -# twitter_v3 — Discord Moderation Bot +# twitter_v3 — discord moderation bot -A Discord.js **v14** bot base using traditional **prefix commands** (no slash commands) and structured **Winston logging**. +a discord.js v14 bot base using traditional prefix commands (no slash commands) and structured winston logging. --- -## Features +## features -- 📨 **Prefix command system** — commands triggered by a configurable prefix (default `!`) -- 📁 **Auto-loading** — commands and events are loaded automatically from their folders -- 🔖 **Aliases** — each command can define one or more aliases -- 📝 **Winston logging** — coloured console output + rolling log files (`logs/combined.log`, `logs/error.log`) -- 🛡️ **Global error handling** — unhandled rejections and uncaught exceptions are caught and logged +- prefix command system — commands triggered by a configurable prefix (default `!`) +- auto-loading — commands and events are loaded automatically from their folders +- aliases — each command can define one or more aliases +- winston logging — coloured console output + rolling log files (`logs/combined.log`, `logs/error.log`) +- global error handling — unhandled rejections and uncaught exceptions are caught and logged --- -## Project Structure +## project structure ``` src/ -├── index.js # Entry point — creates the client, loads handlers +├── index.js # entry point — creates the client, loads handlers ├── commands/ │ ├── help.js # !help — lists commands or shows command detail │ └── ping.js # !ping — latency check ├── events/ -│ ├── ready.js # Fires once when the bot is online -│ └── messageCreate.js # Parses every message for prefix commands +│ ├── ready.js # fires once when the bot is online +│ └── messageCreate.js # parses every message for prefix commands ├── handlers/ -│ ├── commandHandler.js # Reads src/commands/ and registers commands -│ └── eventHandler.js # Reads src/events/ and registers Discord events +│ ├── commandHandler.js # reads src/commands/ and registers commands +│ └── eventHandler.js # reads src/events/ and registers discord events └── utils/ - └── logger.js # Winston logger instance -logs/ # Created automatically at runtime (git-ignored) + └── logger.js # winston logger instance +logs/ # created automatically at runtime (git-ignored) ``` --- -## Setup +## setup -### 1. Clone & install dependencies +### 1. clone & install dependencies ```bash git clone https://github.com/yhqe/twitter_v3.git @@ -45,58 +45,58 @@ cd twitter_v3 npm install ``` -### 2. Configure environment variables +### 2. configure environment variables ```bash cp .env.example .env ``` -Open `.env` and fill in: +open `.env` and fill in: -| Variable | Required | Description | +| variable | required | description | |-------------|----------|------------------------------------------------------| -| `BOT_TOKEN` | ✅ Yes | Your bot token from the Discord Developer Portal | -| `PREFIX` | ❌ No | Command prefix (default: `!`) | -| `GUILD_ID` | ❌ No | Test server ID (handy for dev utilities) | +| `BOT_TOKEN` | yes | your bot token from the discord developer portal | +| `PREFIX` | no | command prefix (default: `!`) | +| `GUILD_ID` | no | test server id (handy for dev stuff) | -### 3. Enable the Message Content intent +### 3. enable the message content intent -Go to your application in the [Discord Developer Portal](https://discord.com/developers/applications), open **Bot → Privileged Gateway Intents**, and enable **Message Content Intent**. This is required for prefix commands. +go to your application in the [discord developer portal](https://discord.com/developers/applications), open **bot → privileged gateway intents**, and enable **message content intent**. you need this for prefix commands. -### 4. Start the bot +### 4. start the bot ```bash -# Production +# production npm start -# Development (auto-restarts on file changes, Node.js 18+) +# development (auto-restarts on file changes, node.js 18+) npm run dev ``` --- -## Adding Commands +## adding commands -Create a file in `src/commands/`. The handler will load it automatically on next start. +create a file in `src/commands/`. the handler will load it automatically on next start. ```js 'use strict'; module.exports = { - name: 'example', // Primary command name (also used as the key) + name: 'example', // primary command name (also used as the key) description: 'An example command.', - aliases: ['ex'], // Optional aliases - usage: 'example ', // Shown in !help example + aliases: ['ex'], // optional aliases + usage: 'example ', // shown in !help example async execute(client, message, args) { - await message.reply(`You said: ${args.join(' ')}`); + await message.reply(`You said: ${args.join(' ')}`); }, }; ``` -## Adding Events +## adding events -Create a file in `src/events/`. Set `once: true` if it should fire only once (e.g. `ready`). +create a file in `src/events/`. set `once: true` if it should fire only once (e.g. `ready`). ```js 'use strict'; @@ -107,14 +107,15 @@ module.exports = { name: Events.GuildMemberAdd, async execute(client, member) { - console.log(`${member.user.tag} joined ${member.guild.name}`); + console.log(`${member.user.tag} joined ${member.guild.name}`); }, }; ``` --- -## Logging +## logging + +log files are written to the `logs/` directory (git-ignored). the log level defaults to `info` and can be overridden with the `LOG_LEVEL` environment variable (e.g. `LOG_LEVEL=debug npm start`). -Log files are written to the `logs/` directory (git-ignored). The log level defaults to `info` and can be overridden with the `LOG_LEVEL` environment variable (e.g. `LOG_LEVEL=debug npm start`).