fix: require voice connection to restore queue
This commit is contained in:
5 files changed
+27
-3
No files matched your search
@@ -289,6 +289,13 @@ class MusicPlayerQueueTest(unittest.IsolatedAsyncioTestCase):
|
|||||||
await asyncio.sleep(0)
|
await asyncio.sleep(0)
|
||||||
self.assertEqual([track.id for track in player.state(GUILD).queue], ["restored"])
|
self.assertEqual([track.id for track in player.state(GUILD).queue], ["restored"])
|
||||||
|
|
||||||
|
async def test_restore_requires_voice_connection(self):
|
||||||
|
player, _ = build_player()
|
||||||
|
player.voice_client = lambda guild_id: None # type: ignore[method-assign]
|
||||||
|
|
||||||
|
with self.assertRaisesRegex(ValueError, "not connected"):
|
||||||
|
await player.restore_queue(GUILD)
|
||||||
|
|
||||||
|
|
||||||
class LoopModeTest(unittest.TestCase):
|
class LoopModeTest(unittest.TestCase):
|
||||||
def test_cycle_order(self):
|
def test_cycle_order(self):
|
||||||
|
|||||||
@@ -145,6 +145,8 @@ class MusicPlayer:
|
|||||||
voice_client.stop()
|
voice_client.stop()
|
||||||
|
|
||||||
async def restore_queue(self, guild_id: int) -> int:
|
async def restore_queue(self, guild_id: int) -> int:
|
||||||
|
if self.voice_client(guild_id) is None:
|
||||||
|
raise ValueError("Bot is not connected to a voice channel on this server")
|
||||||
if not self._queues:
|
if not self._queues:
|
||||||
return 0
|
return 0
|
||||||
|
|
||||||
|
|||||||
@@ -29,7 +29,10 @@ async def restore_queue(
|
|||||||
player: MusicPlayer = Depends(get_player),
|
player: MusicPlayer = Depends(get_player),
|
||||||
broadcaster: StatusBroadcaster = Depends(get_broadcaster),
|
broadcaster: StatusBroadcaster = Depends(get_broadcaster),
|
||||||
) -> dict[str, int | str]:
|
) -> dict[str, int | str]:
|
||||||
count = await player.restore_queue(guild.id)
|
try:
|
||||||
|
count = await player.restore_queue(guild.id)
|
||||||
|
except ValueError as error:
|
||||||
|
raise HTTPException(status_code=400, detail=str(error)) from error
|
||||||
if count == 0:
|
if count == 0:
|
||||||
raise HTTPException(status_code=404, detail="No saved queue for this server")
|
raise HTTPException(status_code=404, detail="No saved queue for this server")
|
||||||
await broadcaster.broadcast()
|
await broadcaster.broadcast()
|
||||||
|
|||||||
@@ -135,7 +135,13 @@ class PlayerView(discord.ui.View):
|
|||||||
label="Przywróć kolejkę", emoji="↩️", style=discord.ButtonStyle.success, row=1
|
label="Przywróć kolejkę", emoji="↩️", style=discord.ButtonStyle.success, row=1
|
||||||
)
|
)
|
||||||
async def restore(self, interaction: discord.Interaction, _: discord.ui.Button) -> None:
|
async def restore(self, interaction: discord.Interaction, _: discord.ui.Button) -> None:
|
||||||
count = await self.player.restore_queue(self.guild_id)
|
try:
|
||||||
|
count = await self.player.restore_queue(self.guild_id)
|
||||||
|
except ValueError as error:
|
||||||
|
await interaction.response.send_message(
|
||||||
|
embed=message_embed("Kolejka", str(error)), ephemeral=True
|
||||||
|
)
|
||||||
|
return
|
||||||
if not count:
|
if not count:
|
||||||
await interaction.response.send_message(
|
await interaction.response.send_message(
|
||||||
embed=message_embed("Kolejka", "Nie ma zapisanej kolejki dla tego serwera."),
|
embed=message_embed("Kolejka", "Nie ma zapisanej kolejki dla tego serwera."),
|
||||||
|
|||||||
@@ -78,7 +78,13 @@ class QueueCog(MusicCogBase, name="Queue"):
|
|||||||
|
|
||||||
@app_commands.command(name="restorequeue", description="Przywróć ostatnią zapisaną kolejkę")
|
@app_commands.command(name="restorequeue", description="Przywróć ostatnią zapisaną kolejkę")
|
||||||
async def restore_queue(self, interaction: discord.Interaction) -> None:
|
async def restore_queue(self, interaction: discord.Interaction) -> None:
|
||||||
count = await self.player.restore_queue(interaction.guild.id)
|
try:
|
||||||
|
count = await self.player.restore_queue(interaction.guild.id)
|
||||||
|
except ValueError as error:
|
||||||
|
await interaction.response.send_message(
|
||||||
|
embed=message_embed("Przywracanie kolejki", str(error)), ephemeral=True
|
||||||
|
)
|
||||||
|
return
|
||||||
if not count:
|
if not count:
|
||||||
await interaction.response.send_message(
|
await interaction.response.send_message(
|
||||||
embed=message_embed(
|
embed=message_embed(
|
||||||
|
|||||||
Reference in new issue
Block a user