chore: import upstream snapshot with attribution
This commit is contained in:
@@ -0,0 +1,57 @@
|
||||
import type { ActionFunction } from '@sdk/types'
|
||||
import { leon } from '@sdk/leon'
|
||||
|
||||
import { TimerWidget } from '../widgets/timer-widget'
|
||||
import { createTimerMemory } from '../lib/memory'
|
||||
|
||||
interface TimerDuration {
|
||||
value?: number
|
||||
unit?: string
|
||||
}
|
||||
|
||||
export const run: ActionFunction = async function (params) {
|
||||
const supportedUnits = ['hours', 'minutes', 'seconds']
|
||||
const duration = (params.action_arguments['duration'] as TimerDuration) || null
|
||||
|
||||
if (
|
||||
!duration ||
|
||||
typeof duration.value !== 'number' ||
|
||||
typeof duration.unit !== 'string'
|
||||
) {
|
||||
await leon.answer({ key: 'cannot_get_duration' })
|
||||
return
|
||||
}
|
||||
|
||||
const normalizedUnit = duration.unit.toLowerCase()
|
||||
if (!supportedUnits.includes(normalizedUnit)) {
|
||||
await leon.answer({ key: 'unit_not_supported' })
|
||||
return
|
||||
}
|
||||
|
||||
const { value: durationValue } = duration
|
||||
const seconds =
|
||||
normalizedUnit === 'hours'
|
||||
? Number(durationValue) * 3_600
|
||||
: normalizedUnit === 'minutes'
|
||||
? Number(durationValue) * 60
|
||||
: Number(durationValue)
|
||||
const interval = 1_000
|
||||
const timerWidget = new TimerWidget({
|
||||
params: {
|
||||
seconds,
|
||||
initialProgress: 0,
|
||||
interval
|
||||
},
|
||||
onFetch: {
|
||||
actionName: 'check_timer'
|
||||
}
|
||||
})
|
||||
|
||||
await Promise.all([
|
||||
createTimerMemory(timerWidget.id, seconds, interval),
|
||||
leon.answer({
|
||||
widget: timerWidget,
|
||||
key: 'timer_set'
|
||||
})
|
||||
])
|
||||
}
|
||||
Reference in New Issue
Block a user