tritan-starboards
Version:
A starboards node module for discord.js
79 lines (64 loc) • 3.44 kB
Markdown
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!