UNPKG

tritan-starboards

Version:
79 lines (64 loc) 3.44 kB
# Custom database You can use your custom database to save starboards, instead of the json files (the "database" by default for discord-starboards). For this, you will need to extend the `StarboardsManager` class, and replace some methods with your custom ones. There are 4 methods you will need to replace: - `getAllStarboards`: this method returns an array of stored starboards. - `saveStarboard`: this method stores a new starboard in the database. - `deleteStarboard`: this method deletes a starboard already stored in the database. - `editStarboard`: This method edits a starboard already saved in the database. Don't forget to set the manager's `storage` option to false ! **All the methods should be asynchronous to return a promise.** Here is an example, using quick.db, a Sqlite database. The comments in the code below are very important to understand how it works! ```js const Discord = require('discord.js'); const client = new Discord.Client(); // Load quick.db - it's an example of custom database, you can use MySQL, PostgreSQL, etc... const db = require('quick.db'); if (!db.get('starboards')) db.set('starboards', []); const StarboardsManager = require('discord-starboards'); const StarboardsManagerCustomDb = class extends StarboardsManager { // This function is called when the manager needs to get all the starboards stored in the database. async getAllStarboards() { // Get all the starboards in the database return db.get('starboards'); } // This function is called when a starboard needs to be saved in the database (when a starboard is created or when a starboard is edited). async saveStarboard(data) { // Add the new one db.push('starboards', data); // Don't forget to return something! return true; } // This function is called when a starboard needs to be deleted from the database. async deleteStarboard(channelID, emoji) { // Remove the starboard from the array const newStarboardsArray = db.get('starboards').filter((starboard) => !(starboard.channelID === channelID && starboard.options.emoji === emoji)); // Save the updated array db.set('starboards', newStarboardsArray); // Don't forget to return something! return true; } // This function is called when a starboard needs to be edited in the database async editStarboard(channelID, emoji, data) { // Gets all the current starboards const starboards = db.get('starboards'); // Remove the old starboard from the db const newStarboardsArray = starboards.filter((starboard) => !(starboard.channelID === channelID && starboard.options.emoji === emoji)); // Push the new starboard to the array newStarboardsArray.push(data); // Save the updated array db.set('starboards', newStarboardsArray); // Don't forget to return something! return true; } }; // Create a new instance of your new class const manager = new StarboardsManagerCustomDb(client, { storage: false, // Important - use false instead of a storage path }); // We now have a starboardsManager property to access the manager everywhere! client.starboardsManager = manager; client.on('ready', () => { console.log("I'm ready !"); }); client.login('SUP3R_S3CR3T_T0K3N'); ``` After that, it works the same as before! The module takes care of the rest!