-
-
Notifications
You must be signed in to change notification settings - Fork 128
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
✨ Apache CouchDB - Nano example (#344)
- Loading branch information
Showing
2 changed files
with
81 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,80 @@ | ||
const Discord = require('discord.js'), | ||
client = new Discord.Client({ | ||
intents: [ | ||
Discord.Intents.FLAGS.GUILDS, | ||
Discord.Intents.FLAGS.GUILD_MESSAGES, | ||
Discord.Intents.FLAGS.GUILD_MESSAGE_REACTIONS | ||
] | ||
}), | ||
settings = { | ||
prefix: 'g!', | ||
token: 'Your Discord Bot Token' | ||
}; | ||
|
||
// Load nano | ||
const nano = require('nano')('http://admin:mypassword@localhost:5984'); | ||
let giveawayDB; | ||
|
||
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, { | ||
updateCountdownEvery: 10000, | ||
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; | ||
|
||
// 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(); | ||
})(); | ||
|
||
client.on('ready', () => { | ||
console.log('I\'m ready!'); | ||
}); | ||
|
||
client.login(settings.token); |