A mongoose provider for discord-akairo.
make sure you have mongoose installed and please take a look at the model example
npm i akairo-mongoose
Let's implement per-guild prefixes.
First, create a new MongooseProvider.
const mongoose = require('mongoose');
const { AkairoClient } = require('discord-akairo');
const MongooseProvider = require('akairo-mongoose');
const model = require('./path/to/model'); // see Model Example below
class CustomClient extends AkairoClient {
constructor() {
super({
/* Options here */
});
// Mongoose Provider
this.settings = new MongooseProvider(model);
}
}
// connect to db and start the bot
mongoose
.connect(/* DATABASE URI HERE */, {
useNewUrlParser: true,
useUnifiedTopology: true
})
.then(() => {
console.log('✅ Connected to database');
const client = new CustomClient();
client.login(token);
})
.catch((err) => console.log(err));
Before you can actually use the provider, you would have to run the init
method.
For example:
class CustomClient extends AkairoClient {
/* ... */
async login(token) {
await this.settings.init();
return super.login(token);
}
}
Now, the provider can be used like so:
class CustomClient extends AkairoClient {
constructor() {
super({
prefix: (message) => {
if (message.guild) {
// The third param is the default.
return this.settings.get(message.guild.id, 'prefix', '!');
}
return '!';
}
});
/* ... */
}
}
const mongoose = require('mongoose');
const Schema = mongoose.Schema;
const guildSchema = new Schema({
// 'id' field must be first - you can name it whatever you want
id: {
type: String,
required: true
},
// 'data' field must be second - you can name it whatever you want
data: {
type: Object,
required: true
}
});
module.exports = mongoose.model('Guild', guildSchema);
https://github.com/Zerefdev/akairo-mongoose/tree/master/example
MIT © Zerefdev