discord-optimizer
v0.1.0
Published
Reduce Discord.js bot RAM usage with automatic optimization and restart capabilities
Maintainers
Readme
Discord Optimizer
Reduce your Discord.js bot's RAM usage with automatic optimization and restart capabilities.
Discord Optimizer is a lightweight, beginner-friendly package that helps manage your Discord bot's memory consumption through intelligent monitoring, automatic cleanup, and smart restart mechanisms.
🚀 Features
- 🧠 Smart Memory Management - Automatic cache cleanup and garbage collection
- ⚡ Auto-Restart Protection - Graceful restarts when memory limits are reached
- 📊 Real-time Monitoring - Track memory usage with configurable intervals
- 🔔 Webhook Alerts - Get notified when memory usage is high
- 🛡️ Restart Protection - Prevents multiple simultaneous restarts
- 🎯 Zero Configuration - Works out of the box with sensible defaults
- 📱 TypeScript Support - Full type definitions included
- 🔧 Beginner Friendly - One-line setup, no complex configuration needed
📦 Installation
npm install discord-optimizer🚀 Quick Start
import { Client, GatewayIntentBits } from 'discord.js';
import { MemoryGuard } from 'discord-optimizer';
const client = new Client({
intents: [GatewayIntentBits.Guilds, GatewayIntentBits.GuildMessages]
});
// ✨ One line to optimize your bot!
const optimizedClient = MemoryGuard.wrap(client, {
maxMemory: 256, // 256MB limit
autoRestart: true, // Auto-restart when limit reached
});
optimizedClient.on('ready', () => {
console.log(`Bot is ready and optimized!`);
});
optimizedClient.login('your_bot_token');That's it! Your bot now has intelligent memory management.
⚙️ Configuration Options
Basic Configuration
const optimizedClient = MemoryGuard.wrap(client, {
maxMemory: 512, // Memory limit in MB (default: 512)
autoRestart: true, // Auto-restart on limit (default: true)
optimizations: {
clearCache: true, // Clear Discord.js caches (default: true)
garbageCollect: true // Force garbage collection (default: true)
},
monitoring: {
interval: 30000, // Check every 30s (default: 30000)
logging: true, // Log memory usage (default: true)
webhook: 'https://discord.com/api/webhooks/...' // Optional alerts
}
});Advanced Configuration
const optimizedClient = MemoryGuard.wrap(client, {
maxMemory: 256,
autoRestart: true,
optimizations: {
clearCache: true,
garbageCollect: true
},
monitoring: {
interval: 15000, // More frequent checks
logging: true,
webhook: process.env.DISCORD_WEBHOOK_URL
}
});
// Listen to optimization events
optimizedClient.on('memoryLimitExceeded', (usage) => {
console.log(`⚠️ Memory limit exceeded: ${usage.heapUsed}MB`);
});
optimizedClient.on('cleanup', () => {
console.log('🧹 Memory cleanup performed');
});
optimizedClient.on('restart', () => {
console.log('🔄 Bot is restarting due to high memory usage');
});🛠️ Manual Controls
Access memory management tools directly:
// Get current memory usage
const usage = optimizedClient.memoryGuard.getMemoryUsage();
console.log(`Memory: ${usage.heapUsed}MB`);
// Force memory cleanup
optimizedClient.memoryGuard.forceCleanup();
// Manual restart
await optimizedClient.memoryGuard.restart();Example Bot Commands
optimizedClient.on('messageCreate', (message) => {
if (message.content === '!memory') {
const usage = optimizedClient.memoryGuard.getMemoryUsage();
message.reply(`💾 Memory usage: ${usage.heapUsed}MB / ${maxMemory}MB`);
}
if (message.content === '!cleanup') {
optimizedClient.memoryGuard.forceCleanup();
message.reply('🧹 Memory cleanup performed!');
}
});📊 Memory Usage Object
The getMemoryUsage() method returns:
{
rss: 150, // Resident Set Size (total memory)
heapUsed: 85, // Used heap memory
heapTotal: 120, // Total heap memory
external: 12, // External memory (C++ objects)
arrayBuffers: 8 // ArrayBuffer memory
}
// All values in MB🔔 Webhook Alerts
Get Discord notifications when memory usage is high:
const optimizedClient = MemoryGuard.wrap(client, {
maxMemory: 256,
monitoring: {
webhook: 'https://discord.com/api/webhooks/YOUR_WEBHOOK_URL'
}
});Alert Types:
- Warning (80% of limit): Yellow embed with current usage
- Critical (100% of limit): Red embed with restart/cleanup action
🔄 Restart Behavior
When memory limits are exceeded:
With Process Manager (Recommended)
# Using PM2
pm2 start bot.js --name "discord-bot"
pm2 restart discord-bot # Auto-restarts on exit🧩 Sharding Support
Discord Optimizer works perfectly with sharded bots:
// In your shard file
const client = new Client({ /* options */ });
const optimizedClient = MemoryGuard.wrap(client, {
maxMemory: 256, // Per-shard limit
monitoring: {
logging: true,
interval: 30000
}
});Each shard gets its own optimizer instance with independent memory limits and monitoring.
🔧 Troubleshooting
Bot Not Restarting
Problem: Bot exits but doesn't restart Solution: Use a process manager like PM2 or Docker
# Install PM2
npm install -g pm2
# Start your bot
pm2 start bot.js --name "my-bot"
# Bot will auto-restart when it exits📈 Performance Impact
Discord Optimizer has minimal performance impact:
- Memory overhead: < 5MB
- CPU impact: < 1% (during monitoring checks)
- Network impact: Webhook alerts only (when configured)
🤝 Contributing
We welcome contributions! Please see our Contributing Guide.
Development Setup
git clone https://github.com/ajauish/discord-optimizer.git
cd discord-optimizer
npm install
npm testRunning Tests
npm test # Run all tests
npm run test:watch # Watch mode
npm run build # Build the package📝 License
This project is licensed under the MIT License - see the LICENSE file for details.
Made with ❤️ by Abdullah Jauish
Star ⭐ this repo if Discord Optimizer helped your bot!
