Holana/examples/custom-databases/nano.js

81 lines
2.6 KiB
JavaScript
Raw Permalink Normal View History

2023-11-26 09:26:08 +00:00
const Discord = require("discord.js");
const client = new Discord.Client({
intents: [
Discord.IntentsBitField.Flags.Guilds,
Discord.IntentsBitField.Flags.GuildMessageReactions,
],
});
// Load nano
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 to prevent an error
client.giveawaysManager._init();
})();
const { GiveawaysManager } = require("discord-giveaways");
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 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 unedited giveaway 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 from the database
const giveaway = await giveawayDB.get(messageId);
// Remove the giveaway 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, see below
// We now have a giveawaysManager property to access the manager everywhere!
client.giveawaysManager = manager;
client.on("ready", () => {
console.log("Bot is ready!");
});
client.login(process.env.DISCORD_BOT_TOKEN);