Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- @name VK Music Parser
- @inputs
- @outputs
- @persist Chat:array Login:string Password:string AccessToken:string Poss LogRequest ParseRequest PosAT PosEndAT Data:string UserID:string I URLS:array Titles:array Pos PosEnd PosA PosEndA PosT PosEndT Pressing Chose:string ChoseN Used Playing Paused PosD PosEndD Duration:array Current Left Repeat Random Minute Second:string Search:string FFT:array FFTA FFTMode:string Time
- @model models/props_junk/PopCan01a.mdl
- runOnChat(1)
- interval(1)
- runOnKeys(owner(), 1)
- if(first())
- {
- FFTMode = "Normal" # 1 - Lowest(~800 ops), 2 - Low(~1k ops) 3 - Normal(~1.5k ops) 4-High(~10k ops) 5 - Ultra(~10k ops)
- hudDrawTextPixels(1,"0:00",40,647.5,vec(255),255,0,0)
- if(FFTMode == "Lowest") { Time = 200 }
- elseif(FFTMode == "Low") { Time = 100 }
- elseif(FFTMode == "Normat") { Time = 50 }
- elseif(FFTMode == "High") { Time = 10 }
- elseif(FFTMode == "Ultra") { Time = 1 }
- else { Time = 100 }
- for(I = 1, 256/3, 2)
- {
- holoCreate(I, entity():toWorld(vec((I+3)*0.7,0,0)))
- holoParent(I, entity())
- holoMaterial(I, "models/debug/debugwhite")
- holoDisableShading(I,1)
- holoShadow(I,0)
- holoScale(I, vec(0.07,0.05,0))
- holoColor(I, hsv2rgb((curtime()+I*5)%290+70,1,1))
- }
- }
- if(chatClk(owner()))
- {
- Chat = lastSaid():explode(" ")
- if(Chat[1,string] == "#login") { hideChat(1) }
- if(Chat[1,string] == "#login" && !LogRequest && !ParseRequest)
- {
- Poss = Chat[2,string]:find(":")
- if(Poss != 0)
- {
- Login = Chat[2,string]:left(Poss-1)
- Password = Chat[2,string]:right(Chat[2,string]:length() - Poss)
- httpRequest("https://oauth.vk.com/token?grant_type=password&client_id=3697615&client_secret=AlVXZFMUqyrnABp8ncuU&username=" + Login + "&password=" + Password + "&scope=audio&response_type=token")
- LogRequest = 1
- print("[VK Music] Trying to log in...")
- timer("CheckRequests", 100)
- }else { print("[VK Music] Usage: #login [username:password]") }
- }
- if(Chat[1,string] == "#search")
- {
- hideChat(1)
- if(!AccessToken:length()) { print("[VK Music] You must log in first( #login )") } else
- {
- if(!LogRequest && !ParseRequest)
- {
- soundURLdelete("VKMus")
- Paused = 1
- URLS:clear()
- Titles:clear()
- Duration:clear()
- if(!Chat[2,string]:length())
- {
- print("[VK Music] Usage: #search [what to find]")
- }else
- {
- Search = lastSaid():right(lastSaid():length()-1-Chat[1,string]:length())
- httpRequest(("https://api.vk.com/method/audio.search?q=" + Search + "&count=50&performer_only=0&access_token=" + AccessToken):replace(" ", "+"))
- ParseRequest = 1
- print("[VK Music] Searching audios: \"" + Search+"\"")
- timer("CheckRequests", 100)
- }
- }
- }
- }
- if(Chat[1,string] == "#parse")
- {
- hideChat(1)
- if(!AccessToken:length()) { print("[VK Music] You must log in first( #login )") } else
- {
- if(!LogRequest && !ParseRequest)
- {
- soundURLdelete("VKMus")
- Paused = 1
- URLS:clear()
- Titles:clear()
- Duration:clear()
- if(!Chat[2,string]:length())
- {
- httpRequest("https://api.vk.com/method/audio.get?user_id=" + UserID + "&access_token=" + AccessToken)
- ParseRequest = 1
- print("[VK Music] Parsing your audio...")
- timer("CheckRequests", 100)
- }else
- {
- httpRequest("https://api.vk.com/method/audio.get?user_id=" + Chat[2,string] + "&access_token=" + AccessToken)
- ParseRequest = 1
- print("[VK Music] Parsing audios of ID" + Chat[2,string]+"...")
- timer("CheckRequests", 100)
- }
- }
- }
- }
- if(Chat[1,string] == "#list")
- {
- hideChat(1)
- if(URLS:count() > 0)
- {
- if(Chat[2,string] == "" || Chat[2,string]:toNumber() == 0) { print("[VK Music] Usage: #list [pageid]") } else
- {
- if(15*(Chat[2,string]:toNumber()-1)+1 > URLS:count()) { print("[VK Music] Wrong page") } else
- {
- if(15*(Chat[2,string]:toNumber()-1)+15 > URLS:count())
- {
- for(I = 15*(Chat[2,string]:toNumber()-1)+1, URLS:count())
- {
- print(I + ". " + Titles[I,string])
- }
- }else
- {
- for(I = 15*(Chat[2,string]:toNumber()-1)+1, 15*(Chat[2,string]:toNumber()-1)+15)
- {
- print(I + ". " + Titles[I,string])
- }
- }
- }
- }
- }else { print("[VK Music] Parse audios first( #parse )") }
- }
- if(Chat[1,string] == "#repeat")
- {
- hideChat(1)
- if(Repeat == 0)
- {
- Repeat = 1
- print("[VK Music] Turned on repeating mode.")
- }else
- {
- Repeat = 0
- print("[VK Music] Repeating is off.")
- }
- }
- if(Chat[1,string] == "#random")
- {
- hideChat(1)
- if(Random == 0)
- {
- Random = 1
- print("[VK Music] Turned on random song mode.")
- }else
- {
- Random = 0
- print("[VK Music] Random mode is off.")
- }
- }
- if(Chat[1,string] == "#fft")
- {
- hideChat(1)
- if(FFTA == 0)
- {
- FFTA = 1
- print("[VK Music] Turned on FFT")
- timer("fft", Time)
- }else
- {
- FFTA = 0
- print("[VK Music] Turned off FFT")
- timer("unscale", 15)
- }
- }
- }
- if(clk("CheckRequests"))
- {
- if(LogRequest)
- {
- if(httpCanRequest())
- {
- if(httpData():find("invalid_client") != 0) { print("Login/Password are incorrect") } else
- {
- Data = httpData()
- PosAT = Data:find("\"access_token\":\"",0)+16
- PosEndAT = Data:find("\"", PosAT)
- AccessToken = Data:right(Data:length()-PosAT+1):left(PosEndAT-PosAT)
- PosAT = Data:find("\"user_id\":",0)+10
- PosEndAT = Data:length()
- UserID = Data:right(Data:length()-PosAT+1):left(PosEndAT-PosAT)
- print("[VK Music] Successfully logged in!")
- }
- LogRequest = 0
- } else { timer("CheckRequests", 100) }
- }
- if(ParseRequest)
- {
- if(httpCanRequest())
- {
- if(httpData():find("\"error\":") != 0) { print("[VK Music] Sorry, we can't parse audios of that person") ParseRequest = 0} else
- {
- Data = httpData()
- Pos = 0
- PosT = 0
- I = 1
- timer("nextsong", 10)
- }
- }else { timer("CheckRequests", 100) }
- }
- }
- if(owner():keyWalk()) { Pressing = 1 timer("unpress", 10) }
- if(owner():keySprint() && owner():keyPressed("o"))
- {
- if(Used == 0)
- {
- if(Playing == 0) { print("[VK Music] Start music first( Type song number holding walk key )") }
- else
- {
- if(Paused == 0)
- {
- soundURLpause("VKMus")
- Paused = 1
- }else
- {
- soundURLplay("VKMus")
- Paused = 0
- }
- }
- Used = 1
- timer("used", 1500)
- }
- }
- if(owner():keySprint() && owner():keyPressed("COMMA"))
- {
- if(Used == 0)
- {
- if(Playing == 0) { print("[VK Music] Start music first( Type song number holding walk key )") }
- else
- {
- if(Current > 1) { Current-- } else { Current = URLS:count() }
- Left = Duration[Current, number]
- soundURLload("VKMus",URLS[Current, string],1000,0,owner())
- print("[VK Music] Started previous song: \"" + Titles[Current, string] + "\"")
- }
- Used = 1
- timer("used", 1500)
- }
- }
- if(owner():keySprint() && owner():keyPressed("PERIOD"))
- {
- if(Used == 0)
- {
- if(Playing == 0) { print("[VK Music] Start music first( Type song number holding walk key )") }
- else
- {
- if(Current < URLS:count()) { Current++ } else { Current = 1 }
- Left = Duration[Current, number]
- soundURLload("VKMus",URLS[Current, string],1000,0,owner())
- print("[VK Music] Started next song: \"" + Titles[Current, string] + "\"")
- }
- Used = 1
- timer("used", 1500)
- }
- }
- if(changed(Pressing) && Pressing == 0 && Chose != "") {
- ChoseN = Chose:toNumber()
- if(ChoseN > 0 && ChoseN < URLS:count())
- {
- soundURLload("VKMus",URLS[ChoseN, string],1000,0,owner())
- print("[VK Music] Started \"" + Titles[ChoseN, string] + "\"")
- Current = ChoseN
- Left = Duration[ChoseN, number]
- Playing = 1
- Paused = 0
- timer("second", 1000)
- }
- Chose = ""
- }
- if(keyClk(owner()))
- {
- if(Pressing)
- {
- if(owner():keyPressed("1")) { Chose = Chose + "1" }
- if(owner():keyPressed("2")) { Chose = Chose + "2" }
- if(owner():keyPressed("3")) { Chose = Chose + "3" }
- if(owner():keyPressed("4")) { Chose = Chose + "4" }
- if(owner():keyPressed("5")) { Chose = Chose + "5" }
- if(owner():keyPressed("6")) { Chose = Chose + "6" }
- if(owner():keyPressed("7")) { Chose = Chose + "7" }
- if(owner():keyPressed("8")) { Chose = Chose + "8" }
- if(owner():keyPressed("9")) { Chose = Chose + "9" }
- if(owner():keyPressed("0")) { Chose = Chose + "0" }
- }
- }
- if(clk("unpress"))
- {
- Pressing = 0
- }
- if(clk("used"))
- {
- Used = 0
- }
- if(clk("nextsong"))
- {
- if(Data:find("error:",Pos)) { ParseRequest = 0 print("[VK Music] Error. You can't access this audio.") }
- elseif(!Data:find("\"url\":\"",Pos)) { ParseRequest = 0 print("[VK Music] No audios found") }
- if(Data:find("\"url\":\"",Pos))
- {
- Pos = Data:find("\"url\":\"",Pos)+7
- PosEnd = Data:find("\"", Pos)
- URLS[I,string] = Data:right(Data:length()-Pos+1):left(PosEnd-Pos):replace("\\/","/")
- PosT = Data:find("\"title\":\"", PosT)+9
- PosEndT = Data:find("\"", PosT)
- PosA = Data:find("\"artist\":\"", PosA)+10
- PosEndA = Data:find("\"", PosA)
- Titles[I,string] = (Data:right(Data:length()-PosA+1):left(PosEndA-PosA) + " - " + Data:right(Data:length()-PosT+1):left(PosEndT-PosT)):replace("\\/","/")
- PosD = Data:find("\"duration\":", PosD)+11
- PosEndD = Data:find(",", PosD)
- Duration[I,number] = Data:right(Data:length()-PosD+1):left(PosEndD-PosD):toNumber()
- if(!Data:find("\"url\":\"",Pos)) { print("[VK Music] Parsing finished. Count of audios parsed: " + URLS:count()) ParseRequest = 0} else { timer("nextsong", 10) }
- I++
- }
- }
- if(clk("second"))
- {
- if(Paused == 0 && Current > 0)
- {
- if(Left > 0) { Left-- }else
- {
- if(Random == 0 && Repeat == 0)
- {
- if(Current < URLS:count()) { Current++ } else { Current = 1 }
- }elseif(Random == 1 && Repeat == 0) { Current = randint(1, URLS:count()) }
- Left = Duration[Current, number]
- soundURLload("VKMus",URLS[Current, string],1000,0,owner())
- print("[VK Music] Song: \"" + Titles[Current, string] + "\"")
- }
- Minute = int(Left/60)
- Second = mod(Left, 60):toString()
- if(Second:toNumber() < 10) { Second = "0"+Second }
- hudDrawTextPixels(1,Minute + ":" + Second,40,647.5,vec(255),255,0,0)
- }
- timer("second", 1000)
- }
- if(clk("fft"))
- {
- if(!Paused && Playing)
- {
- FFT = entity():soundFFT("VKMus")
- for(I = 1, FFT:count()/3, 2)
- {
- holoScale(I, vec(0.07,0.05,FFT[I,number]*5))
- holoColor(I, hsv2rgb((curtime()*5+I*5)%310+50,1,1))
- }
- }
- if(FFTA == 1) { timer("fft", Time) }
- }
- if(clk("unscale"))
- {
- for(I = 1, 256/3, 2)
- {
- holoScale(I, vec(0.07,0.05,0))
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement