custom-dbs
Nano

Nano

index.js
// Connect to the database
 
const nano = require('nano')('http://admin:mypassword@localhost:5984');
let giveawayDB;
 
// Check the DB
(async () => {
    if (!(await nano.db.list()).includes('giveaways')) await nano.db.create('giveaways');
    giveawayDB = nano.use('giveaways');
    // Start the manager only after the DB got checked
    client.giveawaysManager._init();
})();
 
const { GiveawaysManager } = require('givify');
const GiveawayManagerWithOwnDatabase = class extends GiveawaysManager {
    // This function is called when the manager needs to get all giveaways which are stored in the database.
    async getAllGiveaways() {
        // Get all giveaways from the database
        return (await giveawayDB.list({ include_docs: true })).rows.map((r) => r.doc);
    }
 
    // This function is called when a giveaway needs to be saved in the database.
    async saveGiveaway(messageId, giveawayData) {
        // Add the new giveaway data to the database
        await giveawayDB.insert(giveawayData, messageId);
        // Don't forget to return something!
        return true;
    }
 
    // This function is called when a giveaway needs to be edited in the database.
    async editGiveaway(messageId, giveawayData) {
        // Get the old giveaway data from the database
        const giveaway = await giveawayDB.get(messageId);
        // Edit the giveaway
        await giveawayDB.insert({ ...giveaway, ...giveawayData });
        // Don't forget to return something!
        return true;
    }
 
    // This function is called when a giveaway needs to be deleted from the database.
    async deleteGiveaway(messageId) {
        // Get the giveaway data from the database
        const giveaway = await giveawayDB.get(messageId);
        // Remove the giveaway data from the database
        await giveawayDB.destroy(messageId, giveaway._rev);
        // Don't forget to return something!
        return true;
    }
};
 
// Create a new instance of your new class
const manager = new GiveawayManagerWithOwnDatabase(
    client,
    {
        default: {
            botsCanWin: false,
            embedColor: '#FF0000',
            embedColorEnd: '#000000',
            reaction: '🎉'
        }
    },
    false // ATTENTION: Add "false" in order to not start the manager until the DB got checked
);
 
// We now have a giveawaysManager property to access the manager everywhere!
client.manager = manager;