/* čĊ Ġ* ĠCopyright Ġ 2 0 2 1 ĠMichael ĠJohn ston čĊ Ġ* čĊ Ġ* Ġ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 . čĊ Ġ*/ čĊč Ċ package Ġcom . github . mr bean 3 5 5 . ro ons . component čĊč Ċ import Ġorg . springframework . beans . factory . annotation . Autowired č Ċ import Ġorg . springframework . boot . web . client . Rest Template Builder č Ċ import Ġorg . springframework . http . HttpStatus č Ċ import Ġorg . springframework . http . converter . String Http Message Converter č Ċ import Ġorg . springframework . stereotype . Component č Ċ import Ġorg . springframework . web . client . Rest Template č Ċ import Ġorg . springframework . web . client . get For Entity č Ċ import Ġjava . io . File č Ċ import Ġjava . io . File OutputStream čĊč Ċ private Ġconst Ġval ĠP LAY _ SO UN DS _ URL Ġ= Ġ" http :// chat bot . ad mir al bull dog . live / play sounds " čĊč Ċ @ Component č Ċ class ĠPlay Sounds ( čĊĠĠĠ Ġprivate Ġval Ġsound B ite Converter : ĠSound B ite Converter , čĊĠĠĠ Ġprivate Ġval Ġlist Rest Template : ĠRest Template , čĊĠĠĠ Ġprivate Ġval Ġdownload Rest Template : ĠRest Template , č Ċ ) Ġ{ čĊčĊĠĠĠ Ġ@ Autowired čĊĠĠĠ Ġconstructor ( sound B ite Converter : ĠSound B ite Converter ) Ġ: Ġthis ( čĊĠĠĠĠĠĠĠ Ġsound B ite Converter , čĊĠĠĠĠĠĠĠ ĠRest Template Builder () čĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. message Converters ( String Http Message Converter ()) čĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. build (), čĊĠĠĠĠĠĠĠ ĠRest Template () čĊĠĠĠ Ġ) čĊčĊĠĠĠ Ġ/** ĠSc rape Ġthe ĠPlay Sounds Ġweb Ġpage Ġand Ġcollect Ġa Ġlist Ġof Ġsound Ġfile Ġnames Ġand ĠURLs . Ġ*/ čĊĠĠĠ Ġfun Ġlist Remote Files (): ĠList < Remote Sound File > Ġ{ čĊĠĠĠĠĠĠĠ Ġval Ġresponse Ġ= Ġlist Rest Template . get For Entity < String >( PLAY _ SO UN DS _ URL ) čĊĠĠĠĠĠĠĠ Ġval Ġresponse Body Ġ= Ġresponse . body čĊĠĠĠĠĠĠĠ Ġif Ġ( response . statusCode Ġ!= ĠHttpStatus . OK Ġ|| Ġresponse Body Ġ== Ġnull ) Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠRuntimeException (" Error Ġdownloading ĠPlay Sounds Ġpage . ĠResponse Ġcode : Ġ${ response . statusCode Value }") čĊĠĠĠĠĠĠĠ Ġ} čĊčĊĠĠĠĠĠĠĠ Ġval Ġblocks Ġ= Ġresponse Body . split ("< div Ġclass =\" play - in - browser - wrapper \" ") čĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. drop ( 1 ) čĊčĊĠĠĠĠĠĠĠ Ġreturn Ġblocks . map Ġ{ Ġblock Ġ-> čĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcontent Ġ= Ġblock . trim (). substring Before ("</ div >") čĊĠĠĠĠĠĠĠĠĠĠĠ ĠRemote Sound File ( čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġname Ġ= Ġcontent . split (" data - name =\" ")[ 1 ]. substring Before (' \" '), čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġurl Ġ= Ġcontent . split (" data - link =\" ")[ 1 ]. substring Before (' \" '), čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvolume Ġ= Ġcontent . split (" data - volume =\" ")[ 1 ]. substring Before (' \" '). toInt (), čĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) čĊĠĠĠĠĠĠĠ Ġ} čĊĠĠĠ Ġ} čĊčĊĠĠĠ Ġ/** ĠDownload Ġthe Ġgiven Ġsound Ġto Ġthe Ġgiven Ġdestination . Ġ*/ čĊĠĠĠ Ġfun Ġdownload File ( file : ĠRemote Sound File , Ġdestination : ĠString ) Ġ{ čĊĠĠĠĠĠĠĠ Ġval Ġresponse Ġ= Ġdownload Rest Template . get For Entity < ByteArray >( file . url ) čĊĠĠĠĠĠĠĠ Ġval Ġresponse Body Ġ= Ġresponse . body čĊĠĠĠĠĠĠĠ Ġif Ġ( response . statusCode Ġ!= ĠHttpStatus . OK Ġ|| Ġresponse Body Ġ== Ġnull ) Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠRuntimeException (" Error Ġdownloading Ġfile : Ġ${ file . name }. ĠResponse Ġcode : Ġ${ response . statusCode Value }") čĊĠĠĠĠĠĠĠ Ġ} čĊčĊĠĠĠĠĠĠĠ Ġval ĠfilePath Ġ= Ġ"$ destination /${ file . name }" čĊčĊĠĠĠĠĠĠĠ Ġresponse Body . inputStream (). use Ġ{ Ġinput Ġ-> čĊĠĠĠĠĠĠĠĠĠĠĠ ĠFileOutputStream ( filePath ). use Ġ{ Ġoutput Ġ-> čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinput . copy To ( output ) čĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} čĊĠĠĠĠĠĠĠ Ġ} čĊčĊĠĠĠĠĠĠĠ Ġsound B ite Converter . convert ( File ( filePath ), Ġfile . volume ) čĊĠĠĠ Ġ} čĊčĊĠĠĠ Ġdata Ġclass ĠRemote Sound File ( čĊĠĠĠĠĠĠĠ Ġval Ġname : ĠString , čĊĠĠĠĠĠĠĠ Ġval Ġurl : ĠString , čĊĠĠĠĠĠĠĠ Ġval Ġvolume : ĠInt čĊĠĠĠ Ġ) č Ċ } čĊčĊ