From 81239066b733db4f0469cc9822619da4aadcf435 Mon Sep 17 00:00:00 2001 From: Choco <94597336+ChocoMeow@users.noreply.github.com> Date: Wed, 10 Jul 2024 17:50:35 +0800 Subject: [PATCH] Added filter event in ipc method --- ipc/methods.py | 33 +++++++++++++++++++++++++++++++-- 1 file changed, 31 insertions(+), 2 deletions(-) diff --git a/ipc/methods.py b/ipc/methods.py index 29e52f4..dd94902 100644 --- a/ipc/methods.py +++ b/ipc/methods.py @@ -93,6 +93,11 @@ async def initUser(bot: commands.Bot, data: Dict) -> Dict: async def initPlayer(player: Player, member: Member, data: Dict) -> Dict: player._ipc_connection = True + available_filters = [] + for name, filter_cls in Filters.get_available_filters().items(): + filter = filter_cls() + available_filters.append({"tag": name, "scope": filter.scope, "payload": filter.payload}) + return { "op": "initPlayer", "guild_id": str(player.guild.id), @@ -113,7 +118,7 @@ async def initPlayer(player: Player, member: Member, data: Dict) -> Dict: "autoplay": player.settings.get("autoplay", False), "volume": player.volume, "filters": [{"tag": filter.tag, "scope": filter.scope, "payload": filter.payload} for filter in player.filters.get_filters()], - "available_filters": [{"tag": name, "scope": filter.scope, "payload": filter.payload} for name, filter in Filters.get_available_filters().items()] + "available_filters": available_filters } async def closeConnection(bot: commands.Bot, data: Dict) -> None: @@ -135,7 +140,7 @@ async def getRecommendation(bot: commands.Bot, data: Dict) -> None: return { "op": "getRecommendation", "user_id": str(data.get("user_id")), - "region": data.get("region"), + "callback": data.get("callback"), "tracks": [track.track_id for track in tracks] if tracks else [] } @@ -303,6 +308,29 @@ async def toggleAutoplay(player: Player, member: Member, data: Dict) -> Dict: "requester_id": str(member.id) } +async def updateFilter(player: Player, member: Member, data: Dict) -> None: + updateType = data.get("type", "add") + filter_tag = data.get("tag") + + if updateType == "add": + available_filters = Filters.get_available_filters() + filter_cls = available_filters.get(filter_tag) + if not filter_cls: + return + + payload = {} + if "payload" in data: + payload = data.get("payload").get(list(data.get("payload").keys()[0]), {}) + if player.filters.has_filter(filter_tag=filter_tag): + player.filters.remove_filter(filter_tag=filter_tag) + await player.add_filter(filter=filter_cls(**payload), requester=member) + + elif updateType == "remove": + await player.remove_filter(filter_tag=filter_tag, requester=member) + + else: + await player.reset_filter(requester=member) + async def _loadPlaylist(playlist: Dict) -> Optional[List[Track]]: if playlist.get("type") == "link": tracks: List[Track]= await NodePool.get_node().get_tracks(playlist.get("uri"), requester=None) @@ -628,6 +656,7 @@ METHODS: Dict[str, Union[SystemMethod, PlayerMethod]] = { "updatePause": PlayerMethod(updatePause), "updatePosition": PlayerMethod(updatePosition), "toggleAutoplay": PlayerMethod(toggleAutoplay), + "updateFilter": PlayerMethod(updateFilter), } async def process_methods(ipc_client, bot: commands.Bot, data: Dict) -> None: