Applying all the necessary commands to use the new add_track method

This commit is contained in:
Choco
2023-03-08 10:34:50 +08:00
parent ba290d2606
commit 4ddaba584b
4 changed files with 38 additions and 30 deletions

View File

@@ -28,7 +28,6 @@ searchPlatform = {
"apple": "amsearch",
}
async def connect_channel(ctx: commands.Context, channel: discord.VoiceChannel = None) -> voicelink.Player:
try:
channel = channel or ctx.author.voice.channel
@@ -43,7 +42,6 @@ async def connect_channel(ctx: commands.Context, channel: discord.VoiceChannel =
player: voicelink.Player = await channel.connect(cls=voicelink.Player(ctx.bot, channel, ctx))
return player
async def nowplay(ctx: commands.Context, player: voicelink.Player):
track = player.current
if not track:
@@ -118,11 +116,10 @@ class Basic(commands.Cog):
try:
if isinstance(tracks, voicelink.Playlist):
for track in tracks.tracks:
player.queue.put(track)
await ctx.send(player.get_msg('playlistLoad').format(tracks.name, len(tracks.tracks)))
index = await player.add_track(tracks.tracks)
await ctx.send(player.get_msg('playlistLoad').format(tracks.name, index))
else:
position = player.queue.put(tracks[0])
position = await player.add_track(tracks[0])
await ctx.send((f"`{player.get_msg('live')}`" if tracks[0].is_stream else "") + (player.get_msg('trackLoad_pos').format(tracks[0].title, tracks[0].author, tracks[0].formatLength, position) if position >= 1 and player.is_playing else player.get_msg('trackLoad').format(tracks[0].title, tracks[0].author, tracks[0].formatLength)))
except voicelink.QueueFull as e:
await ctx.send(e)
@@ -158,12 +155,11 @@ class Basic(commands.Cog):
try:
if isinstance(tracks, voicelink.Playlist):
for track in tracks.tracks:
player.queue.put(track)
await ctx.send(player.get_msg('playlistLoad').format(tracks.name, len(tracks.tracks)))
index = await player.add_track(tracks.tracks)
await ctx.send(player.get_msg('playlistLoad').format(tracks.name, index))
else:
player.queue.put(tracks[0])
await ctx.send((f"`{player.get_msg('live')}`" if tracks[0].is_stream else "") + (player.get_msg('trackLoad_pos').format(tracks[0].title, tracks[0].author, tracks[0].formatLength, player.queue.count) if player.queue.count >= 1 and player.is_playing else player.get_msg('trackLoad').format(tracks[0].title, tracks[0].author, tracks[0].formatLength)))
position = await player.add_track(tracks[0])
await ctx.send((f"`{player.get_msg('live')}`" if tracks[0].is_stream else "") + (player.get_msg('trackLoad_pos').format(tracks[0].title, tracks[0].author, tracks[0].formatLength, position) if position >= 1 and player.is_playing else player.get_msg('trackLoad').format(tracks[0].title, tracks[0].author, tracks[0].formatLength)))
except voicelink.QueueFull as e:
await ctx.send(e)
finally:
@@ -196,8 +192,9 @@ class Basic(commands.Cog):
if url(query):
return await ctx.send(player.get_msg('noLinkSupport'), ephemeral=True)
platform = platform.lower()
if platform != 'spotify':
query_platform = searchPlatform.get(platform.lower(), 'ytsearch') + f":{query}"
query_platform = searchPlatform.get(platform, 'ytsearch') + f":{query}"
tracks = await player.get_tracks(query=query_platform, requester=ctx.author)
else:
tracks = await player.spotifySearch(query=query, requester=ctx.author)
@@ -208,7 +205,7 @@ class Basic(commands.Cog):
query_track = "\n".join(
f"`{index}.` `[{track.formatLength}]` **{track.title[:35]}**" for index, track in enumerate(tracks[0:10], start=1))
embed = discord.Embed(title=player.get_msg('searchTitle').format(query), description=player.get_msg(
'searchDesc').format(emoji_source(platform.lower()), platform, len(tracks[0:10]), query_track), color=embed_color)
'searchDesc').format(emoji_source(platform), platform, len(tracks[0:10]), query_track), color=embed_color)
view = SearchView(tracks=tracks[0:10], lang=player.lang)
message = await ctx.send(embed=embed, view=view, ephemeral=True)
view.response = message
@@ -217,9 +214,9 @@ class Basic(commands.Cog):
msg = ""
for value in view.values:
track = tracks[int(value.split(". ")[0]) - 1]
player.queue.put(track)
position = await player.add_track(track)
msg += ((f"`{player.get_msg('live')}`" if track.is_stream else "") + (player.get_msg('trackLoad_pos').format(track.title, track.author, track.formatLength,
player.queue.count) if player.queue.count >= 1 else player.get_msg('trackLoad').format(track.title, track.author, track.formatLength)))
position) if position >= 1 else player.get_msg('trackLoad').format(track.title, track.author, track.formatLength)))
await ctx.send(msg)
if not player.is_playing:

View File

@@ -149,9 +149,7 @@ class Playlists(commands.Cog, name="playlist"):
if value and 0 < value <= (len(tracks['tracks'])):
tracks['tracks'] = [tracks['tracks'][value - 1]]
for track in tracks['tracks']:
player.queue.put(track)
await player.add_track(tracks['tracks'])
await ctx.send(get_lang(ctx.guild.id, 'playlistPlay').format(result['playlist']['name'], len(tracks['tracks'][:max_t])))
if not player.is_playing:

View File

@@ -275,18 +275,17 @@ class Player(VoiceProtocol):
self.stop_votes.clear()
track: Track = self.queue.get()
if not track:
if self.settings.get("autoplay", False):
if await func.similar_track(self):
return await self.do_next()
if self.settings.get('controller', True):
await self.invoke_controller()
return
try:
await self.play(track, start=track.position)
except:
await sleep(5)
return await self.do_next()
else:
try:
await self.play(track, start=track.position)
except:
await sleep(5)
return await self.do_next()
if self.settings.get('controller', True):
await self.invoke_controller()
@@ -519,6 +518,19 @@ class Player(VoiceProtocol):
return self._current
async def add_track(self, raw_tracks: Union[Track, List[Track]], at_font: bool = False) -> int:
tracks = []
try:
if (isList := isinstance(raw_tracks, List)):
for track in raw_tracks:
self.queue.put_at_front(track) if at_font else self.queue.put(track)
tracks.append(track)
else:
position = self.queue.put_at_front(raw_tracks) if at_font else self.queue.put(raw_tracks)
tracks.append(raw_tracks)
finally:
return len(tracks) if isList else position
async def seek(self, position: float) -> float:
"""Seeks to a position in the currently playing track milliseconds"""
if position < 0 or position > self._current.original.length:

View File

@@ -52,7 +52,7 @@ class Queue:
return track
def put(self, item: Track) -> int:
if len(self._queue) >= self._size:
if self.count >= self._size:
raise QueueFull(self.get_msg("voicelinkQueueFull").format(self._size))
if not self._duplicateTrack:
@@ -63,17 +63,18 @@ class Queue:
return self.count
def put_at_front(self, item: Track):
if len(self._queue) >= self._size:
if self.count >= self._size:
raise QueueFull(self.get_msg("voicelinkQueueFull").format(self._size))
if not self._duplicateTrack:
if item.uri in [track.uri for track in self._queue]:
raise DuplicateTrack(self.get_msg("voicelinkDuplicateTrack"))
return self._queue.insert(self._position, item)
self._queue.insert(self._position, item)
return 1
def put_at_index(self, index: int, item: Track):
if len(self._queue) >= self._size:
if self.count >= self._size:
raise QueueFull(self.get_msg("voicelinkQueueFull").format(self._size))
if not self._duplicateTrack: