package Ġxyz . cut ec loud s . earth chan . core . listeners . operations Ċ Ċ import Ġbr . com . br j devs . java . utils . async . threads . builder . Thread Builder Ċ import Ġnet . dv 8 tion . j da . core . events . message . guild . Guild Message Received Event Ċ import Ġxyz . cut ec loud s . earth chan . core . listeners . Optim ized Listener Ċ import Ġxyz . cut ec loud s . earth chan . extensions . class Of Ċ import Ġjava . util . concurrent . Concurrent HashMap Ċ import Ġjava . util . concurrent . Executors Ċ Ċ object ĠInteractive Operations Ġ: ĠOptim ized Listener < Guild Message Received Event >( class Of ()) Ġ{ ĊĠĠĠ Ġprivate Ġval ĠEXEC UT OR Ġ= ĠExec utors . new Single Thread Scheduled Executor ( Thread Builder (). setName (" Interactive Operations ĠExecutor ")) ĊĊĠĠĠ Ġprivate Ġval Ġoperations Ġ= ĠConcurrent HashMap < String , ĠInteractive Operation >() ĊĊĠĠĠ Ġoverride Ġfun Ġevent ( event : ĠGuild Message Received Event ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġid Ġ= Ġevent . channel . id ĊĠĠĠĠĠĠĠ Ġval Ġoperation Ġ= Ġoperations [ id ] ĊĊĠĠĠĠĠĠĠ Ġif Ġ( operation Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoperation . timeout Future ?. cancel ( true ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoperation . timeout Future Ġ= Ġnull ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( operation . on Message ( event )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoperations . remove ( id , Ġoperation ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġschedule Timeout ( operation , Ġfalse ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġbuilder (): ĠInteractive Operation Builder Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠInteractive Operation Builder () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġregister ( operation : ĠInteractive Operation ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( operations . containsKey ( operation . channelId )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠIllegalStateException (" Operation Ġalready Ġhappening Ġat Ġchannel Id ") ĊĊĠĠĠĠĠĠĠ Ġoperations . put ( operation . channelId , Ġoperation ) ĊĊĠĠĠĠĠĠĠ Ġschedule Timeout ( operation , Ġtrue ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġschedule Timeout ( operation : ĠInteractive Operation , Ġfirst : ĠBoolean ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġtime Amount Ġ= Ġ( if Ġ( first ) Ġoperation . initial Timeout Ġelse Ġoperation . in creasing Timeout ) Ġ?: Ġreturn ĊĊĠĠĠĠĠĠĠ Ġoperation . timeout Future Ġ= ĠEXEC UT OR . schedule ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoperations . remove ( operation . channelId , Ġoperation ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoperation . on Timeout () ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}, Ġtime Amount . amount , Ġtime Amount . unit ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġstop Operation ( channelId : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġoperation Ġ= Ġoperations . remove ( channelId ) ĊĊĠĠĠĠĠĠĠ Ġif Ġ( operation Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoperation . timeout Future ?. cancel ( true ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoperation . timeout Future Ġ= Ġnull ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġoperation . on Removed () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ