feat: Implement gradual daily streak decay and rename currency from 'coins' to 'Astral Units'.
This commit is contained in:
@@ -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")
|
||||||
|
|||||||
@@ -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();
|
||||||
|
|
||||||
|
|||||||
@@ -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}`,
|
||||||
|
|||||||
Reference in New Issue
Block a user