package Ġdev . sch la ubi . mik bot . plugin . api . util Ċ Ċ import Ġcom . kot l ind is cord . k ord . extensions . pagination . builders . Paginator Builder Ċ import Ġdev . k ord . core . behavior . User Behavior Ċ import Ġdev . k ord . rest . builder . message . Embed Builder Ċ import Ġkotlinx . coroutines . flow . Flow Ċ import Ġkotlinx . coroutines . flow . drop Ċ import Ġkotlinx . coroutines . flow . take Ċ import Ġkotlinx . coroutines . flow . toList Ċ import Ġkotlin . math . ceil Ċ Ċ /** Ċ Ġ* ĠConfig ures Ġthis Ġ[ Paginator Builder ] Ġto Ġcreate Ġone Ġpage Ġfor Ġeach Ġ[ x ][ chunk Size ] Ġelements Ġin Ġ[ items ] Ċ Ġ* Ġ. Ċ Ġ* Ċ Ġ* Ġ@ param Ġuser Ġthe Ġ[ Paginator Builder . owner ] Ġof Ġthis Ġpag inator Ċ Ġ* Ġ@ param Ġitems Ġa Ġ[ List ] Ġcontaining Ġall Ġthe Ġitems Ċ Ġ* Ġ@ param Ġmapper Ġa Ġmapper Ġconverting Ġ[ T ] Ġto Ġ[ String ] Ċ Ġ* Ġ@ param Ġtitle Ġa Ġfunction Ġproviding Ġthe Ġtitle Ġfor Ġthe Ġcurrent Ġpage Ċ Ġ* Ġ@ param Ġenumerate Ġwhether Ġto Ġinclude Ġelement Ġnumbers Ġin Ġentries Ġor Ġnot Ċ Ġ* Ġ@ param Ġadditional Config Ġadditional Ġ[ Paginator Builder ] Ġconfig Ċ Ġ* Ġ@ param Ġadditional Page Config Ġadditional Ġ[ Embed Builder ] Ġconfig , Ġapplied Ġto Ġeach Ġpage Ċ Ġ*/ Ċ public Ġsuspend Ġfun Ġ< T > ĠPag inator Builder . for List ( ĊĠĠĠ Ġuser : ĠUser Behavior , ĊĠĠĠ Ġitems : ĠList < T >, ĊĠĠĠ Ġmapper : Ġsuspend Ġ( T ) Ġ-> ĠString , ĊĠĠĠ Ġtitle : Ġsuspend Ġ( current : ĠInt , Ġtotal : ĠInt ) Ġ-> ĠString , ĊĠĠĠ Ġchunk Size : ĠInt Ġ= Ġ 8 , ĊĠĠĠ Ġenumerate : ĠBoolean Ġ= Ġtrue , ĊĠĠĠ Ġadditional Config : Ġsuspend ĠPag inator Builder . () Ġ-> ĠUnit Ġ= Ġ{}, ĊĠĠĠ Ġadditional Page Config : Ġsuspend ĠEmbed Builder . () Ġ-> ĠUnit Ġ= Ġ{}, Ċ ): ĠUnit Ġ= Ġfor List ( user , Ġitems . size , Ġ{ Ġoffset , Ġlimit Ġ-> ĊĠĠĠ Ġitems . sub List ( offset , Ġ( offset Ġ+ Ġlimit ). coerce At Most ( items . size )) Ċ }, Ġmapper , Ġtitle , Ġchunk Size , Ġenumerate , Ġadditional Config , Ġadditional Page Config ) Ċ Ċ /** Ċ Ġ* ĠConfig ures Ġthis Ġ[ Paginator Builder ] Ġto Ġcreate Ġone Ġpage Ġfor Ġeach Ġ[ x ][ chunk Size ] Ġelements Ġin Ġ[ items ] Ċ Ġ* Ġ. Ċ Ġ* Ċ Ġ* Ġ@ param Ġuser Ġthe Ġ[ Paginator Builder . owner ] Ġof Ġthis Ġpag inator Ċ Ġ* Ġ@ param Ġtotal Ġthe Ġtotal Ġamount Ġof Ġitems Ċ Ġ* Ġ@ param Ġitems Ġa Ġ[ Flow ] Ġcontaining Ġall Ġthe Ġitems Ċ Ġ* Ġ@ param Ġmapper Ġa Ġmapper Ġconverting Ġ[ T ] Ġto Ġ[ String ] Ċ Ġ* Ġ@ param Ġtitle Ġa Ġfunction Ġproviding Ġthe Ġtitle Ġfor Ġthe Ġcurrent Ġpage Ċ Ġ* Ġ@ param Ġenumerate Ġwhether Ġto Ġinclude Ġelement Ġnumbers Ġin Ġentries Ġor Ġnot Ċ Ġ* Ġ@ param Ġadditional Config Ġadditional Ġ[ Paginator Builder ] Ġconfig Ċ Ġ* Ġ@ param Ġadditional Page Config Ġadditional Ġ[ Embed Builder ] Ġconfig , Ġapplied Ġto Ġeach Ġpage Ċ Ġ*/ Ċ public Ġsuspend Ġfun Ġ< T > ĠPag inator Builder . for Flow ( ĊĠĠĠ Ġuser : ĠUser Behavior , ĊĠĠĠ Ġtotal : ĠLong , ĊĠĠĠ Ġitems : ĠFlow < T >, ĊĠĠĠ Ġmapper : Ġsuspend Ġ( T ) Ġ-> ĠString , ĊĠĠĠ Ġtitle : Ġsuspend Ġ( current : ĠInt , Ġtotal : ĠInt ) Ġ-> ĠString , ĊĠĠĠ Ġchunk Size : ĠInt Ġ= Ġ 8 , ĊĠĠĠ Ġenumerate : ĠBoolean Ġ= Ġtrue , ĊĠĠĠ Ġadditional Config : Ġsuspend ĠPag inator Builder . () Ġ-> ĠUnit Ġ= Ġ{}, ĊĠĠĠ Ġadditional Page Config : Ġsuspend ĠEmbed Builder . () Ġ-> ĠUnit Ġ= Ġ{}, Ċ ): ĠUnit Ġ= Ġfor List ( user , Ġtotal . toInt (), Ġ{ Ġoffset , Ġ_ Ġ-> ĊĠĠĠ Ġitems . drop ( offset ). take ( chunk Size ). toList () Ċ }, Ġmapper , Ġtitle , Ġchunk Size , Ġenumerate , Ġadditional Config , Ġadditional Page Config ) Ċ Ċ private Ġsuspend Ġfun Ġ< T > ĠPag inator Builder . for List ( ĊĠĠĠ Ġuser : ĠUser Behavior , ĊĠĠĠ Ġsize : ĠInt , ĊĠĠĠ Ġsub List : Ġsuspend Ġ( offset : ĠInt , Ġlimit : ĠInt ) Ġ-> ĠList < T >, ĊĠĠĠ Ġmapper : Ġsuspend Ġ( T ) Ġ-> ĠString , ĊĠĠĠ Ġtitle : Ġsuspend Ġ( current : ĠInt , Ġend : ĠInt ) Ġ-> ĠString , ĊĠĠĠ Ġchunk Size : ĠInt Ġ= Ġ 8 , ĊĠĠĠ Ġenumerate : ĠBoolean Ġ= Ġtrue , ĊĠĠĠ Ġadditional Config : Ġsuspend ĠPag inator Builder . () Ġ-> ĠUnit Ġ= Ġ{}, ĊĠĠĠ Ġadditional Page Config : Ġsuspend ĠEmbed Builder . () Ġ-> ĠUnit Ġ= Ġ{}, Ċ ) Ġ{ ĊĠĠĠ Ġowner Ġ= Ġuser ĊĊĠĠĠ Ġvar ĠcurrentIndex Offset Ġ= Ġ 0 ĊĊĠĠĠ Ġrepeat ( ceil ( size Ġ/ Ġchunk Size . toDouble ()). toInt ()) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġitems Ġ= Ġsub List ( currentIndex Offset , Ġchunk Size ) ĊĠĠĠĠĠĠĠ Ġadd Page ( currentIndex Offset , Ġtitle , Ġitems , Ġenumerate , Ġmapper , Ġadditional Page Config ) ĊĊĠĠĠĠĠĠĠ ĠcurrentIndex Offset Ġ+= Ġitems . size ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġadditional Config () Ċ } Ċ Ċ private Ġfun Ġ< T > ĠPag inator Builder . add Page ( ĊĠĠĠ Ġmy Offset : ĠInt , ĊĠĠĠ Ġtitle : Ġsuspend Ġ( current : ĠInt , Ġend : ĠInt ) Ġ-> ĠString , ĊĠĠĠ Ġitems : ĠList < T >, ĊĠĠĠ Ġenumerate : ĠBoolean , ĊĠĠĠ Ġmapper : Ġsuspend Ġ( T ) Ġ-> ĠString , ĊĠĠĠ Ġadditional Page Config : Ġsuspend ĠEmbed Builder . () Ġ-> ĠUnit Ċ ) Ġ{ ĊĠĠĠ Ġpage Ġ{ ĊĠĠĠĠĠĠĠ Ġthis . title Ġ= Ġtitle (( my Offset Ġ+ Ġ 1 ), Ġpages . groups . size ) ĊĊĠĠĠĠĠĠĠ Ġdescription Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġitems . map Indexed Ġ{ Ġindex , Ġit Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( enumerate ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ"${ index Ġ+ Ġmy Offset Ġ+ Ġ 1 }: Ġ${ mapper ( it )}" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmapper ( it ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. join ToString ("\ n ") ĊĊĠĠĠĠĠĠĠ Ġadditional Page Config () ĊĠĠĠ Ġ} Ċ } Ċ