mirror of
https://github.com/veganhacktivists/arabot.git
synced 2025-05-18 21:44:17 +02:00
fix(arabot): add xp to next level to fix levels being broken
This commit is contained in:
parent
e48db66f0c
commit
304f5996fb
@ -0,0 +1,2 @@
|
|||||||
|
-- AlterTable
|
||||||
|
ALTER TABLE "Xp" ADD COLUMN "xpToNextLevel" INTEGER NOT NULL DEFAULT 0;
|
@ -102,6 +102,7 @@ model Xp {
|
|||||||
userId String @id
|
userId String @id
|
||||||
level Int @default(0)
|
level Int @default(0)
|
||||||
xp Int @default(0)
|
xp Int @default(0)
|
||||||
|
xpToNextLevel Int @default(0)
|
||||||
messageCount Int @default(0)
|
messageCount Int @default(0)
|
||||||
lastMessage DateTime @default(now())
|
lastMessage DateTime @default(now())
|
||||||
}
|
}
|
||||||
|
@ -13,6 +13,7 @@ export async function getUser(userId: Snowflake) {
|
|||||||
},
|
},
|
||||||
select: {
|
select: {
|
||||||
xp: true,
|
xp: true,
|
||||||
|
xpToNextLevel: true,
|
||||||
level: true,
|
level: true,
|
||||||
},
|
},
|
||||||
});
|
});
|
||||||
@ -21,11 +22,17 @@ export async function getUser(userId: Snowflake) {
|
|||||||
|
|
||||||
export async function addXp(userId: Snowflake, xp: number) {
|
export async function addXp(userId: Snowflake, xp: number) {
|
||||||
const user = await getUser(userId);
|
const user = await getUser(userId);
|
||||||
|
let xpNextLevel = xp;
|
||||||
|
|
||||||
let level = 0;
|
let level = 0;
|
||||||
if (user !== null
|
if (user !== null) {
|
||||||
&& xpToNextLevel(user.level, user.xp + xp) < 0) {
|
xpNextLevel = xpToNextLevel(user.level, user.xpToNextLevel + xp);
|
||||||
|
if (xpNextLevel < 0) {
|
||||||
|
xpNextLevel = -xpNextLevel;
|
||||||
level = 1;
|
level = 1;
|
||||||
|
} else {
|
||||||
|
xpNextLevel = user.xpToNextLevel + xp;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
await container.database.xp.upsert({
|
await container.database.xp.upsert({
|
||||||
@ -34,6 +41,7 @@ export async function addXp(userId: Snowflake, xp: number) {
|
|||||||
},
|
},
|
||||||
update: {
|
update: {
|
||||||
xp: { increment: xp },
|
xp: { increment: xp },
|
||||||
|
xpToNextLevel: xpNextLevel,
|
||||||
level: { increment: level },
|
level: { increment: level },
|
||||||
messageCount: { increment: 1 },
|
messageCount: { increment: 1 },
|
||||||
lastMessage: new Date(),
|
lastMessage: new Date(),
|
||||||
@ -51,6 +59,7 @@ export async function addXp(userId: Snowflake, xp: number) {
|
|||||||
},
|
},
|
||||||
messageCount: 1,
|
messageCount: 1,
|
||||||
xp,
|
xp,
|
||||||
|
xpToNextLevel: xp,
|
||||||
},
|
},
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
@ -98,22 +107,8 @@ export async function getRank(userId: Snowflake) {
|
|||||||
},
|
},
|
||||||
});
|
});
|
||||||
|
|
||||||
const xp = await container.database.xp.findUnique({
|
info.level = user.level;
|
||||||
where: {
|
info.xp = user.xp;
|
||||||
userId,
|
|
||||||
},
|
|
||||||
select: {
|
|
||||||
level: true,
|
|
||||||
xp: true,
|
|
||||||
},
|
|
||||||
});
|
|
||||||
|
|
||||||
if (xp === null) {
|
|
||||||
return info;
|
|
||||||
}
|
|
||||||
|
|
||||||
info.level = xp.level;
|
|
||||||
info.xp = xp.xp;
|
|
||||||
|
|
||||||
return info;
|
return info;
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user