diff --git a/.vscode/settings.json b/.vscode/settings.json new file mode 100644 index 0000000..3a27fca --- /dev/null +++ b/.vscode/settings.json @@ -0,0 +1,6 @@ +{ + "robloxLsp.diagnostics.globals": [ + "goto", + "nd" + ] +} \ No newline at end of file diff --git a/src/modules/commands/download.lua b/src/modules/commands/download.lua new file mode 100644 index 0000000..ba92f74 --- /dev/null +++ b/src/modules/commands/download.lua @@ -0,0 +1,96 @@ +local discordia=require('discordia') +local commands=require('./../commands.lua') +discordia.extensions() +local io = io + +function split(s,d) + local t,c,i={},'',0 + for k in s:gmatch('.') do + i=i+1 + if k==d and string.sub(s,i+1)~='' then + t[#t+1]=c + c='' + goto continue + end + c=c..k + ::continue:: + end + t[#t+1]=c + return t +end + +function clearTmp() + for file in io.popen([[dir "./tmp" /b]]):lines() do os.remove('./tmp/'..file) end +end + +commands:Add('yt',{},"wip", function(t) + clearTmp() + local args = t.args + local message = t.message + if args[1] then + if args[1]:match('?v=([%w-_]+)') or args[1]:match('youtu.be/([%w-_]+)') then + local id=args[1]:match('?v=([%w-_]+)') or args[1]:match('youtu.be/([%w-_]+)') + message:reply('Attempting to download song ID='..id) + local filepath = '' + local name + local s=io.popen('ytdl.exe -x --audio-format mp3 --output "./tmp/%(title)s - %(uploader)s.%(ext)s" '..id) + if s then + repeat + a = split(io.popen([[dir "./tmp" /b]]):read('*all'),'\n') + for _,v in next,a do + if v:sub(#v-3)=='.mp3' then + print(v) + filepath=v + break + end + end + until filepath:sub(#filepath-3)=='.mp3' + if filepath then + message:reply('Found file: '..filepath) + message:reply({file='./tmp/'..filepath}) + os.remove('./tmp/'..filepath) + else + message:reply('Error downloading song (this is not supposed to happen)') + end + else + message:reply('Error downloading song') + end + else + message:reply('Invalid URL') + end + else + message:reply('No URL provided') + end +end) +commands:Add('sc',{},"wip", function(t) + clearTmp() + local args = t.args + local message = t.message + if args[1] then + if args[1]:match('https://soundcloud.com/[%w-_]+/[%w-_]+') then + local link=args[1]:match('https://soundcloud.com/[%w-_]+/[%w-_]+') + message:reply('Attempting to download song from <'..link..'>') + local filepath + local s=io.popen('ytdl.exe -o "./tmp/%(title)s - %(uploader)s.%(ext)s" '..link) + if s then + repeat + local name = io.popen([[dir "./tmp" /b]]):read('*all') + filepath = name:sub(1,name:len()-1) + until filepath:sub(#filepath-3)=='.mp3' + if filepath then + message:reply('Found file: '..filepath) + message:reply({file='./tmp/'..filepath}) + os.remove('./tmp/'..filepath) + else + message:reply('Error downloading song (this is not supposed to happen)') + end + else + message:reply('Error downloading song') + end + else + message:reply('Invalid URL') + end + else + message:reply('No URL provided') + end +end) \ No newline at end of file diff --git a/ytdl.exe b/ytdl.exe new file mode 100644 index 0000000..d9ab8ca Binary files /dev/null and b/ytdl.exe differ