a fun bot for the hc slack
at v0.0.3 2.0 kB view raw
1import type { PeriodType, TimePeriod } from "../features/takes/types"; 2import TakesConfig from "./config"; 3 4export function calculateElapsedTime(periods: TimePeriod[]): number { 5 return Math.min( 6 periods.reduce((total, period) => { 7 if (period.type !== "active") return total; 8 9 const endTime = period.endTime || Date.now(); 10 return total + (endTime - period.startTime); 11 }, 0), 12 TakesConfig.DEFAULT_SESSION_LENGTH * 60 * 1000, 13 ); 14} 15 16export function addNewPeriod( 17 periodsString: string, 18 type: PeriodType, 19): TimePeriod[] { 20 const periods = JSON.parse(periodsString); 21 22 // Close previous period if exists 23 if (periods.length > 0) { 24 const lastPeriod = periods[periods.length - 1]; 25 if (!lastPeriod.endTime) { 26 lastPeriod.endTime = Date.now(); 27 } 28 } 29 30 // Add new period 31 periods.push({ 32 type, 33 startTime: Date.now(), 34 endTime: null, 35 }); 36 37 return periods; 38} 39 40export function getRemainingTime( 41 targetDurationMs: number, 42 periods: string, 43): { 44 remaining: number; 45 endTime: Date; 46} { 47 const elapsedMs = calculateElapsedTime(JSON.parse(periods)); 48 const remaining = Math.max(0, targetDurationMs - elapsedMs); 49 const endTime = new Date(Date.now() + remaining); 50 return { remaining, endTime }; 51} 52 53export function getPausedTimeRemaining(periods: string): number { 54 const parsedPeriods = JSON.parse(periods); 55 const currentPeriod = parsedPeriods[parsedPeriods.length - 1]; 56 57 if (currentPeriod.type !== "paused" || !currentPeriod.startTime) { 58 return 0; 59 } 60 61 const now = new Date(); 62 const pausedDuration = now.getTime() - currentPeriod.startTime; 63 64 return Math.max( 65 0, 66 TakesConfig.MAX_PAUSE_DURATION * 60 * 1000 - pausedDuration, 67 ); 68} 69 70export function getPausedDuration(periods: string): number { 71 const parsedPeriods = JSON.parse(periods); 72 return parsedPeriods.reduce((total: number, period: TimePeriod) => { 73 if (period.type !== "paused") return total; 74 75 const endTime = period.endTime || Date.now(); 76 return total + (endTime - period.startTime); 77 }, 0); 78}