music play + now playing

This commit is contained in:
2023-05-17 01:04:16 +02:00
parent 0749f742c3
commit d09c2b7a89
21 changed files with 410 additions and 143 deletions

View File

@ -1,4 +1,3 @@
import json
import re
from discord import Interaction
@ -50,8 +49,8 @@ class Sources:
if data is None:
return None
with open("search_result.json", "w") as file:
file.write(json.dumps(data))
# with open("search_result.json", "w") as file:
# file.write(json.dumps(data))
entry = Entry(
title=Title(name=data["title"], url=data["webpage_url"]),
@ -62,71 +61,138 @@ class Sources:
source=data["webpage_url"],
)
await self.fileManager.download(interaction, [entry])
entry.source = await anext(self.fileManager.download(interaction, [entry]))
return [entry]
if self.youtube_playlist_regex.match(query) is not None:
data = await self.youtube.getData(query)
data = await self.youtube.fetchData(query)
if data is None:
return None
with open("search_result.json", "w") as file:
file.write(json.dumps(data))
# with open("search_result.json", "w") as file:
# file.write(json.dumps(data))
playlist = Playlist(
title=data["title"],
name=data["title"],
url=data["webpage_url"],
owner=Artist(name=data["channel"], url=data["channel_url"]),
)
return [
entries = [
Entry(
title=Title(name=data["title"], url=data["webpage_url"]),
artist=Artist(name=data["channel"], url=data["channel_url"]),
duration=data["duration"],
thumbnail=data["thumbnail"],
title=Title(
name=entry_data["title"], url=entry_data["webpage_url"]
),
artist=Artist(
name=entry_data["channel"], url=entry_data["channel_url"]
),
duration=entry_data["duration"],
thumbnail=entry_data["thumbnail"],
requesterId=interaction.user.id,
playlist=playlist,
source=data["url"],
source=entry_data["webpage_url"],
)
for data in data["entries"]
for entry_data in data["entries"]
]
index = 0
async for file in self.fileManager.download(interaction, entries):
entries[index].source = file
index += 1
return entries
if self.spotify_track_regex.match(query) is not None:
data = await self.spotify.getTrack(query)
with open("spotify_track_result.json", "w") as file:
file.write(json.dumps(data))
# with open("spotify_track_result.json", "w") as file:
# file.write(json.dumps(data))
return [
Entry(
title=Title(
name=data["name"], url=data["external_urls"]["spotify"]
),
artist=Artist(
name=data["artists"][0]["name"],
url=data["artists"][0]["external_urls"]["spotify"],
),
album=Album(
name=data["album"]["name"],
url=data["album"]["external_urls"]["spotify"],
),
duration=0,
thumbnail=data["album"]["images"][0]["url"],
requesterId=interaction.user.id,
)
]
entry = Entry(
title=Title(name=data["name"], url=data["external_urls"]["spotify"]),
artist=Artist(
name=data["artists"][0]["name"],
url=data["artists"][0]["external_urls"]["spotify"],
),
album=Album(
name=data["album"]["name"],
url=data["album"]["external_urls"]["spotify"],
),
duration=0,
thumbnail=data["album"]["images"][0]["url"],
requesterId=interaction.user.id,
)
entry.source = await self.search(f"{entry.title.name} {entry.artist.name}")
entry.source = await anext(self.fileManager.download(interaction, [entry]))
return [entry]
if (
self.spotify_playlist_regex.match(query) is not None
or self.spotify_album_regex.match(query) is not None
or self.spotify_artist_regex.match(query) is not None
):
return
data = await self.spotify.getPlaylist(query)
return await self.processQuery(interaction, await self.search(query))
# with open("spotify_playlist_result.json", "w") as file:
# file.write(json.dumps(data))
async def search(self, query) -> str:
playlist = Playlist(
name=data["name"],
url=data["external_urls"]["spotify"],
owner=Artist(
name=data["owner"]["display_name"],
url=data["owner"]["external_urls"]["spotify"],
),
)
entries = [
Entry(
title=Title(
name=entry_data["track"]["name"],
url=entry_data["track"]["external_urls"]["spotify"],
),
artist=Artist(
name=entry_data["track"]["artists"][0]["name"],
url=entry_data["track"]["artists"][0]["external_urls"][
"spotify"
],
),
album=Album(
name=entry_data["track"]["album"]["name"],
url=entry_data["track"]["album"]["external_urls"]["spotify"],
),
duration=0,
thumbnail=entry_data["track"]["album"]["images"][0]["url"],
requesterId=interaction.user.id,
)
for entry_data in data["tracks"]["items"]
]
for entry in entries:
entry.source = await self.search(
f"{entry.title.name} {entry.artist.name}"
)
print(entry.source)
index = 0
async for file in self.fileManager.download(interaction, entries):
print(entries[index].source)
entries[index].source = file
print(entries[index].source)
index += 1
return entries
searchResult = await self.search(query)
if searchResult is None:
return None
return await self.processQuery(interaction, searchResult)
async def search(self, query) -> str | None:
result = await self.youtube.searchVideo(query)
return result["result"][0]["link"]
if len(result) == 0:
return None
return result[0]["link"]