package Ġnet . ay ata ka . k ord is . test Ċ Ċ import Ġkotlinx . coroutines . delay Ċ import Ġkotlinx . coroutines . run Blocking Ċ import Ġkotlinx . coroutines . with Timeout Ċ import Ġnet . ay ata ka . k ord is . Discord Client Ċ import Ġnet . ay ata ka . k ord is . Gateway Intent Ċ import Ġnet . ay ata ka . k ord is . K ord is Ċ import Ġnet . ay ata ka . k ord is . entity . bot User Ċ import Ġnet . ay ata ka . k ord is . entity . server . Server Ċ import Ġnet . ay ata ka . k ord is . entity . server . enums . Region Ċ import Ġnet . ay ata ka . k ord is . entity . server . enums . Verification Level Ċ import Ġnet . ay ata ka . k ord is . event . events . server . user . UserRole Update Event Ċ import Ġnet . ay ata ka . k ord is . exception . Missing Permissions Exception Ċ import Ġkotlin . test . Test Ċ import Ġkotlin . test . assertEquals Ċ import Ġkotlin . test . assert Fails Ċ import Ġkotlin . test . assertNotNull Ċ Ċ class ĠTest Ġ{ ĊĠĠĠ Ġlateinit Ġvar Ġclient : ĠDiscord Client ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġstart () Ġ= Ġrun Blocking Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġuser Role Update Event : ĠUser Role Update Event ? Ġ= Ġnull ĊĊĠĠĠĠĠĠĠ Ġclient Ġ= ĠK ord is . create Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtoken Ġ= ĠSystem . getenv (" token Test ") ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġregister Intent s ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠGateway Intent . GU IL DS , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠGateway Intent . GU ILD _ MEMBER S , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠGateway Intent . GU ILD _ MESSAGES , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠGateway Intent . DIRECT _ MESSAGES ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġadd Handler < UserRole Update Event > Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġuser Role Update Event Ġ= Ġit ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprintln (" Role ĠUpdate : Ġ${ it . member . tag }, Ġbefore : Ġ'${ it . before . join ToString Ġ{ Ġit . name Ġ}} ', Ġafter : Ġ'${ it . member . roles . join ToString Ġ{ Ġit . name Ġ}} '") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġserver Ġ= Ġwith Timeout ( 1 0 Ġ* Ġ 1 0 0 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhile Ġ( true ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġclient . servers . find ( 5 1 5 2 7 3 9 2 4 6 6 2 0 0 1 6 8 4 )?. let Ġ{ Ġreturn @ with Timeout Ġit Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdelay ( 1 0 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} Ġas ĠServer ĊĊĠĠĠĠĠĠĠ Ġwhile Ġ(! server . ready ) Ġ{ ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ ĠassertEquals (" Test Server ", Ġserver . name ) ĊĠĠĠĠĠĠĠ ĠassertEquals ( Region . US _ C ENTR AL , Ġserver . region ) ĊĠĠĠĠĠĠĠ ĠassertEquals ( 5 1 5 2 7 4 8 7 9 6 7 9 9 8 7 7 4 2 , Ġserver . af k Channel ?. id ) ĊĠĠĠĠĠĠĠ ĠassertEquals ( 3 0 0 , Ġserver . af k Timeout ) ĊĠĠĠĠĠĠĠ ĠassertEquals ( Verification Level . MEDIUM , Ġserver . verification Level ) ĊĠĠĠĠĠĠĠ ĠassertEquals ( 3 7 1 8 6 8 7 9 4 0 4 3 2 3 6 3 6 4 , Ġserver . owner ?. id ) ĊĊĠĠĠĠĠĠĠ ĠassertEquals ( 1 , Ġserver . emo jis . size ) ĊĠĠĠĠĠĠĠ ĠassertEquals ( 6 , Ġserver . roles . size ) ĊĠĠĠĠĠĠĠ ĠassertEquals ( 8 , Ġserver . text Channels . size ) ĊĠĠĠĠĠĠĠ ĠassertEquals ( 5 , Ġserver . voice Channels . size ) ĊĠĠĠĠĠĠĠ ĠassertEquals ( 5 , Ġserver . channel Categories . size ) ĊĊĠĠĠĠĠĠĠ Ġval Ġtext Channels Category Ġ= Ġserver . channel Categories . find ByName (" Text ĠChannels ", Ġtrue ) ĊĠĠĠĠĠĠĠ ĠassertNotNull ( text Channels Category ) ĊĠĠĠĠĠĠĠ ĠassertEquals ( 5 1 5 2 7 3 9 2 4 6 6 2 0 0 1 6 8 5 , Ġtext Channels Category . id ) ĊĠĠĠĠĠĠĠ ĠassertEquals ( 6 , Ġserver . text Channels . filter Ġ{ Ġit . category Ġ== Ġtext Channels Category Ġ}. size ) ĊĊĠĠĠĠĠĠĠ Ġval Ġuser Ġ= Ġclient . getUser ( client . bot User . id ) ĊĠĠĠĠĠĠĠ ĠassertNotNull ( user ) ĊĊĠĠĠĠĠĠĠ ĠassertEquals ( client . bot User . name , Ġuser . name ) ĊĠĠĠĠĠĠĠ ĠassertEquals ( client . bot User . dis criminator , Ġuser . dis criminator ) ĊĠĠĠĠĠĠĠ ĠassertEquals ( client . bot User . tag , Ġuser . tag ) ĊĊĠĠĠĠĠĠĠ Ġval Ġrole Ġ= Ġserver . roles . find ByName (" Administrator ") ĊĠĠĠĠĠĠĠ ĠassertNotNull ( role ) ĊĊĠĠĠĠĠĠĠ Ġassert ( assert Fails Ġ{ Ġrun Blocking Ġ{ Ġrole . delete () Ġ} Ġ} Ġis ĠMissing Permissions Exception ) ĊĊĠĠĠĠĠĠĠ Ġ// ĠTest ĠUser ĠRole ĠUpdate ĠEvent ĊĠĠĠĠĠĠĠ Ġval Ġmut ed Role Ġ= Ġserver . roles . find ByName (" Mut ed ") ĊĠĠĠĠĠĠĠ ĠassertNotNull ( muted Role ) ĊĊĠĠĠĠĠĠĠ Ġif Ġ( server . members . bot User . roles . contains ( muted Role )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġserver . members . bot User . remove Role ( muted Role ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhile Ġ( muted Role Ġin Ġserver . members . bot User . roles ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġroles Before Ġ= Ġserver . members . bot User . roles . map Ġ{ Ġit . id Ġ} ĊĠĠĠĠĠĠĠ Ġserver . members . bot User . add Role ( muted Role ) ĊĊĠĠĠĠĠĠĠ Ġwhile Ġ( user Role Update Event Ġ== Ġnull Ġ|| Ġmut ed Role Ġin Ġuser Role Update Event !!. before ) Ġ{ ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġassert ( user Role Update Event !!. before . map Ġ{ Ġit . id Ġ}. contains All ( roles Before )) ĊĠĠĠĠĠĠĠ Ġassert ( muted Role Ġin Ġserver . members . bot User . roles ) ĊĊĠĠĠĠĠĠĠ ĠassertEquals (" https :// cdn . discord app . com / embed / avatars / 0 . png ", Ġclient . getUser ( 5 0 3 8 4 4 0 8 6 5 1 2 6 1 5 4 2 5 )?. avatar ?. url ) ĊĠĠĠ Ġ} Ċ }