class implementation with fixes and prisma schema changes

This commit is contained in:
Stanislaw
2022-04-29 00:43:24 +02:00
parent f308503816
commit a2c8e1cfee
4 changed files with 124 additions and 110 deletions

View File

@@ -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(/ +/);

View File

@@ -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[]
}

View File

@@ -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));
},
};

View File

@@ -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;