@ file : Suppress (" K Doc Missing Documentation ") Ċ Ċ import Ġdev . sch la ubi . lav ak ord . L ava K ord Ċ import Ġdev . sch la ubi . lav ak ord . audio . Link Ċ import Ġdev . sch la ubi . lav ak ord . audio . player .* Ċ import Ġdev . sch la ubi . lav ak ord . rest . Track Response Ċ import Ġdev . sch la ubi . lav ak ord . rest . load Item Ċ import Ġkotlinx . coroutines . Global Scope Ċ import Ġkotlinx . coroutines . await Ċ import Ġkotlinx . coroutines . delay Ċ import Ġkotlinx . coroutines . launch Ċ import Ġmu . Kotlin Logging Configuration Ċ import Ġmu . Kotlin Logging Level Ċ import Ġkotlin . time . Experimental Time Ċ import Ġkotlin . time . Duration Ċ import Ġkotlin . time . Duration Unit Ċ Ċ // ĠThere Ġis Ġno ĠKotlin / JS ĠDiscord Ġwrapper Ġyet Ġ( See Ġhttps :// github . com / k ord lib / k ord / issues / 6 9 ) Ċ // Ġso Ġthis Ġis Ġjust Ġto Ġtest Ġwebsocket Ġconnectivity Ġand Ġrest . Ċ @ Opt In ( Experimental Time :: class ) Ċ suspend Ġfun Ġmain () Ġ{ ĊĊĠĠĠ ĠKotlin Logging Configuration . LOG _ LEVEL Ġ= ĠKotlin Logging Level . TRACE ĊĊĠĠĠ Ġval Ġclient Ġ= ĠDiscord . Client () ĊĊĠĠĠ Ġval Ġtoken Ġ= Ġprocess . env [" TOKEN "] Ġ?: Ġerror (""" Please Ġdefine Ġan Ġ" TOKEN " Ġenv Ġvariable """) ĊĊĠĠĠ Ġclient . on (" ready ") Ġ{ ĊĠĠĠĠĠĠĠ Ġprintln (" Logged Ġin Ġas Ġ${ client . user . tag }") ĊĠĠĠĠĠĠĠ ĠGlobal Scope . launch Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġstart L av ak ord ( client ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġclient . login ( token ). await () ĊĊĠĠĠ Ġ// ĠNorm ally Ġyour ĠDiscord ĠAPI Ġwrapper Ġwould Ġrun Ġsome Ġsort Ġof Ġblocking Ġoperation Ġon Ġthe Ġmain Ġthread Ġbut ĊĠĠĠ Ġ// Ġas Ġk ord Ġdoes Ġnot Ġsupport Ġjs Ġrn Ġand Ġthe Ġl aval ink Ġnodes Ġrun Ġon Ġseparate Ġthreads Ġwe Ġwill Ġjust Ġdelay Ġthis Ġone Ġfor Ġever ĊĠĠĠ Ġwhile Ġ( true ) Ġ{ ĊĠĠĠĠĠĠĠ Ġdelay ( Duration . minutes ( 1 )) ĊĠĠĠ Ġ} Ċ } Ċ Ċ @ Opt In ( Experimental Time :: class , ĠFilters Api :: class ) Ċ private Ġsuspend Ġfun Ġcommand Handler ( message : ĠDiscord . Message , Ġl av ak ord : Ġdev . sch la ubi . lav ak ord . L ava K ord , Ġclient : ĠDiscord . Client ) Ġ{ ĊĠĠĠ Ġval Ġinput Ġ= Ġmessage . content ĊĠĠĠ Ġval Ġ( command , Ġargs ) Ġ= Ġwith ( input . split ("\\ s +". to Regex ())) Ġ{ Ġfirst () Ġto Ġdrop ( 1 ) Ġ} ĊĠĠĠ Ġval Ġguild Ġ= Ġmessage . guild ĊĠĠĠ Ġval Ġchannel Ġ= Ġmessage . channel ĊĠĠĠ Ġval Ġlink Ġ= Ġl av ak ord . get Link ( guild . id ) ĊĠĠĠ Ġval Ġplayer Ġ= Ġlink . player ĊĠĠĠ Ġwhen Ġ( command ) Ġ{ ĊĠĠĠĠĠĠĠ Ġ"! r age quit " Ġ-> Ġclient . destroy () ĊĠĠĠĠĠĠĠ Ġ"! restart " Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġclient . destroy () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġclient . login ( process . env [" TOKEN "] Ġ?: Ġreturn ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ"! connect " Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġauthor Ġ= Ġmessage . author ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġvoice State Ġ= Ġguild . voice States . resolve ( author . id ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( voice State Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġchannel . send (" Please Ġconnect Ġto ĠVC !") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġchannel Id Ġ= Ġvoice State . channel ID ?. to Long () Ġ?: Ġreturn ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġlink . connect Audio ( channelId ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ"! pause " Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġplayer . pause (! player . paused ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ"! stop " Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġplayer . stop Track () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ"! leave " Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlink . destroy () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ"! volume " Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġvolume Ġ= Ġargs [ 0 ]. toInt () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġplayer . set Volume ( volume ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ"! seek " Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġlong Ġ= Ġargs [ 0 ]. to Long () Ġ* Ġ 1 0 0 0 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtrack Ġ= Ġplayer . playing Track ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( track Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmessage . channel . send (" Not Ġplaying Ġanything ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġnew Position Ġ= Ġplayer . position Ġ+ Ġlong ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( new Position Ġ< Ġ 0 Ġ|| Ġnew Position Ġ> Ġtrack . length . to Long ( Duration Unit . MILLISECONDS )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmessage . channel . send (" Position Ġis Ġout Ġof Ġbounds ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġplayer . seek To ( new Position ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ"! eq " Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġband Ġ= Ġargs [ 0 ]. toInt () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġgain Ġ= Ġargs [ 1 ]. toFloat () ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġplayer . apply Equal izer Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġband ( band ) Ġgain Ġgain ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġyou Ġcan Ġalso Ġdo ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// 2 Ġgain Ġ 1 F ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ"! speed " Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġfloat Ġ= Ġargs [ 0 ]. toFloat () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġplayer . apply Filters Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtime scale Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġspeed Ġ= Ġfloat ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ"! kar ao ke " Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġplayer . apply Filters Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġkar ao ke Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlevel Ġ= Ġ 5 F ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ"! play " Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġquery Ġ= Ġargs . drop ( 1 ). join ToString (" Ġ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsearch Ġ= Ġif Ġ( query . startsWith (" http ")) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġquery ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" yt search :$ query " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( link . state Ġ!= ĠLink . State . CONNECTED ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmessage . channel . send (" Not Ġconnect Audio Ġto ĠVC !") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġitem Ġ= Ġlink . load Item ( search ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( item . load Type ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠTrack Response . Load Type . TRACK _ LOADED Ġ-> Ġplayer . play Track ( item . tracks . first ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠTrack Response . Load Type . PLAY LIST _ LOADED Ġ-> Ġplayer . play Track ( item . tracks . first ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠTrack Response . Load Type . SEARCH _ RESULT Ġ-> Ġplayer . play Track ( item . tracks . first ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠTrack Response . Load Type . NO _ MATCH ES Ġ-> Ġmessage . channel . send (" No Ġmatches ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠTrack Response . Load Type . LOAD _ FAILED Ġ-> Ġmessage . channel . send ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġitem . exception ?. message Ġ?: Ġ" Error " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ Ċ @ Opt In ( Experimental Time :: class ) Ċ suspend Ġfun Ġstart L av ak ord ( client : ĠDiscord . Client ) Ġ{ ĊĠĠĠ Ġval Ġl av ak ord : Ġdev . sch la ubi . lav ak ord . L ava K ord Ġ= ĊĠĠĠĠĠĠĠ Ġclient . lav ak ord Ġ{ Ġ} Ġ// ĠIn Ġan Ġideal Ġworld Ġwe Ġwould Ġbe Ġable Ġto Ġuse ĠK ord Ġhere , Ġbut Ġwe Ġcan 't Ġsee Ġdiscord - js (- lav ak ord ). kt ĊĠĠĠ Ġl av ak ord . add Node (" wss :// lav ak ord . eu . ng rok . io ", Ġ" yo ush all not pass ") ĊĊĠĠĠ Ġclient . on (" message ") Ġ{ ĊĠĠĠĠĠĠĠ ĠGlobal Scope . launch Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcommand Handler ( it Ġas ĠDiscord . Message , Ġl av ak ord , Ġclient ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ