package Ġcom . github . ins an us mo kr ass ar . Auto Post Telegram Bot . plugins . triggers Ċ Ċ import Ġcom . github . ins an us mo kr ass ar . Auto Post Telegram Bot . base . database . tables . Posts Base Info Table Ċ import Ġcom . github . ins an us mo kr ass ar . Auto Post Telegram Bot . base . database . tables . Posts Messages Info Table Ċ import Ġcom . github . ins an us mo kr ass ar . Auto Post Telegram Bot . base . models . Final Config Ċ import Ġcom . github . ins an us mo kr ass ar . Auto Post Telegram Bot . base . models . Post Id Ċ import Ġcom . github . ins an us mo kr ass ar . Auto Post Telegram Bot . base . plugins .* Ċ import Ġcom . github . ins an us mo kr ass ar . Auto Post Telegram Bot . base . plugins . ab stractions . Chooser Ċ import Ġcom . github . ins an us mo kr ass ar . Auto Post Telegram Bot . medium Broadcast Capacity Ċ import Ġcom . github . ins an us mo kr ass ar . Auto Post Telegram Bot . plugins . publish ers . Publisher Ċ import Ġcom . github . ins an us mo kr ass ar . Auto Post Telegram Bot . plugins . scheduler . Scheduler Plugin Ċ import Ġcom . github . ins an us mo kr ass ar . Auto Post Telegram Bot . utils . Calculated DateTime Ċ import Ġcom . github . ins an us mo kr ass ar . Auto Post Telegram Bot . utils . commands . Command Ċ import Ġcom . github . ins an us mo kr ass ar . Auto Post Telegram Bot . utils . extensions . near DateTime Ċ import Ġcom . github . ins an us mo kr ass ar . Auto Post Telegram Bot . utils . extensions . send To Logger Ċ import Ġcom . github . ins an us mo kr ass ar . Auto Post Telegram Bot . utils . flow . collect With Errors Ċ import Ġcom . github . ins an us mo kr ass ar . Auto Post Telegram Bot . utils . parse DateTime s Ċ import Ġcom . github . ins an us mo kr ass ar . Telegram Bot API . bot . Requests Executor Ċ import Ġcom . github . ins an us mo kr ass ar . Telegram Bot API . requests . Forward Message Ċ import Ġcom . github . ins an us mo kr ass ar . Telegram Bot API . requests . send . Send Text Message Ċ import Ġcom . github . ins an us mo kr ass ar . Telegram Bot API . types . Chat Id Ċ import Ġcom . github . ins an us mo kr ass ar . Telegram Bot API . types . Parse Mode . Markdown Parse Mode Ċ import Ġcom . github . ins an us mo kr ass ar . Telegram Bot API . types . Update Identifier Ċ import Ġcom . github . ins an us mo kr ass ar . Telegram Bot API . types . message . abstract s . Common Message Ċ import Ġcom . github . ins an us mo kr ass ar . Telegram Bot API . types . message . content . Text Content Ċ import Ġcom . github . ins an us mo kr ass ar . Telegram Bot API . utils . extensions . execute Unsafe Ċ import Ġkotlinx . coroutines .* Ċ import Ġkotlinx . coroutines . channels . Broadcast Channel Ċ import Ġkotlinx . coroutines . flow . as Flow Ċ import Ġkotlinx . serialization . Serializable Ċ import Ġkotlinx . serialization . Transient Ċ import Ġorg . joda . time . DateTime Ċ import Ġkotlin . collections . component 1 Ċ import Ġkotlin . collections . component 2 Ċ import Ġkotlin . collections . set Ċ Ċ private Ġval ĠTimer Trigger Strategy Scope Ġ= ĠCor outine Scope ( Dispatch ers . Default ) Ċ Ċ private Ġval Ġtimer Schedule Command Regex Ġ= ĠRegex (" (( get A )| ( a )) uto Publication ( s Ġ[ \\ d ]+ )? $ ") Ċ private Ġval Ġnumber Regex : ĠRegex Ġ= ĠRegex ("[ \\ d ]+ $ ") Ċ private Ġclass ĠTimer Schedule Command ( ĊĠĠĠ Ġprivate Ġval Ġsource Chat Id : ĠChat Id , ĊĠĠĠ Ġprivate Ġval Ġtime Chooser Callback : Ġ( after : ĠDateTime ) Ġ-> ĠDateTime ?, ĊĠĠĠ Ġprivate Ġval Ġcho oser : ĠCho oser , ĊĠĠĠ Ġprivate Ġval Ġexecutor : ĠRequests Executor , ĊĠĠĠ Ġprivate Ġval Ġposts Messages Table : ĠPosts Messages Info Table , ĊĠĠĠ Ġprivate Ġval Ġposts Table : ĠPosts Base Info Table Ċ ) Ġ: ĠCommand () Ġ{ ĊĠĠĠ Ġoverride Ġval Ġcommand Regex : ĠRegex Ġ= Ġtimer Schedule Command Regex ĊĊĠĠĠ Ġoverride Ġsuspend Ġfun Ġon Command ( update Id : ĠUpdate Identifier , Ġmessage : ĠCommon Message <* >) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġcontent Ġ= Ġmessage . content Ġas ? ĠText Content Ġ?: Ġreturn ĊĠĠĠĠĠĠĠ Ġval Ġcount Ġ= Ġnumber Regex . find ( content . text ) Ġ? . value Ġ? . toInt OrNull () Ġ?: Ġ 1 ĊĠĠĠĠĠĠĠ Ġvar Ġnear DateTime Ġ= ĠDateTime . now () ĊĠĠĠĠĠĠĠ Ġval Ġchosen Ġ= Ġmutable Map Of < DateTime , ĠList < Post Id >>() ĊĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġ 0 Ġuntil Ġcount ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnear DateTime Ġ= Ġtime Chooser Callback ( near DateTime Ġ+ Ġ 1 0 0 0 L ) Ġ// Ġplus Ġone Ġsecond ĊĠĠĠĠĠĠĠĠĠĠĠ Ġchosen [ near DateTime ] Ġ= Ġcho oser . trigger Choose ( near DateTime , Ġchosen . values . flatten ()). toList () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġcommon Logger . info (" Was Ġrequested Ġauto Ġpublishing Ġcount : Ġ$ count ; ĠWas Ġchosen Ġto Ġshow : Ġ${ chosen . values . sum By Ġ{ Ġit . size Ġ}} ") ĊĠĠĠĠĠĠĠ Ġchosen . as Sequence (). sorted By Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit . key ĊĠĠĠĠĠĠĠ Ġ}. forEach Ġ{ Ġ( dateTime , Ġposts ) Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġexecutor . execute ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSend Text Message ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmessage . chat . id , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" Must Ġbe Ġposted Ġat Ġ`$ dateTime `: ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠMarkdown Parse Mode ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġposts . sorted (). forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġposts Messages Table . get Messages Of Post ( it ). first OrNull () Ġ? . also Ġ{ Ġfirst Message Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠTODO :: ĠAdd Ġhandling Ġof Ġcase Ġwhen Ġmessage Ġwas Ġremoved ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġexecutor . execute Unsafe ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠForward Message ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsource Chat Id , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmessage . chat . id , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfirst Message . message Id ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġ?: Ġit . let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġposts Table . remove Post ( it ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdelay ( 5 0 0 L ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdelay ( 1 0 0 0 L ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġexecutor . execute ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠSend Text Message ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmessage . chat . id , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" End Ġof Ġrequested Ġauto Ġpublishing Ġmessages " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} Ċ } Ċ Ċ private Ġconst Ġval Ġtw enty Four Hours Ġ= Ġ 1 0 0 0 L Ġ* Ġ 6 0 Ġ* Ġ 6 0 Ġ* Ġ 2 4 L Ċ private Ġfun Ġget Plus Tw enty Four Hours () Ġ= ĠSystem . currentTimeMillis () Ġ+ Ġtw enty Four Hours Ċ Ċ @ Serializable Ċ class ĠTimer Trigger Strategy Ġ( ĊĠĠĠ Ġprivate Ġval Ġdelay : ĠLong ? Ġ= Ġnull , ĊĠĠĠ Ġprivate Ġval Ġtime : ĠString Ġ= Ġ" 0 0 : 0 0 - 0 0 : 0 0 Ġ 0 1 : 0 0 ", ĊĠĠĠ Ġprivate Ġval Ġsubstit uted By Scheduler : ĠBoolean Ġ= Ġfalse Ċ ) Ġ: ĠPlugin Ġ{ ĊĠĠĠ Ġ@ Transient ĊĠĠĠ Ġprivate Ġval Ġpublication Times Po ss ibly Changed Broadcast Channel Ġ= ĠBroadcast Channel < DateTime >( ĊĠĠĠĠĠĠĠ Ġmedium Broadcast Capacity ĊĠĠĠ Ġ) ĊĠĠĠ Ġ@ Transient ĊĠĠĠ Ġval Ġtrigger Times Affected Flow Ġ= Ġpublication Times Po ss ibly Changed Broadcast Channel . as Flow () ĊĊĠĠĠ Ġ@ Transient ĊĠĠĠ Ġprivate Ġvar Ġlast Time Ġ= ĠDateTime . now () ĊĊĠĠĠ Ġprivate Ġval Ġtimes Of Trigger ing : ĠList < Calculated DateTime > Ġby Ġlazy Ġ{ ĊĠĠĠĠĠĠĠ Ġtime . parse DateTime s () ĊĠĠĠ Ġ} ĊĠĠĠ Ġfun ĠgetNext Time ( after : ĠDateTime Ġ= ĠDateTime . now ()): ĠDateTime ? Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġnear Ġ= Ġtimes Of Trigger ing . near DateTime ( after ) Ġ?: Ġreturn Ġnull ĊĠĠĠĠĠĠĠ Ġscheduler Plugin ToCheck Collision Ġ? . let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġafter Near Ġ= Ġnear Ġ+ Ġ 1 0 0 0 L ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġthere Is Scheduled Ġ= Ġit . timer Schedules Table . registered Posts Times ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnear Ġ- Ġ 1 0 0 0 L Ġto Ġafter Near ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ). any Ġ{ Ġ(_, ĠdateTime ) Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠdateTime Ġ== Ġnear ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( there Is Scheduled ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠgetNext Time ( after Near ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġnear ĊĠĠĠ Ġ} ĊĠĠĠ Ġval Ġnext Trigger Time : ĠDateTime ? ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġdelay Ġ? . let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlast Time Ġ= Ġlast Time . plus ( it ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlast Time ĊĠĠĠĠĠĠĠ Ġ} Ġ?: ĠgetNext Time () ĊĊĠĠĠ Ġ@ Transient ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġtimer Schedule Command : ĠTimer Schedule Command ĊĠĠĠ Ġprivate Ġvar Ġscheduler Plugin ToCheck Collision : ĠScheduler Plugin ? Ġ= Ġnull ĊĊĠĠĠ Ġoverride Ġsuspend Ġfun Ġon Init ( executor : ĠRequests Executor , Ġbase Config : ĠFinal Config , Ġplugin Manager : ĠPlugin Manager ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġpublisher : ĠPublisher Ġ= Ġplugin Manager . findFirst Plugin () Ġ?: Ġreturn ĊĠĠĠĠĠĠĠ Ġval Ġcho oser : ĠCho oser Ġ= Ġplugin Manager . findFirst Plugin () Ġ?: Ġreturn ĊĊĠĠĠĠĠĠĠ Ġif Ġ( subst it uted By Scheduler ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġplugin Manager . findFirst Plugin < Scheduler Plugin >() Ġ? . let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġscheduler Plugin ToCheck Collision Ġ= Ġit ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠTimer Trigger Strategy Scope . launch Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . timer Schedules Table . post Time Registered Flow . collect With Errors Ġ{ Ġ(_, ĠdateTime ) Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpublication Times Po ss ibly Changed Broadcast Channel . send ( dateTime ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠTimer Trigger Strategy Scope . launch Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . timer Schedules Table . post Time Changed Flow . collect With Errors Ġ{ Ġ(_, ĠdateTime ) Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpublication Times Po ss ibly Changed Broadcast Channel . send ( dateTime ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġtimer Schedule Command Ġ= ĠTimer Schedule Command ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbase Config . source Chat Id , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ:: getNext Time , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcho oser , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġexecutor , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbase Config . posts Messages Table , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbase Config . posts Table ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ ĠTimer Trigger Strategy Scope . launch Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsuspend Ġfun Ġtrigger () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlaunch Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcho oser . trigger Choose (). forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpublisher . publish Post ( it ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis @ Timer Trigger Strategy . send To Logger ( e , Ġ" Try Ġto Ġpublish Ġwith Ġtriggering ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtrigger Loop @ while Ġ( isActive ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcurrent Now Ġ= ĠDateTime . now () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġnext Time Ġ= ĠgetNext Time ( current Now ) Ġ?: Ġbreak ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdelay ( next Time . millis Ġ- Ġcurrent Now . millis ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġnext After Delay Ġ= ĠgetNext Time ( current Now ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnext After Delay Ġ== Ġnext Time Ġ-> Ġtrigger () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnext After Delay Ġ== Ġnull Ġ|| Ġnext Time Ġ< ĠgetNext Time ( current Now ) Ġ-> Ġcontinue @ trigger Loop ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġcurrent Next Ġ= Ġnext After Delay ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdo Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcurrent Next Ġ= ĠgetNext Time ( current Next Ġ?: Ġbreak ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( current Next Ġ== Ġnext Time ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtrigger () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontinue @ trigger Loop ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġwhile Ġ( current Next Ġ!= Ġnull Ġ&& Ġcurrent Next Ġ< Ġnext Time ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġget Triggers InRange ( from : ĠDateTime Ġ= ĠDateTime . now (), Ġto : ĠDateTime Ġ= ĠDateTime ( get Plus Tw enty Four Hours ())) : ĠList < DateTime > Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġtimes Ġ= Ġmutable ListOf < DateTime >() ĊĠĠĠĠĠĠĠ Ġvar Ġcurrent Ġ= ĠgetNext Time ( from ) Ġ?: Ġreturn Ġtimes ĊĠĠĠĠĠĠĠ Ġval Ġto Millis Ġ= Ġto . millis ĊĠĠĠĠĠĠĠ Ġwhile Ġ( current . millis Ġ<= Ġto Millis ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtimes . add ( current ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcurrent Ġ= ĠgetNext Time ( current Ġ+ Ġ 1 0 0 0 L ) Ġ?: Ġreturn Ġtimes ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġtimes ĊĠĠĠ Ġ} Ċ } Ċ Ċ suspend Ġfun ĠTimer Trigger Strategy . get Posts InRange ( ĊĠĠĠ Ġcho oser : ĠCho oser , ĊĠĠĠ Ġfrom : ĠDateTime Ġ= ĠDateTime . now (), ĊĠĠĠ Ġto : ĠDateTime Ġ= ĠDateTime ( get Plus Tw enty Four Hours ()) Ċ ): ĠMap < DateTime , ĠList < Post Id >> Ġ{ ĊĠĠĠ Ġval Ġtrigger Times Ġ= Ġget Triggers InRange ( from , Ġto ) ĊĠĠĠ Ġval Ġchosen Posts Ġ= Ġmutable ListOf < Post Id >() ĊĠĠĠ Ġval Ġtime To Posts Map Ġ= Ġmutable Map Of < DateTime , ĠList < Post Id >>() ĊĠĠĠ Ġtrigger Times . forEach Ġ{ Ġcurrent DateTime Ġ-> ĊĠĠĠĠĠĠĠ Ġval Ġto Post At The Time Ġ= Ġcho oser . trigger Choose ( current DateTime , Ġchosen Posts ) ĊĠĠĠĠĠĠĠ Ġchosen Posts . addAll ( to Post At The Time ) ĊĠĠĠĠĠĠĠ Ġtime To Posts Map [ current DateTime ] Ġ= Ġto Post At The Time . toList () ĊĠĠĠ Ġ} ĊĠĠĠ Ġreturn Ġtime To Posts Map Ċ } Ċ