npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2026 – Pkg Stats / Ryan Hefner

discord-backup.ts

v1.0.0

Published

An rewamped fork of the discord-backup module by Snayz

Readme

Discord Backup Reworked - Save, Load, and Restore with Ease! ⚡

downloadsBadge versionBadge

🚀 Ultra-fast Discord server backup module 10-15x faster than alternatives!

Note: Requires discord.js v14 or discord.js-selfbot-v13

✨ Features

  • Blazing Fast: Create backups 10-15x faster than traditional methods
  • 💾 Memory Efficient: Uses 30% less memory with optimized processing
  • 🔄 Parallel Processing: All channels and messages processed concurrently
  • 📦 Complete Backups: Channels, roles, permissions, bans, emojis, messages, and more
  • 🎯 Smart Restore: Webhook-based message restoration with perfect accuracy
  • 🔧 Highly Configurable: Fine-tune what to backup and restore
  • 🤝 Dual Support: Works with both discord.js v14 and selfbot v13

📦 Installation

npm install discord-backup.ts@latest

🚀 Quick Start

Create a Backup

import backup from "discord-backup.ts";

// Create a backup of your server
const backupData = await backup.create(guild, {
    maxMessagesPerChannel: 10,
    saveImages: true
});

console.log(`Backup created: ${backupData.id}`);

Load a Backup

import backup from "discord-backup.ts";

// Restore a backup to a server
await backup.load(backupID, guild);

// Optionally remove the backup after loading
await backup.remove(backupID);

📖 API Reference

backup.create(guild, options?)

Create a comprehensive backup of a Discord server.

Parameters:

  • guild (Guild) - The Discord server to backup
  • options (CreateOptions) - Optional configuration

Options:

{
    backupID?: string,               // Custom backup ID (auto-generated if not provided)
    maxMessagesPerChannel?: number,  // Max messages per channel (default: 10)
    jsonSave?: boolean,              // Save to JSON file (default: true)
    jsonBeautify?: boolean,          // Beautify JSON output (default: true)
    doNotBackup?: string[],          // Skip: ['roles', 'channels', 'emojis', 'bans']
    backupMembers?: boolean,         // Backup member list (default: false)
    saveImages?: boolean,            // Save images as base64 (default: true)
    selfBot?: boolean                // Use selfbot mode (default: false)
}

Returns: Promise

Example:

const backup = await backup.create(guild, {
    maxMessagesPerChannel: 100,
    saveImages: true,
    doNotBackup: ['bans'],
    jsonBeautify: true
});

backup.load(backup, guild, options?)

Load a backup onto a Discord server.

Parameters:

  • backup (string | BackupData) - Backup ID or backup data object
  • guild (Guild) - Target Discord server
  • options (LoadOptions) - Optional configuration

Options:

{
    clearGuildBeforeRestore?: boolean,  // Clear guild before restore (default: true)
    maxMessagesPerChannel?: number,     // Max messages to restore (default: 100)
    devMode?: boolean,                  // Enable debug logging (default: false)
    selfBot?: boolean                   // Use selfbot mode (default: false)
}

Returns: Promise

Example:

await backup.load('BACKUP_ID', guild, {
    clearGuildBeforeRestore: true,
    maxMessagesPerChannel: 50
});

backup.fetch(backupID)

Retrieve information about a backup.

Parameters:

  • backupID (string) - The backup ID

Returns: Promise

Example:

const info = await backup.fetch('BACKUP_ID');
console.log(`Size: ${info.size} KB`);
console.log(`Created: ${new Date(info.data.createdTimestamp)}`);

backup.remove(backupID)

Delete a backup permanently.

Parameters:

  • backupID (string) - The backup ID to remove

Returns: Promise

⚠️ Warning: This action is irreversible!


backup.list()

List all available backup IDs.

Returns: Promise<string[]>

Example:

const backups = await backup.list();
console.log(`Available backups: ${backups.join(', ')}`);

backup.setStorageFolder(path)

Change the backup storage directory.

Parameters:

  • path (string) - New storage path

Example:

backup.setStorageFolder('./my-backups');
await backup.create(guild); // Saved to ./my-backups/

🎯 Advanced Examples

Full Server Clone

import backup from "discord-backup.ts";

// Create comprehensive backup
const data = await backup.create(sourceGuild, {
    maxMessagesPerChannel: 100,
    saveImages: true,
    backupMembers: true
});

// Clone to new server
await backup.load(data, targetGuild, {
    clearGuildBeforeRestore: true,
    maxMessagesPerChannel: 100
});

console.log('Server cloned successfully!');

Selective Backup

// Backup only channels and roles
const data = await backup.create(guild, {
    doNotBackup: ['emojis', 'bans'],
    maxMessagesPerChannel: 50
});

Custom Storage

import backup from "discord-backup.ts";
import { writeFileSync } from 'fs';

// Create backup without auto-save
const data = await backup.create(guild, {
    jsonSave: false
});

// Save to custom location using your own logic
writeFileSync('./my-database/backup.json', JSON.stringify(data));

// Later, load from custom data
const loadedData = JSON.parse(readFileSync('./my-database/backup.json'));
await backup.load(loadedData, guild);

🔧 What Gets Backed Up?

Server Settings

  • Name, icon, banner, splash
  • Verification level
  • Explicit content filter
  • Default message notifications
  • AFK channel and timeout

Channels

  • All channel types (text, voice, stage, forum, media)
  • Channel names, topics, NSFW settings
  • Rate limits and permissions
  • Messages and attachments
  • Threads (public, private, announcement)

Roles

  • Role names, colors, permissions
  • Hoist and mentionable settings
  • Role hierarchy

Additional

  • Custom emojis
  • Server bans (with reasons)
  • Widget settings

Not Backed Up (Discord Limitations)

  • Server audit logs
  • Invite links
  • Vanity URLs
  • Webhooks (except those created for restore)
  • Voice channel region overrides

⚡ Performance Benchmarks

| Server Size | Traditional | discord-backup.ts | Improvement | |-------------|-------------|------------------------|-------------| | Small (10 channels) | 5s | 0.5s | 10x faster | | Medium (50 channels) | 45s | 6s | 7.5x faster | | Large (100 channels) | 120s | 12s | 10x faster |

Benchmarks measured on Node.js 20 with standard Discord API rate limits

🛠️ Bot Example

import { Client, IntentsBitField } from 'discord.js';
import backup from 'discord-backup.ts';

const client = new Client({
    intents: [
        IntentsBitField.Flags.Guilds,
        IntentsBitField.Flags.GuildMessages,
        IntentsBitField.Flags.MessageContent
    ]
});

client.on('messageCreate', async (message) => {
    if (!message.content.startsWith('!backup')) return;
    
    const args = message.content.split(' ');
    const command = args[1];

    if (command === 'create') {
        const backup = await backup.create(message.guild);
        message.reply(`✅ Backup created: ${backup.id}`);
    }
    
    if (command === 'load') {
        const backupID = args[2];
        await backup.load(backupID, message.guild);
        message.reply('✅ Backup loaded successfully!');
    }
    
    if (command === 'list') {
        const backups = await backup.list();
        message.reply(`📦 Backups: ${backups.join(', ')}`);
    }
});

client.login('YOUR_BOT_TOKEN');

🤝 Contributing

Contributions are welcome! This is an optimized fork focused on performance and reliability.

📄 License

ISC License

🙏 Credits

Based on the original discord-backup module and enhanced by Snayz.

Performance optimizations by Snayz - Achieving 10-15x speed improvements through:

  • Parallel channel processing
  • Optimized message fetching
  • Smart memory management
  • Reduced I/O operations

Made with ⚡ by Snayz