mirror of
https://github.com/Cog-Creators/Red-DiscordBot.git
synced 2025-11-06 11:18:54 -05:00
[Audio] Playlist download addition (#2482)
Bot owners can use `[p]playlist download playlistname` to download a playlist file that is compatible with the playlist upload command. Songs can also be exported for v2 use by using `[p]playlist download playlistname True`, which strips out tracks besides YouTube or Soundcloud URLs.
This commit is contained in:
parent
6051ccb23c
commit
2755592175
@ -4,6 +4,8 @@ import datetime
|
|||||||
import discord
|
import discord
|
||||||
from fuzzywuzzy import process
|
from fuzzywuzzy import process
|
||||||
import heapq
|
import heapq
|
||||||
|
from io import StringIO
|
||||||
|
import json
|
||||||
import lavalink
|
import lavalink
|
||||||
import logging
|
import logging
|
||||||
import math
|
import math
|
||||||
@ -1248,6 +1250,44 @@ class Audio(commands.Cog):
|
|||||||
return await self._embed_msg(ctx, _("No playlist with that name."))
|
return await self._embed_msg(ctx, _("No playlist with that name."))
|
||||||
await self._embed_msg(ctx, _("{name} playlist deleted.").format(name=playlist_name))
|
await self._embed_msg(ctx, _("{name} playlist deleted.").format(name=playlist_name))
|
||||||
|
|
||||||
|
@checks.is_owner()
|
||||||
|
@playlist.command(name="download")
|
||||||
|
async def _playlist_download(self, ctx, playlist_name, v2=False):
|
||||||
|
"""Download a copy of a playlist.
|
||||||
|
|
||||||
|
These files can be used with the [p]playlist upload command.
|
||||||
|
Red v2-compatible playlists can be generated by passing True
|
||||||
|
for the v2 variable."""
|
||||||
|
if not await self._playlist_check(ctx):
|
||||||
|
return
|
||||||
|
playlists = await self.config.guild(ctx.guild).playlists.get_raw()
|
||||||
|
v2_valid_urls = ["https://www.youtube.com/watch?v=", "https://soundcloud.com/"]
|
||||||
|
song_list = []
|
||||||
|
playlist_url = None
|
||||||
|
|
||||||
|
try:
|
||||||
|
if playlists[playlist_name]["playlist_url"]:
|
||||||
|
playlist_url = playlists[playlist_name]["playlist_url"]
|
||||||
|
for track in playlists[playlist_name]["tracks"]:
|
||||||
|
if v2:
|
||||||
|
if track["info"]["uri"].startswith(tuple(v2_valid_urls)):
|
||||||
|
song_list.append(track["info"]["uri"])
|
||||||
|
else:
|
||||||
|
song_list.append(track["info"]["uri"])
|
||||||
|
except TypeError:
|
||||||
|
return await self._embed_msg(ctx, _("That playlist has no tracks."))
|
||||||
|
except KeyError:
|
||||||
|
return await self._embed_msg(ctx, _("That playlist doesn't exist."))
|
||||||
|
|
||||||
|
playlist_data = json.dumps(
|
||||||
|
{"author": ctx.author.id, "link": playlist_url, "playlist": song_list}
|
||||||
|
)
|
||||||
|
to_write = StringIO()
|
||||||
|
to_write.write(playlist_data)
|
||||||
|
to_write.seek(0)
|
||||||
|
await ctx.send(file=discord.File(to_write, filename=f"{playlist_name}.txt"))
|
||||||
|
to_write.close()
|
||||||
|
|
||||||
@playlist.command(name="info")
|
@playlist.command(name="info")
|
||||||
async def _playlist_info(self, ctx, playlist_name):
|
async def _playlist_info(self, ctx, playlist_name):
|
||||||
"""Retrieve information from a saved playlist."""
|
"""Retrieve information from a saved playlist."""
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user