diff --git a/otouto/plugins/settings.lua b/otouto/plugins/settings.lua index b0997dc..f0af030 100644 --- a/otouto/plugins/settings.lua +++ b/otouto/plugins/settings.lua @@ -1,11 +1,19 @@ +-- SWITCH YOUR EDITOR TO UTF-8 (Notepad++ sets this file to ANSI) local settings = {} settings.triggers = { "^(⚙ [Ee]instellungen)$", "^(/settings)$", - "^(💤 [Aa][Ff][Kk]%-[Kk]eyboard einschalten)", - "^(💤 [Aa][Ff][Kk]%-[Kk]eyboard ausschalten)", - "^(❌ [Ee]instellungen verstecken)" + "^(↩️ [Zz]urück)$", + "^(💤 [Aa][Ff][Kk]%-[Kk]eyboard einschalten)$", + "^(💤 [Aa][Ff][Kk]%-[Kk]eyboard ausschalten)$", + "^(❌ [Ee]instellungen verstecken)$", + "^(▶️ [Vv]ideoauflösung für [Yy]ou[Tt]ube%-[Dd][Ll] einstellen)$", + "^(▶️ 144p)$", + "^(▶️ 180p)$", + "^(▶️ 360p [Ww]eb[Mm])$", + "^(▶️ 360p [Mm][Pp]4)$", + "^(▶️ 720p)$" } --[[ @@ -23,12 +31,25 @@ function settings:keyboard(user_id) else afk_button = '{"text":"💤 AFK-Keyboard einschalten"}' end + local youtube_dl_res_button = '{"text":"▶️ Videoauflösung für YouTube-DL einstellen"}' local hide_settings_button = '{"text":"❌ Einstellungen verstecken"}' - local settings_keyboard = '[['..afk_button..','..hide_settings_button..']]' + local settings_keyboard = '[['..afk_button..','..youtube_dl_res_button..'],['..hide_settings_button..']]' return settings_keyboard end +function settings:youtube_dl_keyboard() + local worst = '{"text":"▶️ 144p"}' + local still_worse = '{"text":"▶️ 180p"}' + local better_webm = '{"text":"▶️ 360p WebM"}' + local better_mp4 = '{"text":"▶️ 360p MP4"}' + local best = '{"text":"▶️ 720p"}' + local back = '{"text":"↩️ Zurück"}' + + local youtube_dl_keyboard = '[['..best..','..better_mp4..','..better_webm..'],['..still_worse..','..worst..'],['..back..']]' + return youtube_dl_keyboard +end + function settings:action(msg, config, matches) if msg.chat.type ~= "private" then return @@ -36,10 +57,17 @@ function settings:action(msg, config, matches) local hash = 'user:'..msg.from.id - if matches[1] == '⚙ Einstellungen' or matches[1] == '/settings' then + -- General + if matches[1] == '⚙ Einstellungen' or matches[1] == '/settings' or matches[1] == '↩️ Zurück' then utilities.send_reply(self, msg, 'Was möchtest du einstellen?', false, '{"keyboard":'..settings:keyboard(msg.from.id)..', "one_time_keyboard":true, "selective":true, "resize_keyboard":true}') return - elseif matches[1] == '💤 AFK-Keyboard einschalten' then + elseif matches[1] == '❌ Einstellungen verstecken' then + utilities.send_reply(self, msg, 'Um die Einstellungen wieder einzublenden, führe /settings aus.', true, '{"hide_keyboard":true}') + return + end + + -- AFK keyboard + if matches[1] == '💤 AFK-Keyboard einschalten' then redis:hset(hash, 'afk_keyboard', 'true') utilities.send_reply(self, msg, 'Das AFK-Keyboard wurde erfolgreich *eingeschaltet*.', true, '{"keyboard":'..settings:keyboard(msg.from.id)..', "one_time_keyboard":true, "selective":true, "resize_keyboard":true}') return @@ -47,10 +75,43 @@ function settings:action(msg, config, matches) redis:hset(hash, 'afk_keyboard', 'false') utilities.send_reply(self, msg, 'Das AFK-Keyboard wurde erfolgreich *ausgeschaltet*.', true, '{"keyboard":'..settings:keyboard(msg.from.id)..', "one_time_keyboard":true, "selective":true, "resize_keyboard":true}') return - elseif matches[1] == '❌ Einstellungen verstecken' then - utilities.send_reply(self, msg, 'Um die Einstellungen wieder einzublenden, führe /settings aus.', true, '{"hide_keyboard":true}') + end + + -- YouTube-DL video resolution + -- 144p: 17 + -- 180p: 36 + -- 360p WebM: 43 + -- 360p MP4: 18 + -- 720p: 22 + if matches[1] == '▶️ Videoauflösung für YouTube-DL einstellen' then + utilities.send_reply(self, msg, 'Welche Videoauflösung bevorzugst du?\nHINWEIS: Dies gilt nur für /mp4. Wenn die gewählte Auflösung nicht zur Verfügung steht, wird die nächsthöhere bzw. bei 720p die nächstniedrigere genommen.', 'HTML', '{"keyboard":'..settings:youtube_dl_keyboard()..', "one_time_keyboard":true, "selective":true, "resize_keyboard":true}') + elseif matches[1] == '▶️ 144p' then + local resolution_order = '17/36/43/18/22' + redis:hset(hash, 'yt_dl_res_ordner', resolution_order) + utilities.send_reply(self, msg, 'Die Reihenfolge ist jetzt folgende:\n1) 144p\n2) 180p\n3) 360p WebM\n4) 360p MP4\n5) 720p', true, '{"keyboard":'..settings:keyboard(msg.from.id)..', "one_time_keyboard":true, "selective":true, "resize_keyboard":true}') + return + elseif matches[1] == '▶️ 180p' then + local resolution_order = '36/17/43/18/22' + redis:hset(hash, 'yt_dl_res_ordner', resolution_order) + utilities.send_reply(self, msg, 'Die Reihenfolge ist jetzt folgende:\n1) 180p\n2) 144p\n3) 360p WebM\n4) 360p MP4\n5) 720p', true, '{"keyboard":'..settings:keyboard(msg.from.id)..', "one_time_keyboard":true, "selective":true, "resize_keyboard":true}') + return + elseif matches[1] == '▶️ 360p WebM' then + local resolution_order = '43/18/36/17/22' + redis:hset(hash, 'yt_dl_res_ordner', resolution_order) + utilities.send_reply(self, msg, 'Die Reihenfolge ist jetzt folgende:\n1) 360p WebM\n2) 360p MP4\n3) 180p\n4) 144p\n5) 720p', true, '{"keyboard":'..settings:keyboard(msg.from.id)..', "one_time_keyboard":true, "selective":true, "resize_keyboard":true}') + return + elseif matches[1] == '▶️ 360p MP4' then + local resolution_order = '18/43/36/17/22' + redis:hset(hash, 'yt_dl_res_ordner', resolution_order) + utilities.send_reply(self, msg, 'Die Reihenfolge ist jetzt folgende:\n1) 360p MP4\n2) 360p WebM\n3) 180p\n4) 144p\n5) 720p', true, '{"keyboard":'..settings:keyboard(msg.from.id)..', "one_time_keyboard":true, "selective":true, "resize_keyboard":true}') + return + elseif matches[1] == '▶️ 720p' then + local resolution_order = '22/18/43/36/17' + redis:hset(hash, 'yt_dl_res_ordner', resolution_order) + utilities.send_reply(self, msg, 'Die Reihenfolge ist jetzt folgende:\n1) 720p\n2) 360p MP4\n3) 360p WebM\n4) 180p\n5) 144p', true, '{"keyboard":'..settings:keyboard(msg.from.id)..', "one_time_keyboard":true, "selective":true, "resize_keyboard":true}') return end + end return settings \ No newline at end of file diff --git a/otouto/plugins/youtube_dl.lua b/otouto/plugins/youtube_dl.lua index 46d5dc1..7ceaa15 100644 --- a/otouto/plugins/youtube_dl.lua +++ b/otouto/plugins/youtube_dl.lua @@ -18,8 +18,8 @@ end youtube_dl.command = 'mp3 , /mp4 ' -function youtube_dl:convert_video(id) - 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') +function youtube_dl:convert_video(id, chosen_res) + local ytdl_json = io.popen('youtube-dl -f '..chosen_res..' --max-filesize 49m -j https://www.youtube.com/watch/?v='..id):read('*all') if not ytdl_json then return end local data = json.decode(ytdl_json) return data @@ -36,11 +36,16 @@ end function youtube_dl:action(msg, config, matches) local id = matches[2] + local hash = 'user:'..msg.from.id + local chosen_res = redis:hget(hash, 'yt_dl_res_ordner') + if not chosen_res then + chosen_res = '22/18/43/36/17' + end if matches[1] == 'mp4' then local first_msg = utilities.send_reply(self, msg, 'Video wird heruntergeladen...', 'HTML') utilities.send_typing(self, msg.chat.id, 'upload_video') - local data = youtube_dl:convert_video(id) + local data = youtube_dl:convert_video(id, chosen_res) if not data then utilities.edit_message(self, msg.chat.id, first_msg.result.message_id, config.errors.results) return