package Ġnet . ay ata ka . k ord is . websocket . handlers . guild Ċ Ċ import Ġcom . google . gson . JsonObject Ċ import Ġkotlinx . coroutines . Coroutine Name Ċ import Ġkotlinx . coroutines . Global Scope Ċ import Ġnet . ay ata ka . k ord is . Discord Client Impl Ċ import Ġnet . ay ata ka . k ord is . entity . server . Server Impl Ċ import Ġnet . ay ata ka . k ord is . event . events . server . Server Ready Event Ċ import Ġnet . ay ata ka . k ord is . utils . get OrNull Ċ import Ġnet . ay ata ka . k ord is . utils . timer Ċ import Ġnet . ay ata ka . k ord is . websocket . handlers . Gateway Handler Ċ Ċ class ĠGuild Create Handler Ġ: ĠGateway Handler Ġ{ ĊĠĠĠ Ġoverride Ġval ĠeventType Ġ= Ġ" GU ILD _ CREATE " ĊĊĠĠĠ Ġoverride Ġfun Ġhandle ( client : ĠDiscord Client Impl , Ġdata : ĠJsonObject ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( data . get OrNull (" un available ") ?. as Boolean Ġ== Ġtrue ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġid Ġ= Ġdata [" id "]. as Long ĊĠĠĠĠĠĠĠ Ġval Ġis Large Ġ= Ġdata . get OrNull (" large ") ?. as Boolean Ġ== Ġtrue ĊĊĠĠĠĠĠĠĠ Ġ// ĠUpdate Ġserver Ġafter Ġre connection ĊĠĠĠĠĠĠĠ Ġclient . servers . find ( id )?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit Ġas ĠServer Impl ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit . update ( data ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! is Large ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . ready () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! it . initialized . get AndSet ( true )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġclient . event Manager . fire ( Server Ready Event ( it )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprepare ( client , Ġit ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġserver Ġ= Ġclient . servers . update Or Put ( id , Ġdata ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠServer Impl ( client , Ġdata [" id "]. as Long ). apply Ġ{ Ġupdate ( data ) Ġ} ĊĠĠĠĠĠĠĠ Ġ} Ġas ĠServer Impl ĊĊĠĠĠĠĠĠĠ Ġif Ġ(! is Large ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġserver . ready Ġ= Ġtrue ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! server . initialized . get AndSet ( true )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġclient . event Manager . fire ( Server Ready Event ( server )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprepare ( client , Ġserver ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġprepare ( client : ĠDiscord Client Impl , Ġserver : ĠServer Impl ) Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠRequest Ġadditional Ġmembers ĊĠĠĠĠĠĠĠ Ġserver . ready Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġserver . members . clear () ĊĠĠĠĠĠĠĠ Ġserver . clear Handle Lat ers () ĊĠĠĠĠĠĠĠ Ġclient . gateway . member Chunk Request Queue . offer ( server . id ) ĊĊĠĠĠĠĠĠĠ ĠGlobal Scope . timer ( 1 0 0 0 , Ġcontext Ġ= ĠCor outine Name (" Server ĠPre par er ")) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( server . members . size Ġ>= Ġserver . member Count . get () Ġ&& Ġ! server . ready ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġserver . ready () ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! server . initialized . get AndSet ( true )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġclient . event Manager . fire ( Server Ready Event ( server )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcancel () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ }