diff --git a/index.js b/index.js index 59ad512..5be9cd3 100644 --- a/index.js +++ b/index.js @@ -1,11 +1,9 @@ const discordjs = require("discord.js"); const fs = require("fs"); const redis = require("./src/functions/redis"); -const sql = require("./src/functions/postgres"); +const { Postgres } = require("./src/functions/postgres"); const { createClient } = require("redis"); const colors = require("colors"); -const { PrismaClient } = require("@prisma/client"); -const { messageCount } = require("./src/functions/postgres"); colors.setTheme({ prompt: "grey", @@ -35,7 +33,7 @@ redisConnection .catch((err) => console.error(err.stack.red)); //postgres connection -const client = new PrismaClient(); +const client = new Postgres(); cl.cfg = require("./cfg.json"); cl.cmds = new discordjs.Collection(); @@ -56,12 +54,12 @@ cl.on("messageCreate", async (msg) => { //exp if (!msg.content.startsWith(cl.cfg.prefix)) { - messageCount(client, msg.author.id); + client.messageCount(msg.author.id); if (await redis.expCheck(msg.author.id, redisConnection)) { - sql.addExp(client, msg.author.id, 10, 25); + client.addExp(msg.author.id, 10, 25); } } else { - sql.messageCount(client, msg.author.id); + client.messageCount(msg.author.id); } const args = msg.content.slice(cl.cfg.prefix.length).trim().split(/ +/); diff --git a/prisma/schema.prisma b/prisma/schema.prisma index ffc7765..e8bf88f 100644 --- a/prisma/schema.prisma +++ b/prisma/schema.prisma @@ -8,30 +8,29 @@ datasource db { } model badges { - badge_id Int @id + badge_id Int @id badge_name String badge_description String - badge_type Int @default(0) - given_badges given_badges[] @ignore + badge_type Int @default(0) + givenbadges givenbadges[] } -/// The underlying table does not contain a valid unique identifier and can therefore currently not be handled by the Prisma Client. -model given_badges { - user_id String - badge_id Int - badges badges @relation(fields: [badge_id], references: [badge_id], onDelete: NoAction, onUpdate: NoAction, map: "badge_id") - users users @relation(fields: [user_id], references: [user_id], onDelete: NoAction, onUpdate: NoAction, map: "user_id") +model givenbadges { + user_id String + badge_id Int + date_of_confer DateTime @id @db.Date + badges badges @relation(fields: [badge_id], references: [badge_id], onDelete: NoAction, onUpdate: NoAction, map: "badge_id") + users users @relation(fields: [user_id], references: [user_id], onDelete: NoAction, onUpdate: NoAction, map: "user_id") @@index([badge_id], map: "fki_badge_id") @@index([user_id], map: "fki_user_id") - @@ignore } model users { - user_id String @id(map: "user_pkey") - exp Int @default(0) - msg_count Int @default(0) - voice_time Int @default(0) - lvl Int @default(0) - given_badges given_badges[] @ignore + user_id String @id(map: "user_pkey") + exp Int @default(0) + msg_count Int @default(0) + voice_time Int @default(0) + lvl Int @default(0) + givenbadges givenbadges[] } diff --git a/src/cmds/profile.js b/src/cmds/profile.js index cc97446..03e1c44 100644 --- a/src/cmds/profile.js +++ b/src/cmds/profile.js @@ -6,51 +6,54 @@ module.exports = { const { profile } = require("../functions/postgres"); const { roundRect, expThreshold } = require("../functions/tools"); const canvas = require("canvas"); - await profile(connect, msg.author.id).then((user) => { - canvas.registerFont("./src/fonts/Lexend-Bold.ttf", { - family: "LexendBold", - }); - canvas.registerFont("./src/fonts/Lexend-Thin.ttf", { - family: "LexendThin", - }); - const canva = canvas.createCanvas(1024, 256); - let context = canva.getContext("2d"); - context.fillStyle = "#484848"; - roundRect(context, 0, 0, 1024, 256, 25); - context.fill(); - context.font = '48px "LexendBold"'; - context.fillStyle = "#FFFFFF"; - context.fillText(msg.author.tag, 244, 24 + 48); - context.fillText("Lvl " + user.lvl, 850, 24 + 48); - context.font = '25px "LexendThin"'; - context.fillText(user.msg_count + " messages sent", 244, 72 + 25); - context.font = '24px "LexendThin"'; - context.fillText(expThreshold(user.lvl + 1) + " exp", 810, 164 + 24); - context.fillText(user.exp + " exp", 250, 164 + 24); - context.fillStyle = "#242424"; - roundRect(context, 244, 200, 700, 30, 50); - context.fill(); - context.fillStyle = "#61F2EA"; - roundRect( - context, - 244, - 200, - 700 * - ((user.exp - expThreshold(user.lvl)) / expThreshold(user.lvl + 1)), - 30, - 50 - ); - context.fill(); - roundRect(context, 34, 34, 188, 188, 100); - canvas - .loadImage(msg.author.avatarURL({ format: "png" })) - .then((image) => { - context.clip(); - context.drawImage(image, 34, 34, 188, 188); - msg.reply({ - files: [canva.toBuffer()], - }); + await connect + .profile(msg.author.id) + .then((user) => { + canvas.registerFont("./src/fonts/Lexend-Bold.ttf", { + family: "LexendBold", }); - }); + canvas.registerFont("./src/fonts/Lexend-Thin.ttf", { + family: "LexendThin", + }); + const canva = canvas.createCanvas(1024, 256); + let context = canva.getContext("2d"); + context.fillStyle = "#484848"; + roundRect(context, 0, 0, 1024, 256, 25); + context.fill(); + context.font = '48px "LexendBold"'; + context.fillStyle = "#FFFFFF"; + context.fillText(msg.author.tag, 244, 24 + 48); + context.fillText("Lvl " + user.lvl, 850, 24 + 48); + context.font = '25px "LexendThin"'; + context.fillText(user.msg_count + " messages sent", 244, 72 + 25); + context.font = '24px "LexendThin"'; + context.fillText(expThreshold(user.lvl + 1) + " exp", 810, 164 + 24); + context.fillText(user.exp + " exp", 250, 164 + 24); + context.fillStyle = "#242424"; + roundRect(context, 244, 200, 700, 30, 50); + context.fill(); + context.fillStyle = "#61F2EA"; + roundRect( + context, + 244, + 200, + 700 * + ((user.exp - expThreshold(user.lvl)) / expThreshold(user.lvl + 1)), + 30, + 50 + ); + context.fill(); + roundRect(context, 34, 34, 188, 188, 100); + canvas + .loadImage(msg.author.avatarURL({ format: "png" })) + .then((image) => { + context.clip(); + context.drawImage(image, 34, 34, 188, 188); + msg.reply({ + files: [canva.toBuffer()], + }); + }); + }) + .catch((err) => console.error(err.stack)); }, }; diff --git a/src/functions/postgres.js b/src/functions/postgres.js index de137ea..4d12f0c 100644 --- a/src/functions/postgres.js +++ b/src/functions/postgres.js @@ -1,8 +1,12 @@ const { lvl, randomExp } = require("./tools"); +const { PrismaClient } = require("@prisma/client"); +class Postgres { + constructor() { + this.client = new PrismaClient(); + } -module.exports = { - messageCount: async function (connect, userID) { - const update = await connect.users.update({ + async messageCount(userID) { + return await this.client.users.update({ where: { user_id: userID, }, @@ -12,49 +16,59 @@ module.exports = { }, }, }); - return update; - }, - profile: async function (connect, userID) { - return await connect.users.findUnique({ + } + + async profile(userID) { + return await this.client.users.findUnique({ where: { user_id: userID, }, }); - }, - addExp: async function (connect, userID, min, max) { - const rExp = randomExp(min, max); - return await connect.users.upsert({ - where: { - user_id: userID, - }, - create: { - user_id: userID, - msg_count: 1, - exp: randomExp(min, max), - lvl: 0, - }, - update: { - msg_count: { - increment: 1, + } + + async addExp(userID, min, max) { + await this.#ifExist(userID).then(async () => { + const rExp = randomExp(min, max); + return await this.client.users.update({ + where: { + user_id: userID, }, - exp: { - increment: rExp, + data: { + msg_count: { + increment: 1, + }, + exp: { + increment: rExp, + }, + lvl: lvl( + ( + await this.client.users.findUnique({ + where: { + user_id: userID, + }, + select: { + exp: true, + }, + }) + ).exp + ), }, - lvl: lvl( - ( - await connect.users.findUnique({ - where: { - user_id: userID, - }, - select: { - exp: true, - }, - }) - ).exp + rExp - ), - }, + }); }); - }, - addBadge: async function (args) {}, - giveBadge: async function (args) {}, -}; + } + async #ifExist(userID) { + if ((await !this.profile(userID)) == null) { + await this.client.users.create({ + data: { + user_id: userID, + msg_count: 0, + lvl: 0, + }, + }); + } + } + + //addBadge: async function (args) {}, + //giveBadge: async function (args) {}, +} +module.exports.Postgres = Postgres;