package Ġdev . k ord . gateway Ċ Ċ import Ġdev . k ord . common . rate limit . Bucket Rate Limiter Ċ import Ġdev . k ord . common . rate limit . Rate Limiter Ċ import Ġdev . k ord . gateway . retry . Linear Retry Ċ import Ġdev . k ord . gateway . retry . Retry Ċ import Ġio . ktor . client .* Ċ import Ġio . ktor . client . engine . c io .* Ċ import Ġio . ktor . client . features . json .* Ċ import Ġio . ktor . client . features . websocket .* Ċ import Ġio . ktor . client . request .* Ċ import Ġio . ktor . http .* Ċ import Ġio . ktor . util .* Ċ import Ġkotlinx . coroutines . Coroutine Dispatcher Ċ import Ġkotlinx . coroutines . Dispatch ers Ċ import Ġkotlinx . coroutines . Obsolete Cor outines Api Ċ import Ġkotlinx . coroutines . flow . Mutable Shared Flow Ċ import Ġkotlin . time . seconds Ċ Ċ class ĠDefault Gateway Builder Ġ{ ĊĠĠĠ Ġvar Ġurl Ġ= Ġ" wss :// gateway . discord . gg /? v = 8 & encoding = json & compress = zlib - stream " ĊĠĠĠ Ġvar Ġclient : ĠHttpClient ? Ġ= Ġnull ĊĠĠĠ Ġvar Ġreconnect Retry : ĠRetry ? Ġ= Ġnull ĊĠĠĠ Ġvar Ġsend Rate Limiter : ĠRate Limiter ? Ġ= Ġnull ĊĠĠĠ Ġvar Ġidentify Rate Limiter : ĠRate Limiter ? Ġ= Ġnull ĊĠĠĠ Ġvar Ġdispatcher : ĠCor outine Dispatcher Ġ= ĠDispatch ers . Default ĊĠĠĠ Ġvar Ġevent Flow : ĠMutable Shared Flow < Event > Ġ= ĠMutable Shared Flow ( extra Buffer Capacity Ġ= ĠInt . MAX _ VALUE ) ĊĊĠĠĠ Ġ@ Opt In ( K tor Experimental API :: class , ĠOb solete Cor outines Api :: class ) ĊĠĠĠ Ġfun Ġbuild (): ĠDefault Gateway Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġclient Ġ= Ġclient Ġ?: ĠHttpClient ( C IO ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġinstall ( WebSocket s ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġinstall ( Json Feature ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġretry Ġ= Ġreconnect Retry Ġ?: ĠLinear Retry ( 2 . seconds , Ġ 2 0 . seconds , Ġ 1 0 ) ĊĠĠĠĠĠĠĠ Ġval Ġsend Rate Limiter Ġ= Ġsend Rate Limiter Ġ?: ĠBucket Rate Limiter ( 1 2 0 , Ġ 6 0 . seconds ) ĊĠĠĠĠĠĠĠ Ġval Ġidentify Rate Limiter Ġ= Ġidentify Rate Limiter Ġ?: ĠBucket Rate Limiter ( 1 , Ġ 5 . seconds ) ĊĊĠĠĠĠĠĠĠ Ġclient . request Pipeline . intercept ( HttpRequest Pipeline . Render ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠC IO Ġadds Ġthis Ġheader Ġeven Ġif Ġno Ġextensions Ġare Ġused , Ġwhich Ġcauses Ġit Ġto Ġbe Ġempty ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠThis Ġimmediately Ġk ills Ġthe Ġgateway Ġconnection ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( context . url . protocol . is Websocket ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġheader Ġ= Ġcontext . headers [ HttpHeaders . Sec WebSocket Extensions ] ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠIf Ġit 's Ġblank ĠDiscord Ġr age qu its ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( header ?. isBlank () Ġ== Ġtrue ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontext . headers . remove ( HttpHeaders . Sec WebSocket Extensions ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġproceed () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġdata Ġ= ĠDefault Gateway Data ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġurl , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġclient , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġretry , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsend Rate Limiter , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġidentify Rate Limiter , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdispatcher , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġevent Flow ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġreturn ĠDefault Gateway ( data ) ĊĠĠĠ Ġ} Ċ Ċ } Ċ