- YouTube-DL: Downloadprozess für MP4 umgeschrieben + nur noch YouTube wird unterstützt
- YouTube: Bugfix, wenn Video-ID invalide
This commit is contained in:
parent
83f3faf4a3
commit
6b469fdb37
@ -209,6 +209,10 @@ end
|
|||||||
function youtube:action(msg, config, matches)
|
function youtube:action(msg, config, matches)
|
||||||
local yt_code = matches[1]
|
local yt_code = matches[1]
|
||||||
local data = get_yt_data(yt_code)
|
local data = get_yt_data(yt_code)
|
||||||
|
if not data then
|
||||||
|
utilities.send_reply(self, msg, config.errors.results)
|
||||||
|
return
|
||||||
|
end
|
||||||
send_youtube_data(data, msg, self)
|
send_youtube_data(data, msg, self)
|
||||||
return
|
return
|
||||||
end
|
end
|
||||||
|
@ -2,34 +2,31 @@ local youtube_dl = {}
|
|||||||
|
|
||||||
function youtube_dl:init(config)
|
function youtube_dl:init(config)
|
||||||
youtube_dl.triggers = {
|
youtube_dl.triggers = {
|
||||||
"^/(mp4) (https?://[%w-_%.%?%.:/%+=&]+)$",
|
"^/(mp4) https?://w?w?w?%.?youtu.be/([A-Za-z0-9-_-]+)",
|
||||||
"^/(mp3) (https?://[%w-_%.%?%.:/%+=&]+)$"
|
"^/(mp4) https?://w?w?w?%.?youtube.com/embed/([A-Za-z0-9-_-]+)",
|
||||||
|
"^/(mp4) https?://w?w?w?%.?youtube.com/watch%?v=([A-Za-z0-9-_-]+)",
|
||||||
|
"^/(mp3) https?://w?w?w?%.?youtu.be/([A-Za-z0-9-_-]+)",
|
||||||
|
"^/(mp3) https?://w?w?w?%.?youtube.com/embed/([A-Za-z0-9-_-]+)",
|
||||||
|
"^/(mp3) https?://w?w?w?%.?youtube.com/watch%?v=([A-Za-z0-9-_-]+)"
|
||||||
}
|
}
|
||||||
|
|
||||||
youtube_dl.doc = [[*
|
youtube_dl.doc = [[*
|
||||||
]]..config.cmd_pat..[[mp3* _<URL>_: Lädt Audio von [untersützten Seiten](https://rg3.github.io/youtube-dl/supportedsites.html)
|
]]..config.cmd_pat..[[mp3* _<URL>_: Lädt Audio von YouTube
|
||||||
*]]..config.cmd_pat..[[mp4* _<URL>_: Lädt Video von [untersützten Seiten](https://rg3.github.io/youtube-dl/supportedsites.html)
|
*]]..config.cmd_pat..[[mp4* _<URL>_: Lädt Video von YouTube
|
||||||
]]
|
]]
|
||||||
end
|
end
|
||||||
|
|
||||||
youtube_dl.command = 'mp3 <URL>, /mp4 <URL>'
|
youtube_dl.command = 'mp3 <URL>, /mp4 <URL>'
|
||||||
|
|
||||||
function youtube_dl:convert_video(link)
|
function youtube_dl:convert_video(id)
|
||||||
local output = io.popen('youtube-dl -f mp4 --max-filesize 49m -o "/tmp/%(title)s.%(ext)s" '..link):read('*all')
|
local ytdl_json = io.popen('youtube-dl -f 22/43/18/36/17 --max-filesize 49m -j https://www.youtube.com/watch/?v='..id):read('*all')
|
||||||
print(output)
|
if not ytdl_json then return end
|
||||||
if string.match(output, '.* File is larger .*') then
|
local data = json.decode(ytdl_json)
|
||||||
return 'TOOBIG'
|
return data
|
||||||
end
|
|
||||||
local video = string.match(output, '%[download%] Destination: /tmp/(.*).mp4')
|
|
||||||
if not video then
|
|
||||||
video = string.match(output, '%[download%] /tmp/(.*).mp4 has already been downloaded')
|
|
||||||
end
|
|
||||||
return '/tmp/'..video..'.mp4'
|
|
||||||
end
|
end
|
||||||
|
|
||||||
function youtube_dl:convert_audio(link)
|
function youtube_dl:convert_audio(id)
|
||||||
local output = io.popen('youtube-dl --max-filesize 49m -o "/tmp/%(title)s.%(ext)s" --extract-audio --audio-format mp3 '..link):read('*all')
|
local output = io.popen('youtube-dl --max-filesize 49m -o "/tmp/%(title)s.%(ext)s" --extract-audio --audio-format mp3 https://www.youtube.com/watch/?v='..id):read('*all')
|
||||||
print(output)
|
|
||||||
if string.match(output, '.* File is larger .*') then
|
if string.match(output, '.* File is larger .*') then
|
||||||
return 'TOOBIG'
|
return 'TOOBIG'
|
||||||
end
|
end
|
||||||
@ -37,25 +34,48 @@ function youtube_dl:convert_audio(link)
|
|||||||
return '/tmp/'..audio..'.mp3'
|
return '/tmp/'..audio..'.mp3'
|
||||||
end
|
end
|
||||||
|
|
||||||
function youtube_dl:action(msg, config)
|
function youtube_dl:action(msg, config, matches)
|
||||||
local link = matches[2]
|
local id = matches[2]
|
||||||
|
|
||||||
if matches[1] == 'mp4' then
|
if matches[1] == 'mp4' then
|
||||||
|
local first_msg = utilities.send_reply(self, msg, '<b>Video wird heruntergeladen...</b>', 'HTML')
|
||||||
utilities.send_typing(self, msg.chat.id, 'upload_video')
|
utilities.send_typing(self, msg.chat.id, 'upload_video')
|
||||||
local file = youtube_dl:convert_video(link)
|
local data = youtube_dl:convert_video(id)
|
||||||
if file == 'TOOBIG' then
|
if not data then
|
||||||
utilities.send_reply(self, msg, 'Das Video überschreitet die Grenze von 50 MB!')
|
utilities.edit_message(self, msg.chat.id, first_msg.result.message_id, config.errors.results)
|
||||||
return
|
return
|
||||||
end
|
end
|
||||||
utilities.send_video(self, msg.chat.id, file, nil, msg.message_id)
|
|
||||||
|
local ext = data.ext
|
||||||
|
local resolution = data.resolution
|
||||||
|
local url = data.url
|
||||||
|
local headers = get_http_header(url) -- need to get full url, because first url is actually a 302
|
||||||
|
local full_url = headers.location
|
||||||
|
if not full_url then
|
||||||
|
utilities.edit_message(self, msg.chat.id, first_msg.result.message_id, config.errors.connection)
|
||||||
|
return
|
||||||
|
end
|
||||||
|
|
||||||
|
local headers = get_http_header(full_url) -- YES TWO FCKING HEAD REQUESTS
|
||||||
|
if tonumber(headers["content-length"]) > 52420000 then
|
||||||
|
utilities.edit_message(self, msg.chat.id, first_msg.result.message_id, '<b>Das Video überschreitet die Grenze von 50 MB!</b>\n<a href="'..full_url..'">Direktlink zum Video</a> ('..resolution..')', nil, 'HTML')
|
||||||
|
return
|
||||||
|
end
|
||||||
|
local file = download_to_file(full_url, id..'.'..ext)
|
||||||
|
local width = data.width
|
||||||
|
local height = data.width
|
||||||
|
local duration = data.duration
|
||||||
|
utilities.edit_message(self, msg.chat.id, first_msg.result.message_id, '<a href="'..full_url..'">Direktlink zum Video</a> ('..resolution..')', nil, 'HTML')
|
||||||
|
utilities.send_video(self, msg.chat.id, file, nil, msg.message_id, duration, width, height)
|
||||||
return
|
return
|
||||||
end
|
end
|
||||||
|
|
||||||
if matches[1] == 'mp3' then
|
if matches[1] == 'mp3' then
|
||||||
|
local first_msg = utilities.send_reply(self, msg, '<b>Audio wird heruntergeladen...</b>', 'HTML')
|
||||||
utilities.send_typing(self, msg.chat.id, 'upload_audio')
|
utilities.send_typing(self, msg.chat.id, 'upload_audio')
|
||||||
local file = youtube_dl:convert_audio(link)
|
local file = youtube_dl:convert_audio(id)
|
||||||
if file == 'TOOBIG' then
|
if file == 'TOOBIG' then
|
||||||
utilities.send_reply(self, msg, 'Die MP3 überschreitet die Grenze von 50 MB!')
|
utilities.edit_message(self, msg.chat.id, first_msg.result.message_id, '<b>Die MP3 überschreitet die Grenze von 50 MB!</b>', nil, 'HTML')
|
||||||
return
|
return
|
||||||
end
|
end
|
||||||
utilities.send_audio(self, msg.chat.id, file, msg.message_id)
|
utilities.send_audio(self, msg.chat.id, file, msg.message_id)
|
||||||
|
Reference in New Issue
Block a user