feat: Implement gradual daily streak decay and rename currency from 'coins' to 'Astral Units'.

This commit is contained in:
syntaxbullet
2025-12-14 14:16:16 +01:00
parent ee2fda83e5
commit 4639fecf45
3 changed files with 6 additions and 9 deletions

View File

@@ -13,9 +13,9 @@ export const daily = createCommand({
const embed = new EmbedBuilder() const embed = new EmbedBuilder()
.setTitle("💰 Daily Reward Claimed!") .setTitle("💰 Daily Reward Claimed!")
.setDescription(`You claimed **${result.amount}** coins!`) .setDescription(`You claimed **${result.amount}** Astral Units!`)
.addFields( .addFields(
{ name: "Current Streak", value: `🔥 ${result.streak} days`, inline: true }, { name: "Activity Score", value: `🔥 ${result.streak}`, inline: true },
{ name: "Next Reward", value: `<t:${Math.floor(result.nextReadyAt.getTime() / 1000)}:R>`, inline: true } { name: "Next Reward", value: `<t:${Math.floor(result.nextReadyAt.getTime() / 1000)}:R>`, inline: true }
) )
.setColor("Gold") .setColor("Gold")

View File

@@ -8,7 +8,7 @@ import { createErrorEmbed, createWarningEmbed } from "@lib/embeds";
export const pay = createCommand({ export const pay = createCommand({
data: new SlashCommandBuilder() data: new SlashCommandBuilder()
.setName("pay") .setName("pay")
.setDescription("Transfer coins to another user") .setDescription("Transfer Astral Units to another user")
.addUserOption(option => .addUserOption(option =>
option.setName("user") option.setName("user")
.setDescription("The user to pay") .setDescription("The user to pay")
@@ -41,7 +41,7 @@ export const pay = createCommand({
const embed = new EmbedBuilder() const embed = new EmbedBuilder()
.setTitle("💸 Transfer Successful") .setTitle("💸 Transfer Successful")
.setDescription(`Successfully sent **${amount}** coins to <@${targetUser.id}>.`) .setDescription(`Successfully sent **${amount}** Astral Units to <@${targetUser.id}>.`)
.setColor("Green") .setColor("Green")
.setTimestamp(); .setTimestamp();

View File

@@ -100,11 +100,11 @@ export const economyService = {
let streak = (user.dailyStreak || 0) + 1; let streak = (user.dailyStreak || 0) + 1;
// If previous cooldown exists and expired more than 24h ago (meaning >48h since last claim), reset streak // If previous cooldown exists and expired more than 24h ago (meaning >48h since last claim), reduce streak by one for each day passed minimum 1
if (cooldown) { if (cooldown) {
const timeSinceReady = now.getTime() - cooldown.expiresAt.getTime(); const timeSinceReady = now.getTime() - cooldown.expiresAt.getTime();
if (timeSinceReady > 24 * 60 * 60 * 1000) { if (timeSinceReady > 24 * 60 * 60 * 1000) {
streak = 1; streak = Math.max(1, streak - Math.floor(timeSinceReady / (24 * 60 * 60 * 1000)));
} }
} else { } else {
streak = 1; streak = 1;
@@ -113,9 +113,6 @@ export const economyService = {
const bonus = (BigInt(streak) - 1n) * GameConfig.economy.daily.streakBonus; const bonus = (BigInt(streak) - 1n) * GameConfig.economy.daily.streakBonus;
const totalReward = GameConfig.economy.daily.amount + bonus; const totalReward = GameConfig.economy.daily.amount + bonus;
// Update User w/ Economy Service (reuse modifyUserBalance if we split it out, but here manual is fine for atomic combined streak update)
// Actually, we can just update directly here as we are already refining specific fields like streak.
await txFn.update(users) await txFn.update(users)
.set({ .set({
balance: sql`${users.balance} + ${totalReward}`, balance: sql`${users.balance} + ${totalReward}`,