/* Ċ Ġ* Ċ Ġ* Ġ Ġ* ĠCopyright Ġ( c ) Ġ 2 0 2 1 . ĠF orte Sc ar let ĠAll Ġrights Ġreserved . Ċ Ġ* Ġ Ġ* ĠProject Ġ Ġsimple - robot Ċ Ġ* Ġ Ġ* ĠFile ĠĠĠĠ ĠMir ai Avatar . kt Ċ Ġ* Ġ Ġ* Ċ Ġ* Ġ Ġ* ĠYou Ġcan Ġcontact Ġthe Ġauthor Ġthrough Ġthe Ġfollowing Ġchannels : Ċ Ġ* Ġ Ġ* Ġgithub Ġhttps :// github . com / F orte Sc ar let Ċ Ġ* Ġ Ġ* Ġg itee Ġ Ġhttps :// g itee . com / F orte Sc ar let Ċ Ġ* Ġ Ġ* Ġemail Ġ ĠF orte Sc ar let @ 1 6 3 . com Ċ Ġ* Ġ Ġ* ĠQQ ĠĠĠĠĠ 1 1 4 9 1 5 9 2 1 8 Ċ Ġ* Ċ Ġ*/ Ċ Ċ @ file : Suppress (" unused ") Ċ Ċ package Ġlove . fort e . sim bot . core . listener Ċ Ċ import Ġlove . fort e . sim bot . annotation . List ens Ċ import Ġlove . fort e . sim bot . api . Sim bot Experimental Api Ċ import Ġlove . fort e . sim bot . api . message . events . Msg Get Ċ import Ġlove . fort e . sim bot . api . sender . Msg Sender Ċ import Ġlove . fort e . sim bot . constant . Priority Constant Ċ import Ġlove . fort e . sim bot . filter .* Ċ import Ġlove . fort e . sim bot . listener . Listen Result Ċ import Ġlove . fort e . sim bot . listener . Listener Function Ċ import Ġlove . fort e . sim bot . listener . Listener Function Invoke Data Ċ import Ġlove . fort e . sim bot . listener . Listener Group Manager Ċ import Ġjava . lang . reflect . Type Ċ import Ġkotlin . reflect . K Class Ċ Ċ /* ĊĠĠĠ Ġ çĽĳåĲ¬ åĩ½æķ° æŀĦéĢł å®ŀä¾ĭ Ċ Ġ*/ ĊĊĊĊĊ Ċ /** Ċ Ġ* Ġ æŀĦå»º ä¸Ģä¸ª Ġ[ Listener Function ]. Ċ Ġ* Ċ Ġ*/ Ċ @ Listener Function Builder DSL Ċ public Ġinline Ġfun Ġ< T Ġ: ĠMsg Get > Ġbuild Listener Function ( ĊĠĠĠ Ġid : ĠString , ĊĠĠĠ Ġvar arg Ġlisten Types : ĠK Class < out ĠT >, ĊĠĠĠ Ġblock : ĠListener Function Builder < T >. () Ġ-> ĠUnit , Ċ ): ĠListener Function Ġ= Ġbuild Listener Function ( id Ġ= Ġid , Ġname Ġ= Ġid , Ġ* listen Types , Ġblock Ġ= Ġblock ) ĊĊ Ċ /** Ċ Ġ* Ġ æŀĦå»º ä¸Ģä¸ª Ġ[ Listener Function ]. Ċ Ġ* Ċ Ġ*/ Ċ @ Listener Function Builder DSL Ċ public Ġinline Ġfun Ġ< T Ġ: ĠMsg Get > Ġbuild Listener Function ( ĊĠĠĠ Ġid : ĠString , ĊĠĠĠ Ġname : ĠString , ĊĠĠĠ Ġvar arg Ġlisten Types : ĠK Class < out ĠT >, Ġblock : ĠListener Function Builder < T >. () Ġ-> ĠUnit , Ċ ): ĠListener Function Ġ= ĠListener Function Builder ( id , Ġname , Ġ* listen Types . map Ġ{ Ġk c Ġ-> Ġk c . java Ġ}. to Typed Array ()). apply ( block ). build () Ċ Ċ /** Ċ Ġ* Ġ æŀĦå»º ä¸Ģä¸ª Ġ[ Listener Function ]. Ċ Ġ* Ċ Ġ*/ Ċ @ Listener Function Builder DSL Ċ public Ġfun Ġ< T Ġ: ĠMsg Get > Ġlistener Function ( ĊĠĠĠ Ġid : ĠString , ĊĠĠĠ Ġvar arg Ġlisten Types : ĠK Class < out ĠT >, ĊĠĠĠ Ġinvok er : Ġsuspend Ġ( data : ĠListener Function Invoke Data ) Ġ-> ĠListen Result <* >, Ċ ): ĠListener Function Ġ= Ġbuild Listener Function ( id Ġ= Ġid , Ġname Ġ= Ġid , Ġ* listen Types ) Ġ{ ĊĠĠĠ Ġinvok er ( inv oker ) Ċ } ĊĊ Ċ /** Ċ Ġ* Ġ æŀĦå»º ä¸Ģä¸ª Ġ[ Listener Function ]. Ċ Ġ* Ċ Ġ*/ Ċ @ Listener Function Builder DSL Ċ public Ġfun Ġ< T Ġ: ĠMsg Get > Ġlistener Function ( ĊĠĠĠ Ġid : ĠString , ĊĠĠĠ Ġname : ĠString , ĊĠĠĠ Ġvar arg Ġlisten Types : ĠK Class < out ĠT >, ĊĠĠĠ Ġinvok er : Ġsuspend Ġ( data : ĠListener Function Invoke Data ) Ġ-> ĠListen Result <* >, Ċ ): ĠListener Function Ġ= Ġbuild Listener Function ( id Ġ= Ġid , Ġname Ġ= Ġname , Ġ* listen Types ) Ġ{ ĊĠĠĠ Ġinvok er ( inv oker ) Ċ } Ċ Ċ /** Ċ Ġ* Ġ æŀĦå»º ä¸Ģä¸ª Ġ[ Listener Function ]. Ċ Ġ* Ċ Ġ*/ Ċ @ Listener Function Builder DSL Ċ public Ġfun Ġ< T Ġ: ĠMsg Get > Ġlistener Function ( ĊĠĠĠ Ġid : ĠString , ĊĠĠĠ Ġvar arg Ġlisten Types : ĠK Class < out ĠT >, ĊĠĠĠ Ġinvok er : Ġsuspend Ġ( msg : ĠT , Ġsender : ĠMsg Sender , Ġat Detection : ĠAt Detection ) Ġ-> ĠListen Result <* >, Ċ ): ĠListener Function Ġ= Ġbuild Listener Function ( id Ġ= Ġid , Ġname Ġ= Ġid , Ġ* listen Types ) Ġ{ ĊĠĠĠ Ġinvok er ( inv oker ) Ċ } ĊĊ Ċ /** Ċ Ġ* Ġ æŀĦå»º ä¸Ģä¸ª Ġ[ Listener Function ]. Ċ Ġ* Ċ Ġ*/ Ċ @ Listener Function Builder DSL Ċ public Ġfun Ġ< T Ġ: ĠMsg Get > Ġlistener Function ( ĊĠĠĠ Ġid : ĠString , ĊĠĠĠ Ġname : ĠString , ĊĠĠĠ Ġvar arg Ġlisten Types : ĠK Class < out ĠT >, ĊĠĠĠ Ġinvok er : Ġsuspend Ġ( msg : ĠT , Ġsender : ĠMsg Sender , Ġat Detection : ĠAt Detection ) Ġ-> ĠListen Result <* >, Ċ ): ĠListener Function Ġ= Ġbuild Listener Function ( id Ġ= Ġid , Ġname Ġ= Ġname , Ġ* listen Types ) Ġ{ ĊĠĠĠ Ġinvok er ( inv oker ) Ċ } ĊĊ Ċ @ Target ( Annotation Target . CLASS , ĠAnnotation Target . FUNCTION , ĠAnnotation Target . PROPERTY ) Ċ @ Dsl Marker Ċ annotation Ġclass ĠListener Function Builder DSL ĊĊ Ċ /** Ċ Ġ* Ġ æŀĦå»º ä¸Ģä¸ª Ġ[ Listener Function ] Ġ å®ŀä¾ĭ . Ċ Ġ* Ċ Ġ* Ċ Ġ*/ Ċ public Ġclass ĠListener Function Builder < T Ġ: ĠMsg Get > Ġ@ Jvm Over loads Ġconstructor ( ĊĠĠĠ Ġval Ġid : ĠString , ĊĠĠĠ Ġval Ġname : ĠString Ġ= Ġid , ĊĠĠĠ Ġlisten Types : ĠCollection < Class < out ĠT >>, Ċ ) Ġ{ ĊĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ Ġcheck ( listen Types . isNotEmpty ()) Ġ{ Ġ" Listen Ġtypes Ġcannot Ġbe Ġempty ." Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Jvm Over loads ĊĠĠĠ Ġconstructor ( id : ĠString , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġname : ĠString Ġ= Ġid , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar arg Ġlisten Types : ĠClass < out ĠT >): Ġthis ( id , Ġname , Ġlisten Types . toSet ()) ĊĠĠĠ Ġ@ Jvm Over loads ĊĠĠĠ Ġconstructor ( id : ĠString , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġname : ĠString Ġ= Ġid , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlisten Type : ĠClass < out ĠT >): Ġthis ( id , Ġname , Ġset Of ( listen Type )) ĊĊĊĠĠĠ Ġprivate Ġval Ġlisten Types Set Ġ= Ġlisten Types . toSet () ĊĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġinvoke Function : Ġsuspend Ġ( data : ĠListener Function Invoke Data ) Ġ-> ĠListen Result < *> ĊĊĠĠĠ Ġ// //////// / ĠCommon ĠĠ Ġ// //////// //// ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġæĺ¯åĲ¦ ä¸º Ġ[ å¤ĩ çĶ¨ åĩ½æķ° ][ Listener Function . sp are ] ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ Listener Function Builder DSL ĊĠĠĠ Ġvar Ġis Sp are Ġ= Ġfalse ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġæĺ¯åĲ¦ ä¸º Ġ[ å¼ĤæŃ¥ åĩ½æķ° ][ love . fort e . sim bot . annotation . Async ] ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ Listener Function Builder DSL ĊĠĠĠ Ġvar Ġis Async Ġ= Ġfalse ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ çĽĳåĲ¬ åĩ½æķ° çļĦ ä¼ĺåħĪ çº§ ãĢĤ ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ Listener Function Builder DSL ĊĠĠĠ Ġvar Ġpriority Ġ= ĠList ens . DEFAULT _ PRIORITY ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ æīĢ å±ŀ è½½ ä½ĵ ãĢĤ ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ Listener Function Builder DSL ĊĠĠĠ Ġvar Ġtype : ĠType Ġ= ĠAny :: class . java ĊĊĊĠĠĠ Ġ@ Opt In ( Sim bot Experimental Api :: class ) ĊĠĠĠ Ġprivate Ġvar Ġgroups : ĠList < String > Ġ= Ġempty List () ĊĊĊĠĠĠ Ġ@ Opt In ( Sim bot Experimental Api :: class ) ĊĠĠĠ Ġprivate Ġvar Ġgroup Manager : ĠListener Group Manager ? Ġ= Ġnull ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġä¸º å½ĵåīį çĽĳåĲ¬ åĩ½æķ° åĪĨéħį çĽĳåĲ¬ åĪĨ ç»Ħ ãĢĤ ĊĠĠĠĠ Ġ* Ġ è¿Ľè¡Į åĪĨ ç»Ħ éľĢè¦ģ æıĲä¾Ľ Ġ[ Listener Group Manager ] Ġ å®ŀä¾ĭ ãĢĤ ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ Opt In ( Sim bot Experimental Api :: class ) ĊĠĠĠ Ġfun Ġlistener Group ( group Manager : ĠListener Group Manager , Ġvar arg Ġgroups : ĠString ): ĠListener Function Builder < T > Ġ{ ĊĠĠĠĠĠĠĠ Ġthis . group Manager Ġ= Ġgroup Manager ĊĠĠĠĠĠĠĠ Ġthis . groups Ġ= Ġgroups . toList () ĊĠĠĠĠĠĠĠ Ġreturn Ġthis ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ æ³¨è§£ èİ·åıĸ åĻ¨ ãĢĤ é»ĺè®¤ æĹłæ³ķ èİ·åıĸ ä»»ä½ķ æ³¨è§£ ãĢĤ ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġvar Ġannotation Getter : Ġ( type : ĠClass < out ĠAnnotation >) Ġ-> ĠAnnotation ? Ġ= Ġ{ Ġnull Ġ} ĊĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġè®¾ç½® ä¸Ģä¸ª æ³¨è§£ èİ·åıĸ åĻ¨ ãĢĤ ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ Listener Function Builder DSL ĊĠĠĠ Ġfun Ġannotation Getter ( block : Ġ( type : ĠClass < out ĠAnnotation >) Ġ-> ĠAnnotation ?): ĠListener Function Builder < T > Ġ{ ĊĠĠĠĠĠĠĠ Ġthis . annotation Getter Ġ= Ġblock ĊĠĠĠĠĠĠĠ Ġreturn Ġthis ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠæıĲ ä¾Ľ åı¯ä»¥ èİ·åıĸ çļĦ æ³¨è§£ åĪĹè¡¨ ãĢĤ ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ Listener Function Builder DSL ĊĠĠĠ Ġfun Ġannotations ( var arg Ġannotations : ĠAnnotation ): ĠListener Function Builder < T > Ġ{ ĊĠĠĠĠĠĠĠ Ġwhen Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġannotations . isEmpty () Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġannotation Getter Ġ= Ġ{ Ġnull Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġthis ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġannotations . size Ġ== Ġ 1 Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsingle Ġ= Ġannotations [ 0 ] ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtype Ġ= Ġsingle . annotation Class . java ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġannotation Getter Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( it Ġ== Ġtype ) Ġsingle Ġelse Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmap Ġ= Ġmutable Map Of < Class < out ĠAnnotation >, ĠAnnotation >() ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( annotation Ġin Ġannotations ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmap [ annotation . annotation Class . java ] Ġ= Ġannotation ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġannotation Getter Ġ{ Ġmap [ it ] Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠæŃ¤ çĽĳåĲ¬ åĩ½æķ° çļĦ è¿ĩæ»¤ åĻ¨ ãĢĤ ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġvar Ġfilter : ĠListener Filter ? Ġ= Ġnull ĊĊĠĠĠ Ġ@ Jvm Over loads ĊĠĠĠ Ġ@ Listener Function Builder DSL ĊĠĠĠ Ġfun Ġfilter ( priority : ĠInt Ġ= ĠPriority Constant . LAST , Ġblock : Ġ( data : ĠFilter Data ) Ġ-> ĠBoolean ): ĠListener Function Builder < T > Ġ{ ĊĠĠĠĠĠĠĠ Ġthis . filter Ġ= Ġbuild Listener Filter Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis . priority Ġ= Ġpriority ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfilter ( block ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġthis ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġ// //////// / Ġ ĠFor Ġkt Ġ Ġ// //////// //// ĊĊĠĠĠ Ġ@ Jvm Synt hetic ĊĠĠĠ Ġ@ Listener Function Builder DSL ĊĠĠĠ Ġfun Ġbuild Filter ( filter : ĠListener Filter Builder . () Ġ-> ĠUnit ): ĠListener Function Builder < T > Ġ{ ĊĠĠĠĠĠĠĠ Ġthis . filter Ġ= Ġbuild Listener Filter ( filter ) ĊĠĠĠĠĠĠĠ Ġreturn Ġthis ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ çĽĳåĲ¬ åĩ½æķ° å®ŀéĻħ çļĦ æī§è¡Į åĩ½æķ° . ĠæıĲ ä¾Ľ å®Įæķ´ çļĦ äºĭä»¶ åıĤæķ° ãĢĤ ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ Listener Function Builder DSL ĊĠĠĠ Ġ@ Jvm Synt hetic ĊĠĠĠ Ġfun Ġinvok er ( block : Ġsuspend Ġ( data : ĠListener Function Invoke Data ) Ġ-> ĠListen Result < *> ): ĠListener Function Builder < T > Ġ{ ĊĠĠĠĠĠĠĠ Ġinvoke Function Ġ= Ġblock ĊĠĠĠĠĠĠĠ Ġreturn Ġthis ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ çĽĳåĲ¬ åĩ½æķ° å®ŀéĻħ çļĦ æī§è¡Į åĩ½æķ° , Ġ ä»ħ æıĲä¾Ľ Ġ[ å½ĵåīį äºĭä»¶ ][ T ] Ġ ä¸İ Ġ[ éĢģ ä¿¡ åĻ¨ ][ Msg Sender ] Ġ å®ŀä¾ĭ . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ Listener Function Builder DSL ĊĠĠĠ Ġ@ Suppress (" UN CHECK ED _ CAST ") ĊĠĠĠ Ġ@ Jvm Synt hetic ĊĠĠĠ Ġfun Ġinvok er ( block : Ġsuspend Ġ( msg : ĠT , Ġsender : ĠMsg Sender , Ġat Detection : ĠAt Detection ) Ġ-> ĠListen Result < *> ): ĠListener Function Builder < T > Ġ{ ĊĠĠĠĠĠĠĠ Ġinvoke Function Ġ= Ġ{ Ġdata Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmsg Ġ= Ġdata . msg Get Ġas ĠT ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsender Ġ= Ġdata . msg Sender ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġat Detection Ġ= Ġdata . at Detection ĊĠĠĠĠĠĠĠĠĠĠĠ Ġblock ( msg , Ġsender , Ġat Detection ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġthis ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġ// //////// / Ġ ĠFor ĠJava Ġ Ġ// //////// //// ĊĊĠĠĠ Ġ@ Suppress (" FunctionName ") ĊĠĠĠ Ġ@ Listener Function Builder DSL ĊĠĠĠ Ġ@ Jvm Name (" listener Filter ") ĊĠĠĠ Ġfun Ġ_ listener Filter ( filter : ĠBuild Listener Filter ): ĠListener Function Builder < T > Ġ{ ĊĠĠĠĠĠĠĠ Ġthis . filter Ġ= Ġbuild Listener Filter ( filter ) ĊĠĠĠĠĠĠĠ Ġreturn Ġthis ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ çĽĳåĲ¬ åĩ½æķ° å®ŀéĻħ çļĦ æī§è¡Į åĩ½æķ° . ĠæıĲ ä¾Ľ å®Įæķ´ çļĦ äºĭä»¶ åıĤæķ° ãĢĤ ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ Suppress (" FunctionName ") ĊĠĠĠ Ġ@ Jvm Name (" listener Function ") ĊĠĠĠ Ġfun Ġ_ listener Function 4 j ( block : Ġ( data : ĠListener Function Invoke Data ) Ġ-> ĠListen Result < *> ): ĠListener Function Builder < T > Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġinvok er Ġ{ Ġd Ġ-> Ġblock ( d ) Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ çĽĳåĲ¬ åĩ½æķ° å®ŀéĻħ çļĦ æī§è¡Į åĩ½æķ° , Ġ ä»ħ æıĲä¾Ľ Ġ[ å½ĵåīį äºĭä»¶ ][ T ] Ġ ä¸İ Ġ[ éĢģ ä¿¡ åĻ¨ ][ Msg Sender ] Ġ å®ŀä¾ĭ . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ Suppress (" FunctionName ") ĊĠĠĠ Ġ@ Jvm Name (" listener Function ") ĊĠĠĠ Ġfun Ġ_ listener Function 4 j ( block : Ġ( msg : ĠT , Ġsender : ĠMsg Sender , Ġat Detection : ĠAt Detection ) Ġ-> ĠListen Result < *> ): ĠListener Function Builder < T > Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġinvok er Ġ{ Ġmsg , Ġsender , Ġat Detection Ġ-> Ġblock ( msg , Ġsender , Ġat Detection ) Ġ} ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġ@ Opt In ( Sim bot Experimental Api :: class ) ĊĠĠĠ Ġfun Ġbuild (): ĠListener Function Ġ= ĠFunction Listener Function ( ĊĠĠĠĠĠĠĠ Ġid Ġ= Ġid , ĊĠĠĠĠĠĠĠ Ġname Ġ= Ġname , ĊĠĠĠĠĠĠĠ Ġsp are Ġ= Ġis Sp are , ĊĠĠĠĠĠĠĠ Ġpriority Ġ= Ġpriority , ĊĠĠĠĠĠĠĠ Ġis Async Ġ= Ġis Async , ĊĠĠĠĠĠĠĠ Ġtype Ġ= Ġtype , ĊĠĠĠĠĠĠĠ Ġlisten Types Ġ= Ġlisten Types Set , ĊĠĠĠĠĠĠĠ Ġgroup Names Ġ= Ġgroups , ĊĠĠĠĠĠĠĠ Ġgroup Manager Ġ= Ġgroup Manager , ĊĠĠĠĠĠĠĠ Ġannotation Getter Ġ= Ġannotation Getter , ĊĠĠĠĠĠĠĠ Ġfunc Ġ= Ġinvoke Function , ĊĠĠĠĠĠĠĠ Ġfilter Ġ= Ġfilter ĊĠĠĠ Ġ) Ċ } ĊĊ Ċ public Ġfun Ġinterface ĠBuild Listener Filter Ġ: Ġ( Listener Filter Builder ) Ġ-> ĠUnit Ġ{ ĊĠĠĠ Ġoverride Ġoperator Ġfun Ġinvoke ( builder : ĠListener Filter Builder ) Ċ } ĊĊĊĊ