twitter_v3 — Discord Moderation Bot

A Discord.js v14 bot base using traditional prefix commands (no slash commands) and structured Winston logging.


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

Project Structure

src/
├── 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
├── handlers/
│   ├── 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)

Setup

1. Clone & install dependencies

git clone https://github.com/yhqe/twitter_v3.git
cd twitter_v3
npm install

2. Configure environment variables

cp .env.example .env

Open .env and fill in:

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)

3. Enable the Message Content intent

Go to your application in the Discord Developer Portal, open Bot → Privileged Gateway Intents, and enable Message Content Intent. This is required for prefix commands.

4. Start the bot

# Production
npm start

# Development (auto-restarts on file changes, Node.js 18+)
npm run dev

Adding Commands

Create a file in src/commands/. The handler will load it automatically on next start.

'use strict';

module.exports = {
  name: 'example',           // Primary command name (also used as the key)
  description: 'An example command.',
  aliases: ['ex'],           // Optional aliases
  usage: 'example <text>',   // Shown in !help example

  async execute(client, message, args) {
    await message.reply(`You said: ${args.join(' ')}`);
  },
};

Adding Events

Create a file in src/events/. Set once: true if it should fire only once (e.g. ready).

'use strict';

const { Events } = require('discord.js');

module.exports = {
  name: Events.GuildMemberAdd,

  async execute(client, member) {
    console.log(`${member.user.tag} joined ${member.guild.name}`);
  },
};

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).

S
Description
all-purpose discord bot
Readme
514 KiB
0 Stars 1 Watchers 0 Forks
Languages
JavaScript 100%