/* Ċ Ġ* ĠĠĠ ĠCopyright Ġ 2 0 1 9 - 2 0 2 0 ĠFl orian ĠSp ie ÃŁ Ċ Ġ* Ċ Ġ* ĠLicensed Ġunder Ġthe ĠApache ĠLicense , ĠVersion Ġ 2 . 0 Ġ( the Ġ" License "); Ċ Ġ* Ġyou Ġmay Ġnot Ġuse Ġthis Ġfile Ġexcept Ġin Ġcompliance Ġwith Ġthe ĠLicense . Ċ Ġ* ĠYou Ġmay Ġobtain Ġa Ġcopy Ġof Ġthe ĠLicense Ġat Ċ Ġ* Ċ Ġ* ĠĠĠ Ġhttp :// www . apache . org / licenses / LICENSE - 2 . 0 Ċ Ġ* Ċ Ġ* ĠUnless Ġrequired Ġby Ġapplicable Ġlaw Ġor Ġagreed Ġto Ġin Ġwriting , Ġsoftware Ċ Ġ* Ġdistributed Ġunder Ġthe ĠLicense Ġis Ġdistributed Ġon Ġan Ġ" AS ĠIS " ĠBASIS , Ċ Ġ* ĠWITHOUT ĠWARRANTIES ĠOR ĠCONDITIONS ĠOF ĠANY ĠKIND , Ġeither Ġexpress Ġor Ġimplied . Ċ Ġ* ĠSee Ġthe ĠLicense Ġfor Ġthe Ġspecific Ġlanguage Ġgoverning Ġpermissions Ġand Ċ Ġ* Ġlimitations Ġunder Ġthe ĠLicense . Ċ Ġ*/ Ċ @ file : Jvm Name (" Basic ") Ċ package Ġclub . min n ced . bot . command Ċ Ċ import Ġclub . min n ced . bot . find User Ċ import Ġclub . min n ced . j da . reactor . as Mono Ċ import Ġclub . min n ced . j da . reactor . on Message Ċ import Ġclub . min n ced . j da . reactor . to Mono Ċ import Ġkotlinx . coroutines . reactive . await First OrNull Ċ import Ġkotlinx . coroutines . reactor . mono Ċ import Ġnet . dv 8 tion . j da . api . Embed Builder Ċ import Ġnet . dv 8 tion . j da . api . entities . Message Channel Ċ import Ġnet . dv 8 tion . j da . api . events . message . Message Received Event Ċ import Ġreactor . core . publisher . Mono Ċ import Ġjava . awt . Color Ċ import Ġjava . util . concurrent . Thread Local Random Ċ import Ġreactor . kotlin . core . publisher .* Ċ Ċ // ĠDisplay Ġping Ċ fun Ġon Ping ( channel : ĠMessage Channel ): ĠMono < *> Ġ{ ĊĠĠĠ Ġ// ĠSend Ġmessage Ġfor Ġthe Ġmessage Ġping Ġ( in Ġthe Ġmeantime Ġget Ġthe Ġrest Ġping ) ĊĠĠ Ġreturn ĠMono . zip ( channel . sendMessage (" Calcul ating ... "). as Mono (). elapsed (), Ġchannel . j da . rest Ping . as Mono ()) ĊĠĠĠĠĠĠĠ Ġ. flatMap Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġthe Ġelapsed () Ġgave Ġus Ġthe Ġtime Ġbetween Ġsubscribe () Ġand Ġnext () Ġsignals ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmessage Ping Ġ= Ġit . t 1 . t 1 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġwe Ġneed Ġthe Ġmessage Ġagain Ġto Ġedit Ġit Ġwith Ġthe Ġtimes ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmessage Ġ= Ġit . t 1 . t 2 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġwe Ġretrieved Ġthe Ġrest Ġping Ġin Ġthe Ġmeantime Ġ( getting Ġthe Ġuser Ġfrom Ġthe Ġapi ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġrest Ping Ġ= Ġit . t 2 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġthe Ġgateway Ġping Ġis Ġprovided Ġby Ġj da ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġgateway Ping Ġ= Ġchannel . j da . gateway Ping ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmessage . edit Message ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ"** Message ĠPing **: Ġ${ message Ping } ms \ n " Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ"** Gateway ĠPing **: Ġ${ gateway Ping } ms \ n " Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ"** Rest ĠPing **: Ġ${ rest Ping } ms ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. as Mono () ĊĠĠĠĠĠĠĠ Ġ} Ċ } Ċ Ċ // ĠCalculate Ġa Ġround trip Ġtime Ċ fun Ġon RT T ( channel : ĠMessage Channel ): ĠMono < *> Ġ{ ĊĠĠĠ Ġval Ġtime Ġ= ĠSystem . currentTimeMillis () ĊĠĠĠ Ġval Ġnonce Ġ= ĠThread Local Random . current (). next Long (). toString () ĊĊĠĠĠ Ġ// ĠRegister Ġlistener Ġfor Ġnonce ĊĠĠĠ Ġval Ġlistener Ġ= Ġchannel . on Message () ĊĠĠĠĠĠĠĠ Ġ. map Ġ{ Ġit . message Ġ} ĊĠĠĠĠĠĠĠ Ġ. filter Ġ{ Ġit . nonce Ġ== Ġnonce Ġ} ĊĠĠĠĠĠĠĠ Ġ. next () Ġ// ĠConvert ĠFlux < Message > Ġto ĠMono < Message > Ġrepresenting Ġfirst Ġelement ĊĠĠĠĠĠĠĠ Ġ. flatMap Ġ{ Ġit . edit Message (" RT T : Ġ${ System . currentTimeMillis () Ġ- Ġtime } Ġms "). as Mono () Ġ} ĊĊĠĠĠ Ġ// ĠSend Ġmessage Ġto Ġlisten Ġto ĊĠĠĠ Ġval Ġmessage Ġ= Ġchannel . sendMessage (" Calcul ating ... "). nonce ( nonce ). as Mono () ĊĊĠĠĠ Ġ// ĠCombine Ġboth ĊĠĠĠ Ġreturn Ġlistener . and ( message ) Ċ } Ċ Ċ // ĠFetch Ġand Ġdisplay Ġthe Ġavatar Ġof Ġa Ġuser Ċ fun Ġon Avatar ( arg : ĠString ?, Ġevent : ĠMessage Received Event ): ĠMono < *> Ġ{ ĊĠĠĠ Ġval Ġembed Ġ= Ġmono Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġbuilder Ġ= ĠEmbed Builder () ĊĠĠĠĠĠĠĠ Ġ// ĠFind Ġthe Ġuser ĊĠĠĠĠĠĠĠ Ġvar Ġuser Ġ= Ġevent . message . mention ed Users . first OrNull (). to Mono () ĊĠĠĠĠĠĠĠ Ġuser Ġ= Ġwhen Ġ( arg ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnull Ġ-> Ġevent . author . to Mono () ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġno Ġuser - input Ġ=> Ġuse Ġcaller ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġuser . switch If Empty Ġ{ Ġfind User ( event . j da , Ġarg ) Ġ} Ġ// Ġuser Ġwasn 't Ġmentioned , Ġcheck Ġif Ġwe Ġcan Ġfind Ġthem Ġthough ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġtarget Ġ= Ġuser . await First OrNull () ĊĠĠĠĠĠĠĠ Ġif Ġ( target Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbuilder . set Author ( target . name ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbuilder . setImage ( target . effective Avatar Url ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbuilder . build () ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbuilder . setColor ( Color . RED ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbuilder . setDescription (" Unable Ġto Ġfind Ġuser Ġ$ arg ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbuilder . build () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// ĠCons ume Ġthe Ġconstructed Ġembed ĊĠĠĠ Ġreturn Ġembed . flatMap Ġ{ Ġevent . channel . sendMessage ( it ). as Mono () Ġ} Ċ } Ċ