Я установил (простую) систему очередей, в которой песни, добавленные, когда бот уже играет, будут добавлены в очередь и воспроизведены после завершения. Однако, когда я добавляю музыку во время ее воспроизведения, текущая песня просто останавливается .
@commands.command()
async def play(self, ctx, *, url):
# url
added = False # so i can avoid code later
if ctx.voice_client.is_playing() or queue:
queue.append(url)
temp = await YTDLSource.from_url(queue[-1], loop=self.bot.loop)
queueNames.append(f"{temp.title}") # displaying youtube name rather than user's search
added = True # this is for later
else:
try:
queue.pop(0) # if it's not playing, get rid of old song
queueNames.pop(0)
except:
pass # if there is no old song, do nothing
queue.append(url)
temp = await YTDLSource.from_url(queue[-1], loop=self.bot.loop)
queueNames.append(f"{temp.title}")
if not added: # if no new songs were added
async with ctx.typing():
player = await YTDLSource.from_url(queue[0], loop=self.bot.loop)
ctx.voice_client.play(player, after=lambda e: print("Player error: %s" % e) if e else None)
await ctx.send(f"Now playing {player.title}")
else:
await ctx.send(f"{temp.title} added to the queue") # simple message
Ошибок не выдается, просто останавливается воспроизведение текущей песни. Скажем, я играл в Smash Mouth, затем пытался стоять в очереди, никогда не бросая тебя, бот прекратил бы играть, и мне пришлось бы сделать *skip
, чтобы начать следующую песню, которую я поставил в очередь.
Кроме того, когда песня заканчивается, она не переходит прямо к следующей песне, которую я поставил в очередь.