Supported clear queue endpoint in ipc

This commit is contained in:
Choco
2024-09-09 11:34:45 +08:00
parent b9b77cf0a8
commit aa4017e090
3 changed files with 20 additions and 7 deletions

View File

@@ -646,13 +646,7 @@ class Basic(commands.Cog):
if not player.is_privileged(ctx.author):
return await send(ctx, "missingPerms_queue", ephemeral=True)
queue = queue.lower()
if queue == 'history':
player.queue.history_clear(player.is_playing)
else:
queue = "queue"
player.queue.clear()
await player.clear_queue(queue, ctx.author)
await send(ctx, "cleared", queue.capitalize())
@commands.hybrid_command(name="remove", aliases=get_aliases("remove"))

View File

@@ -266,6 +266,10 @@ async def removeTrack(player: Player, member: Member, data: Dict) -> None:
index, index2 = data.get("index"), data.get("index2")
await player.remove_track(index, index2, requester=member)
async def clearQueue(player: Player, member: Member, data: Dict) -> None:
queue_type = data.get("queue_type", "").lower()
await player.clear_queue(queue_type, member)
async def updateVolume(player: Player, member: Member, data: Dict) -> None:
if not member.guild_permissions.manage_guild:
return missingPermission(member.id)
@@ -711,6 +715,7 @@ METHODS: Dict[str, Union[SystemMethod, PlayerMethod]] = {
"shuffleTrack": PlayerMethod(shuffleTrack, credit=3),
"repeatTrack": PlayerMethod(repeatTrack),
"removeTrack": PlayerMethod(removeTrack),
"clearQueue": PlayerMethod(clearQueue),
"updateVolume": PlayerMethod(updateVolume, credit=2),
"updatePause": PlayerMethod(updatePause),
"updatePosition": PlayerMethod(updatePosition),

View File

@@ -633,6 +633,7 @@ class Player(VoiceProtocol):
return self._volume
async def shuffle(self, queue_type: str, requester: Member = None) -> None:
"""Shuffles the tracks in the specified queue or history."""
replacement = self.queue.tracks() if queue_type == "queue" else self.queue.history()
if len(replacement) < 3:
raise VoicelinkException(self.get_msg('shuffleError'))
@@ -708,6 +709,19 @@ class Player(VoiceProtocol):
self._logger.debug(f"Player in {self.guild.name}({self.guild.id}) has been applied a {filter.tag} filter.")
return self._filters
async def clear_queue(self, queue_type: str, requester: Member = None) -> None:
queue_type = queue_type.lower()
if queue_type == 'history':
self.queue.history_clear(self.is_playing)
elif queue_type == "queue":
self.queue.clear()
if self.is_ipc_connected:
await self.send_ws({
"op": "clearQueue",
"queue_type": queue_type
}, requester)
async def remove_filter(self, filter_tag: str, requester: Member = None, fast_apply: bool = False) -> Filters:
self._filters.remove_filter(filter_tag=filter_tag)
payload = self._filters.get_all_payloads()