music.py 1.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152
  1. from __future__ import unicode_literals
  2. from urllib.parse import urlparse
  3. import youtube_dl
  4. from wbb.utils import cust_filter
  5. from wbb import app
  6. import os
  7. __MODULE__ = "Music"
  8. __HELP__ = "/music [link] To Download Music From Various Websites"
  9. ydl_opts = {
  10. 'format': 'bestaudio',
  11. 'writethumbnail': True
  12. }
  13. @app.on_message(cust_filter.command(commands=("music")))
  14. async def music(client, message):
  15. await message.reply_chat_action("typing")
  16. app.set_parse_mode("html")
  17. link = (message.text.split(None, 1)[1])
  18. with youtube_dl.YoutubeDL(ydl_opts) as ydl:
  19. info_dict = ydl.extract_info(link, download=False)
  20. audio_file = ydl.prepare_filename(info_dict)
  21. ydl.process_info(info_dict)
  22. # .webm -> .weba
  23. basename = audio_file.rsplit(".", 1)[-2]
  24. thumbnail_url = info_dict['thumbnail']
  25. thumbnail_file = basename + "." + \
  26. get_file_extension_from_url(thumbnail_url)
  27. if info_dict['ext'] == 'webm':
  28. audio_file_weba = basename + ".weba"
  29. os.rename(audio_file, audio_file_weba)
  30. audio_file = audio_file_weba
  31. # info
  32. title = info_dict['title']
  33. webpage_url = info_dict['webpage_url']
  34. performer = info_dict['uploader']
  35. duration = int(float(info_dict['duration']))
  36. caption = f"<b><a href=\"{webpage_url}\">{title}</a></b>"
  37. await message.reply_chat_action("upload_document")
  38. await message.reply_audio(audio_file, caption=caption,
  39. duration=duration, performer=performer,
  40. title=title, thumb=thumbnail_file)
  41. os.remove(audio_file)
  42. os.remove(thumbnail_file)
  43. def get_file_extension_from_url(url):
  44. url_path = urlparse(url).path
  45. basename = os.path.basename(url_path)
  46. return basename.split(".")[-1]