fix: reschedule upsert, settings restart warning, unified streak util
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -30,6 +30,9 @@ export function handleSettings(db: Database) {
|
||||
}
|
||||
|
||||
setSetting(db, key, value);
|
||||
await ctx.reply(`Updated ${key} = ${value}`);
|
||||
const restartNote = (key === 'morning_reminder' || key === 'evening_reminder')
|
||||
? '\n\n⚠️ Restart the bot for the new reminder time to take effect.'
|
||||
: '';
|
||||
await ctx.reply(`Updated ${key} = ${value}${restartNote}`);
|
||||
};
|
||||
}
|
||||
|
||||
@@ -1,30 +1,6 @@
|
||||
import type { Context } from 'telegraf';
|
||||
import type { Database } from 'better-sqlite3';
|
||||
|
||||
function getStreaks(db: Database): { current: number; longest: number } {
|
||||
const rows = db.prepare(
|
||||
"SELECT date FROM schedule WHERE status = 'completed' ORDER BY date ASC"
|
||||
).all() as Array<{ date: string }>;
|
||||
|
||||
if (rows.length === 0) return { current: 0, longest: 0 };
|
||||
|
||||
let current = 1, longest = 1, streak = 1;
|
||||
|
||||
for (let i = 1; i < rows.length; i++) {
|
||||
const prev = new Date(rows[i - 1]!.date + 'T12:00:00');
|
||||
const curr = new Date(rows[i]!.date + 'T12:00:00');
|
||||
const diff = Math.round((curr.getTime() - prev.getTime()) / 86400000);
|
||||
if (diff <= 2) {
|
||||
streak++;
|
||||
if (streak > longest) longest = streak;
|
||||
} else {
|
||||
streak = 1;
|
||||
}
|
||||
}
|
||||
|
||||
current = streak;
|
||||
return { current, longest };
|
||||
}
|
||||
import { getStreaks } from '../../utils/streak';
|
||||
|
||||
export function handleStreak(db: Database) {
|
||||
return async (ctx: Context) => {
|
||||
|
||||
Reference in New Issue
Block a user