/* Ċ Ġ* Ċ Ġ* Ġ Ġ* Ġ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 ") Ċ @ file : Jvm Name (" K ai he ila Bot s ") Ċ Ċ package Ġlove . fort e . sim bot . k ai he ila Ċ Ċ import Ġio . ktor . client .* Ċ import Ġkotlinx . coroutines . Coroutine Scope Ċ import Ġkotlinx . coroutines . run Blocking Ċ import Ġlove . fort e . sim bot . Log Ab le Ċ import Ġlove . fort e . sim bot . bot . Bot Ċ import Ġlove . fort e . sim bot . constant . Priority Constant Ċ import Ġlove . fort e . sim bot . k ai he ila . api . Api Ċ import Ġlove . fort e . sim bot . k ai he ila . api . Api Configuration Ċ import Ġlove . fort e . sim bot . k ai he ila . event . Event Ċ import Ġlove . fort e . sim bot . k ai he ila . objects . Guild Ċ import Ġlove . fort e . sim bot . k ai he ila . objects . User Ċ import Ġorg . slf 4 j . Logger Ċ import Ġkotlin . contracts . Experimental Contracts Ċ import Ġkotlin . contracts . contract ĊĊ Ċ /** Ċ Ġ* Ġ ä¸Ģä¸ª Ġk hl Bot æīĢ åºĶ æľīçļĦ åŁºç¡Ģ API æİ¥åı£ ãĢĤ Ċ Ġ* Ċ Ġ* Ġ@ see ĠK hl Bot Ċ Ġ*/ Ċ public Ġinterface ĠK hl Bot Api Ġ{ ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ å¾ĹåĪ° æŃ¤ BOT ä¸ĭ æīĢæľīçļĦ [ æľįåĬ¡åĻ¨ ][ Guild ] ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ Jvm Synt hetic ĊĠĠĠ Ġsuspend Ġfun Ġguild s (): ĠList < Guild > ĊĠĠĠ Ġfun Ġget Guild s () Ġ= Ġrun Blocking Ġ{ Ġguild s () Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġæł¹æį® Ġ[ guild Id ] Ġ å¯ » æī¾ ä¸Ģä¸ª åĬłåħ¥ Ġ[ æľįåĬ¡åĻ¨ ][ Guild ] ãĢĤ ĊĠĠĠĠ Ġ* Ġ@ throws Ġlove . fort e . sim bot . k ai he ila . api . K hl ApiException ĠApi è¿ĶåĽŀ éĶĻè¯¯ çļĦæĹ¶åĢĻ ãĢĤ ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ Jvm Synt hetic ĊĠĠĠ Ġsuspend Ġfun Ġguild ( guild Id : ĠString ): ĠGuild ĊĠĠĠ Ġfun Ġget Guild ( guild Id : ĠString ) Ġ= Ġrun Blocking Ġ{ Ġguild ( guild Id ) Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġæł¹æį® Ġ[ æľįåĬ¡åĻ¨ ][ guild Id ] ĠåĴĮ Ġ[ çĶ¨æĪ· ID ][ userId ] ĠæŁ¥è¯¢ ä¸Ģä¸ª äººçļĦ ä¿¡æģ¯ ãĢĤ ĊĠĠĠĠ Ġ* Ġ@ throws Ġlove . fort e . sim bot . k ai he ila . api . K hl ApiException ĠApi è¿ĶåĽŀ éĶĻè¯¯ çļĦæĹ¶åĢĻ ãĢĤ ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ Jvm Synt hetic ĊĠĠĠ Ġsuspend Ġfun Ġview User ( guild Id : ĠString , ĠuserId : ĠString ): ĠUser ĊĠĠĠ Ġfun ĠgetUser View ( guild Id : ĠString , ĠuserId : ĠString ) Ġ= Ġrun Blocking Ġ{ Ġview User ( guild Id , ĠuserId ) Ġ} ĊĊ Ċ } ĊĊ Ċ /** Ċ Ġ* Ġ ä¸Ģä¸ª å¼Ģ é»ĳ åķ ¦ Bot çļĦä¿¡æģ¯ å®ŀä¾ĭ ãĢĤ Ċ Ġ* Ċ Ġ* Ġ åıĤèĢĥ Ġ[ å¼Ģ é»ĳ åķ ¦ Ġ- Ġ æľºåĻ¨ äºº ]( https :// developer . k ai he ila . cn / bot ) Ċ Ġ* Ċ Ġ* Ċ Ġ* Ġ æľºåĻ¨ äºº è¿ŀæİ¥ æ¨¡å¼ı æľī ä¸¤ç§į ï¼ļ web Socket ĠåĴĮ Ġwebhook . Ċ Ġ* Ċ Ġ* Ċ Ġ* Ġ@ author ĠF orte Sc ar let Ċ Ġ*/ Ċ public Ġinterface ĠK hl Bot Ġ: ĠLog Ab le , ĠBot , ĠK hl Bot Api , ĠCor outine Scope Ġ{ ĊĊĠĠĠ Ġval Ġapi : ĠApi ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġbot æīĢ å±ŀ çļĦ logger ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġoverride Ġval Ġlog : ĠLogger ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ ä¸İ ç½ĳç»ľ æĹ¥å¿Ĺ çĽ¸åħ³ çļĦ logger ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġval Ġnetwork Log : ĠLogger ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠæŃ¤ bot æīĢ ä½¿çĶ¨çļĦ api éħįç½® ä¿¡æģ¯ ãĢĤ ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġval Ġapi Configuration : ĠApi Configuration ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠClient Ġid . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġval ĠclientId : ĠString ĊĊĊĠĠĠ Ġval Ġclient : ĠHttpClient ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġtoken Ġinfo . Ġåı¯ä»¥ éĩįæĸ° çĶŁæĪĲ ï¼Į åĽłæŃ¤ ä¹Ł åħģè®¸ è¿Ĳè¡Į æĹ¶ æĽ´æĸ° ãĢĤ ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġvar Ġtoken : ĠString ĊĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġclient Ġsecret . Ġåı¯ä»¥ éĩįæĸ° çĶŁæĪĲ ï¼Į åĽłæŃ¤ ä¹Ł åħģè®¸ è¿Ĳè¡Į æĹ¶ æĽ´æĸ° ãĢĤ ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġvar Ġclient Secret : ĠString ĊĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ è¿ŀæİ¥ æ¨¡å¼ı ãĢĤ ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġval Ġconnection Mode : ĠConnection Mode ĊĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ åĲ¯çĶ¨ è¿Ļä¸ª bot ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ Jvm Synt hetic ĊĠĠĠ Ġsuspend Ġfun Ġstart () ĊĠĠĠ Ġfun Ġstart Bot () Ġ= Ġrun Blocking Ġ{ Ġstart () Ġ} ĊĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ ç»Ī æŃ¢ è¿Ļä¸ª bot . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ Jvm Synt hetic ĊĠĠĠ Ġsuspend Ġfun Ġclose ( cause : ĠThrowable ? Ġ= Ġnull ) ĊĠĠĠ Ġfun Ġclose Bot ( cause : ĠThrowable ) Ġ= Ġrun Blocking Ġ{ Ġclose ( cause ) Ġ} ĊĠĠĠ Ġfun Ġclose Bot () Ġ= Ġrun Blocking Ġ{ Ġclose ( null ) Ġ} ĊĊĠĠĠ Ġ@ Jvm Synt hetic ĊĠĠĠ Ġsuspend Ġfun Ġjoin () ĊĠĠĠ Ġfun Ġjoin Bot () Ġ= Ġrun Blocking Ġ{ Ġjoin () Ġ} ĊĊĊĠĠĠ Ġfun Ġlisten ( priority : ĠInt Ġ= ĠPriority Constant . LAST , Ġlistener : Ġsuspend Ġ( Event <* >) Ġ-> ĠUnit ) Ċ Ċ } ĊĊ Ċ public Ġval ĠK hl Bot . bot Code : ĠString Ġget () Ġ= Ġbot Info . bot Code Ċ public Ġval ĠK hl Bot . bot Code Number : ĠLong Ġget () Ġ= Ġbot Info . bot Code Number Ċ public Ġval ĠK hl Bot . bot Name : ĠString Ġget () Ġ= Ġbot Info . bot Name Ċ public Ġval ĠK hl Bot . bot Avatar : ĠString ? Ġget () Ġ= Ġbot Info . bot Avatar ĊĊ Ċ public Ġinline Ġfun Ġ< re ified ĠE > ĠK hl Bot . listen Prec ise ( ĊĠĠĠ Ġpriority : ĠInt Ġ= ĠPriority Constant . LAST , ĊĠĠĠ Ġcross inline Ġlistener : Ġsuspend Ġ( E ) Ġ-> ĠUnit , Ċ ) Ġ= Ġlisten ( priority ) Ġ{ ĊĠĠĠ Ġif Ġ( it Ġis ĠE ) Ġlistener ( it ) Ċ } ĊĊ Ċ /** Ċ Ġ* Ġä½¿çĶ¨ Websocket åįıè®® éĢļ è®¯ çļĦ bot ãĢĤ Ċ Ġ*/ Ċ public Ġinterface ĠWeb socket Bot Ġ: ĠK hl Bot Ġ{ ĊĠĠĠ Ġoverride Ġval Ġconnection Mode : ĠConnection Mode ĊĠĠĠĠĠĠĠ Ġget () Ġ= ĠConnection Mode . WEB SOCKET Ċ } Ċ Ċ /** Ċ Ġ* Ġä½¿çĶ¨ Webhook æĸ¹å¼ı çļĦ bot ãĢĤ Ċ Ġ*/ Ċ public Ġinterface ĠWeb hook Bot Ġ: ĠK hl Bot Ġ{ ĊĠĠĠ Ġoverride Ġval Ġconnection Mode : ĠConnection Mode ĊĠĠĠĠĠĠĠ Ġget () Ġ= ĠConnection Mode . WEB HOOK ĊĠĠĠ Ġ// Ġ ä»ĸ è¿ĺ éľĢè¦ģ ä¸ĢäºĽ é¢Ŀ å¤ĸ çļĦåıĤæķ° ãĢĤ ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠVerify ĠToken . Ġåı¯ä»¥ éĩįæĸ° çĶŁæĪĲ ãĢĤ ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġvar Ġverify Token : ĠString ĊĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠEncrypt ĠKey . Ġåı¯ä»¥ éĩįæĸ° çĶŁæĪĲ ï¼Į åı¯ä»¥ ä¸ºç©º ãĢĤ ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġvar Ġencrypt Key : ĠString ? Ċ } ĊĊ Ċ public Ġenum Ġclass ĠConnection Mode Ġ{ ĊĠĠĠ ĠWEB SOCKET , ĠWEB HOOK Ċ } ĊĊ Ċ public Ġinline Ġfun ĠK hl Bot . require Mode ( ĊĠĠĠ Ġmode : ĠConnection Mode , ĊĠĠĠ Ġmsg : Ġ() Ġ-> ĠString Ġ= Ġ{ Ġ" K ai he ila Bot 's Ġconnection Ġmode Ġrequire Ġ$ mode , Ġbut Ġnot ." Ġ}, Ċ ) Ġ{ ĊĠĠĠ Ġif Ġ( this . connection Mode Ġ!= Ġmode ) Ġ{ ĊĠĠĠĠĠĠĠ Ġthrow ĠIllegalStateException ( msg ()) ĊĠĠĠ Ġ} Ċ } Ċ Ċ public Ġinline Ġfun ĠK hl Bot . require Websocket Mode ( msg : Ġ() Ġ-> ĠString Ġ= Ġ{ Ġ" K ai he ila Bot 's Ġconnection Ġmode Ġrequire ĠWeb socket , Ġbut Ġnot ." Ġ}): ĠWeb socket Bot Ġ{ ĊĠĠĠ Ġif Ġ( this . is Websocket Bot ()) Ġreturn Ġthis Ġelse Ġthrow ĠIllegalStateException ( msg ()) Ċ } Ċ Ċ public Ġinline Ġfun ĠK hl Bot . require Webhook Mode ( msg : Ġ() Ġ-> ĠString Ġ= Ġ{ Ġ" K ai he ila Bot 's Ġconnection Ġmode Ġrequire ĠWeb hook , Ġbut Ġnot ." Ġ}): ĠWeb hook Bot Ġ{ ĊĠĠĠ Ġif Ġ( this . is Webhook Bot ()) Ġreturn Ġthis Ġelse Ġthrow ĠIllegalStateException ( msg ()) Ċ } ĊĊ Ċ public Ġfun ĠK hl Bot . check Mode ( mode : ĠConnection Mode ): ĠBoolean Ġ= Ġconnection Mode Ġ== Ġmode ĊĊ Ċ @ Opt In ( Experimental Contracts :: class ) Ċ public Ġfun ĠK hl Bot . is Websocket Bot (): ĠBoolean Ġ{ ĊĠĠĠ Ġcontract Ġ{ ĊĠĠĠĠĠĠĠ Ġreturns ( true ) Ġimplies Ġ( this @ is Websocket Bot Ġis ĠWeb socket Bot ) ĊĠĠĠ Ġ} ĊĠĠĠ Ġreturn Ġcheck Mode ( Connection Mode . WEB SOCKET ) Ċ } ĊĊ Ċ @ Opt In ( Experimental Contracts :: class ) Ċ public Ġfun ĠK hl Bot . is Webhook Bot (): ĠBoolean Ġ{ ĊĠĠĠ Ġcontract Ġ{ ĊĠĠĠĠĠĠĠ Ġreturns ( true ) Ġimplies Ġ( this @ is Webhook Bot Ġis ĠWeb hook Bot ) ĊĠĠĠ Ġ} ĊĠĠĠ Ġreturn Ġcheck Mode ( Connection Mode . WEB SOCKET ) Ċ } ĊĊ