feat: sync time with dailylogin server

This commit is contained in:
2026-05-03 20:46:32 +08:00
parent 21875cdf8a
commit 5ec85f3954
4 changed files with 121 additions and 78 deletions
+40 -11
View File
@@ -608,15 +608,27 @@ function rpcClaimDailyReward(ctx, logger, nk, payload) {
var now = new Date();
var currentMonth = now.toISOString().substring(5, 7); // e.g. "05"
var todayStr = now.toISOString().substring(0, 10);
var todayIndex = now.getUTCDate() - 1; // 0 to 30
var stateObjs = nk.storageRead([{ collection: "daily_rewards", key: "state", userId: ctx.userId }]);
var state = { claimed_days: 0, last_claim_date: "", month: "" };
var state = { claimed_days: [], last_claim_date: "", month: "" };
if (stateObjs && stateObjs.length > 0) {
state = stateObjs[0].value;
var val = stateObjs[0].value;
state.last_claim_date = val.last_claim_date || "";
state.month = val.month || "";
if (typeof val.claimed_days === 'number') {
var arr = [];
for (var i=0; i<val.claimed_days; i++) arr.push(i);
state.claimed_days = arr;
} else if (Array.isArray(val.claimed_days)) {
state.claimed_days = val.claimed_days;
} else {
state.claimed_days = [];
}
}
if (state.month !== currentMonth) {
state.claimed_days = 0;
state.claimed_days = [];
state.month = currentMonth;
}
@@ -638,10 +650,13 @@ function rpcClaimDailyReward(ctx, logger, nk, payload) {
}
}
var dayIndex = state.claimed_days;
var dayIndex = todayIndex;
if (dayIndex >= monthRewards.length) {
throw new Error("Already claimed all rewards for this month");
}
if (state.claimed_days.indexOf(dayIndex) !== -1) {
throw new Error("Already claimed today's reward");
}
var rewardData = monthRewards[dayIndex];
if (typeof rewardData === "number") {
@@ -672,7 +687,7 @@ function rpcClaimDailyReward(ctx, logger, nk, payload) {
}]);
}
state.claimed_days++;
state.claimed_days.push(dayIndex);
state.last_claim_date = todayStr;
nk.storageWrite([{
@@ -684,7 +699,7 @@ function rpcClaimDailyReward(ctx, logger, nk, payload) {
permissionWrite: 0
}]);
return JSON.stringify({ success: true, reward_type: rewardType, reward_amount: rewardAmount, day: state.claimed_days });
return JSON.stringify({ success: true, reward_type: rewardType, reward_amount: rewardAmount, day: dayIndex + 1 });
}
function rpcGetDailyRewardState(ctx, logger, nk, payload) {
@@ -692,14 +707,26 @@ function rpcGetDailyRewardState(ctx, logger, nk, payload) {
var now = new Date();
var currentMonth = now.toISOString().substring(5, 7); // e.g. "05"
var todayStr = now.toISOString().substring(0, 10);
var todayIndex = now.getUTCDate() - 1;
var stateObjs = nk.storageRead([{ collection: "daily_rewards", key: "state", userId: ctx.userId }]);
var state = { claimed_days: 0, last_claim_date: "", month: "" };
var state = { claimed_days: [], last_claim_date: "", month: "" };
if (stateObjs && stateObjs.length > 0) {
state = stateObjs[0].value;
var val = stateObjs[0].value;
state.last_claim_date = val.last_claim_date || "";
state.month = val.month || "";
if (typeof val.claimed_days === 'number') {
var arr = [];
for (var i=0; i<val.claimed_days; i++) arr.push(i);
state.claimed_days = arr;
} else if (Array.isArray(val.claimed_days)) {
state.claimed_days = val.claimed_days;
} else {
state.claimed_days = [];
}
}
if (state.month !== currentMonth) {
state.claimed_days = 0;
state.claimed_days = [];
state.month = currentMonth;
}
@@ -719,8 +746,10 @@ function rpcGetDailyRewardState(ctx, logger, nk, payload) {
return JSON.stringify({
state: state,
month_rewards: monthRewards,
can_claim_today: state.last_claim_date !== todayStr && state.claimed_days < monthRewards.length,
today_date: todayStr
can_claim_today: state.last_claim_date !== todayStr && state.claimed_days.indexOf(todayIndex) === -1 && todayIndex < monthRewards.length,
today_date: todayStr,
today_index: todayIndex,
server_month: now.getUTCMonth() + 1
});
}