mirror of
https://github.com/JonnyBro/JaBa.git
synced 2024-11-23 13:44:59 +05:00
117 lines
3.2 KiB
JavaScript
117 lines
3.2 KiB
JavaScript
|
const mongoose = require("mongoose"),
|
||
|
Canvas = require("canvas");
|
||
|
|
||
|
const genToken = () => {
|
||
|
let token = "";
|
||
|
const characters = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwzy0123456789.-_";
|
||
|
for (let i = 0; i < 32; i++) {
|
||
|
token += characters.charAt(Math.floor(Math.random() * characters.length));
|
||
|
};
|
||
|
return token;
|
||
|
};
|
||
|
|
||
|
const userSchema = new mongoose.Schema({
|
||
|
/* REQUIRED */
|
||
|
id: { type: String }, // Discord ID of the user
|
||
|
|
||
|
/* ECONOMY (GLOBAL) */
|
||
|
rep: { type: Number, default: 0 }, // Reputation points of the user
|
||
|
bio: { type: String }, // Biography of the user
|
||
|
birthdate: { type: Number }, // Birthdate of the user (the timestamp)
|
||
|
lover: { type: String }, // The person with whom the user is in a relationship
|
||
|
|
||
|
/* STATS */
|
||
|
registeredAt: { type: Number, default: Date.now() }, // Registered date of the user
|
||
|
|
||
|
/* ACHIEVEMENTS */
|
||
|
achievements: { type: Object, default: {
|
||
|
married: {
|
||
|
achieved: false,
|
||
|
progress: {
|
||
|
now: 0,
|
||
|
total: 1
|
||
|
}
|
||
|
},
|
||
|
work: {
|
||
|
achieved: false,
|
||
|
progress: {
|
||
|
now: 0,
|
||
|
total: 10
|
||
|
}
|
||
|
},
|
||
|
firstCommand: {
|
||
|
achieved: false,
|
||
|
progress: {
|
||
|
now: 0,
|
||
|
total: 1
|
||
|
}
|
||
|
},
|
||
|
slots: {
|
||
|
achieved: false,
|
||
|
progress: {
|
||
|
now: 0,
|
||
|
total: 3
|
||
|
}
|
||
|
},
|
||
|
tip: {
|
||
|
achieved: false,
|
||
|
progress: {
|
||
|
now: 0,
|
||
|
total: 1
|
||
|
}
|
||
|
},
|
||
|
rep: {
|
||
|
achieved: false,
|
||
|
progress: {
|
||
|
now: 0,
|
||
|
total: 20
|
||
|
},
|
||
|
},
|
||
|
invite: {
|
||
|
achieved: false,
|
||
|
progress: {
|
||
|
now: 0,
|
||
|
total: 1
|
||
|
}
|
||
|
}
|
||
|
}},
|
||
|
|
||
|
/* COOLDOWN */
|
||
|
cooldowns: { type: Object, default: {
|
||
|
rep: 0
|
||
|
}},
|
||
|
|
||
|
/* OTHER INFORMATIONS */
|
||
|
afk: { type: String, default: null }, // Whether the member is AFK
|
||
|
reminds: { type: Array, default: [] }, // the reminds of the user
|
||
|
logged: { type: Boolean, default: false }, // if the user is logged to the dashboard
|
||
|
apiToken: { type: String, default: genToken() } // the api token of the user
|
||
|
});
|
||
|
|
||
|
userSchema.method("genApiToken", async function() {
|
||
|
this.apiToken = genToken();
|
||
|
await this.save();
|
||
|
return this.apiToken;
|
||
|
});
|
||
|
|
||
|
userSchema.method("getAchievements", async function() {
|
||
|
const canvas = Canvas.createCanvas(1800, 250),
|
||
|
ctx = canvas.getContext("2d");
|
||
|
const images = [
|
||
|
await Canvas.loadImage(`./assets/img/achievements/achievement${this.achievements.work.achieved ? "_colored" : ""}1.png`),
|
||
|
await Canvas.loadImage(`./assets/img/achievements/achievement${this.achievements.firstCommand.achieved ? "_colored" : ""}2.png`),
|
||
|
await Canvas.loadImage(`./assets/img/achievements/achievement${this.achievements.married.achieved ? "_colored" : ""}3.png`),
|
||
|
await Canvas.loadImage(`./assets/img/achievements/achievement${this.achievements.slots.achieved ? "_colored" : ""}4.png`),
|
||
|
await Canvas.loadImage(`./assets/img/achievements/achievement${this.achievements.tip.achieved ? "_colored" : ""}5.png`),
|
||
|
await Canvas.loadImage(`./assets/img/achievements/achievement${this.achievements.rep.achieved ? "_colored" : ""}6.png`),
|
||
|
await Canvas.loadImage(`./assets/img/achievements/achievement${this.achievements.invite.achieved ? "_colored" : ""}7.png`)
|
||
|
];
|
||
|
let dim = 0;
|
||
|
for(let i = 0; i < images.length; i++) {
|
||
|
await ctx.drawImage(images[i], dim, 10, 350, 200);
|
||
|
dim += 200;
|
||
|
};
|
||
|
return canvas.toBuffer();
|
||
|
});
|
||
|
|
||
|
module.exports = mongoose.model("User", userSchema);
|