Complete Guide to Discord Bot Hosting in 2025

Mamba Host Team
6 min read
Complete Guide to Discord Bot Hosting in 2025
Quick Answer

Discord bot hosting requires 512MB-1GB RAM, Node.js or Python runtime, and 24/7 uptime. Professional hosting starts at $1.99/mo with auto-restart, DDoS protection, and full control panel access. Free options like Replit sleep after inactivity, while paid hosting guarantees 99.9% uptime for your Discord community.

Discord bots power communities by automating tasks, moderating content, and enhancing user experience. This guide covers everything you need to host your Discord bot professionally.

Why Host Your Bot?

Free hosting has limitations:

  • Replit/Glitch: Sleep after inactivity
  • Heroku Free: Discontinued
  • Self-hosting: Requires 24/7 computer

Professional hosting offers:

  • ✅ 99.9% uptime guarantee
  • ✅ Auto-restart on crashes
  • ✅ No sleep/downtime
  • ✅ Scalable resources
  • ✅ Professional support

Choosing Your Language

Node.js (Discord.js)

Best for: Beginners, JavaScript developers

const { Client, GatewayIntentBits } = require('discord.js');
const client = new Client({
  intents: [
    GatewayIntentBits.Guilds,
    GatewayIntentBits.GuildMessages
  ]
});

client.on('ready', () => {
  console.log(`Logged in as ${client.user.tag}!`);
});

client.on('messageCreate', message => {
  if (message.content === '!ping') {
    message.reply('Pong!');
  }
});

client.login(process.env.DISCORD_TOKEN);

Pros:

  • Easy to learn
  • Large community
  • Fast development
  • Many libraries

Python (discord.py)

Best for: Python developers, AI bots

import discord
from discord.ext import commands
import os

bot = commands.Bot(command_prefix='!')

@bot.event
async def on_ready():
    print(f'Logged in as {bot.user.name}')

@bot.command()
async def ping(ctx):
    await ctx.send('Pong!')

bot.run(os.getenv('DISCORD_TOKEN'))

Pros:

  • Clean syntax
  • Great for AI/ML
  • Excellent for data processing
  • Strong libraries

Bot Setup Prerequisites

1. Create Discord Application

  1. Go to Discord Developer Portal
  2. Click “New Application”
  3. Enable required intents:
    • Presence Intent
    • Server Members Intent
    • Message Content Intent
  4. Copy bot token (keep it secret!)

2. Required Files

package.json (Node.js)

{
  "name": "my-discord-bot",
  "version": "1.0.0",
  "main": "index.js",
  "scripts": {
    "start": "node index.js"
  },
  "dependencies": {
    "discord.js": "^14.14.1",
    "dotenv": "^16.3.1"
  }
}

requirements.txt (Python)

discord.py==2.3.2
python-dotenv==1.0.0
aiohttp==3.9.1

3. Environment Variables

.env file

DISCORD_TOKEN=your_bot_token_here
PREFIX=!
GUILD_ID=your_server_id

Never commit tokens to Git!

Deployment Best Practices

Project Structure

my-bot/
├── commands/
│   ├── moderation.js
│   ├── fun.js
│   └── utility.js
├── events/
│   ├── ready.js
│   └── messageCreate.js
├── config/
│   └── config.json
├── .env
├── .gitignore
├── index.js
└── package.json

Error Handling

// Proper error handling
process.on('unhandledRejection', error => {
  console.error('Unhandled promise rejection:', error);
});

client.on('error', error => {
  console.error('Discord client error:', error);
});

// Graceful shutdown
process.on('SIGTERM', () => {
  console.log('SIGTERM received, closing bot gracefully');
  client.destroy();
  process.exit(0);
});

Auto-Restart Configuration

PM2 (Process Manager)

{
  "apps": [{
    "name": "discord-bot",
    "script": "index.js",
    "watch": false,
    "max_restarts": 10,
    "restart_delay": 5000,
    "autorestart": true
  }]
}

Resource Requirements

Bot Size Guidelines

Bot UsersRAMCPUPlan
1-10 servers512MB0.25 vCPUStarter
10-50 servers1GB0.5 vCPUPro
50-100 servers2GB1 vCPUPremium
100+ servers4GB+2+ vCPUCustom

Memory Optimization

// Use cache wisely
client.options.makeCache = Options.cacheWithLimits({
  MessageManager: 200, // Cache last 200 messages
  PresenceManager: 0,  // Don't cache presences
  GuildMemberManager: 0 // Don't cache all members
});

// Sweep cache periodically
setInterval(() => {
  const guilds = client.guilds.cache.size;
  client.guilds.cache.sweep(guild => guild.id !== 'main_guild_id');
  console.log(`Swept ${guilds - client.guilds.cache.size} guilds`);
}, 3600000); // Every hour

Moderation Commands

// Kick command
client.on('messageCreate', async message => {
  if (message.content.startsWith('!kick')) {
    if (!message.member.permissions.has('KICK_MEMBERS')) {
      return message.reply('You need kick permissions!');
    }

    const member = message.mentions.members.first();
    if (!member) return message.reply('Please mention a user');

    await member.kick();
    message.reply(`${member.user.tag} has been kicked`);
  }
});

Welcome Messages

client.on('guildMemberAdd', member => {
  const channel = member.guild.channels.cache.find(
    ch => ch.name === 'welcome'
  );

  if (!channel) return;

  channel.send(
    `Welcome to the server, ${member}! We now have ${member.guild.memberCount} members!`
  );
});

Economy System

const economy = new Map();

client.on('messageCreate', async message => {
  if (message.content === '!daily') {
    const userId = message.author.id;
    const amount = 100;

    economy.set(userId, (economy.get(userId) || 0) + amount);
    message.reply(`You received ${amount} coins! Total: ${economy.get(userId)}`);
  }
});

Security Best Practices

1. Token Protection

// ❌ BAD
const token = 'MTIzNDU2Nzg5MDEyMzQ1Njc4.ABCDEF.GHIJKLMNOP';

// ✅ GOOD
require('dotenv').config();
const token = process.env.DISCORD_TOKEN;

2. Permission Checks

// Always verify permissions
if (!message.member.permissions.has('ADMINISTRATOR')) {
  return message.reply('Admin only!');
}

3. Rate Limiting

const cooldowns = new Map();

client.on('messageCreate', message => {
  if (cooldowns.has(message.author.id)) {
    return message.reply('Please wait before using this command again');
  }

  cooldowns.set(message.author.id, true);
  setTimeout(() => cooldowns.delete(message.author.id), 5000);
});

Slash Commands (Modern Approach)

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

const data = new SlashCommandBuilder()
  .setName('ping')
  .setDescription('Replies with Pong!');

async function execute(interaction) {
  await interaction.reply('Pong!');
}

module.exports = { data, execute };

Database Integration

SQLite (Simple)

const sqlite3 = require('sqlite3').verbose();
const db = new sqlite3.Database('bot.db');

db.run(`CREATE TABLE IF NOT EXISTS users (
  id TEXT PRIMARY KEY,
  coins INTEGER DEFAULT 0
)`);

MongoDB (Scalable)

const mongoose = require('mongoose');

mongoose.connect(process.env.MONGODB_URI);

const userSchema = new mongoose.Schema({
  userId: String,
  coins: { type: Number, default: 0 }
});

const User = mongoose.model('User', userSchema);

Monitoring & Logging

// Log bot statistics
setInterval(() => {
  console.log(`
    Servers: ${client.guilds.cache.size}
    Users: ${client.users.cache.size}
    Channels: ${client.channels.cache.size}
    Memory: ${(process.memoryUsage().heapUsed / 1024 / 1024).toFixed(2)} MB
  `);
}, 3600000); // Every hour

Common Issues & Solutions

Bot Goes Offline

  • Check token validity
  • Verify intents are enabled
  • Check error logs
  • Ensure auto-restart is configured

High Memory Usage

  • Implement cache sweeping
  • Limit message caching
  • Disable unused intents
  • Use efficient data structures

Slow Response Times

  • Optimize database queries
  • Use async/await properly
  • Implement command cooldowns
  • Upgrade hosting plan

Deployment Checklist

  • Bot token secured in .env
  • .gitignore includes .env
  • All required intents enabled
  • Error handling implemented
  • Auto-restart configured
  • Commands tested
  • Permissions verified
  • Logging enabled
  • Backup system ready

Hosting Your Bot with Mamba Host

Our Discord bot hosting includes:

  • ✅ 24/7 uptime monitoring
  • ✅ Auto-restart on crashes
  • ✅ Node.js & Python support
  • ✅ FTP/SFTP access
  • ✅ Environment variables editor
  • ✅ Real-time logs
  • ✅ Database support

View Discord Bot Hosting Plans


Last updated: September 28, 2025

Ready to Get Started?

Deploy your game server or Discord bot in minutes with Mamba Host's powerful infrastructure.