diff --git a/cogs/settings.py b/cogs/settings.py index b3834fde..58b20771 100644 --- a/cogs/settings.py +++ b/cogs/settings.py @@ -184,8 +184,9 @@ async def volume(self, ctx: commands.Context, value: commands.Range[int, 1, 150] player: voicelink.Player = ctx.guild.voice_client if player: await player.set_volume(value, ctx.author) + else: + await update_settings(ctx.guild.id, {"$set": {'volume': value}}) - await update_settings(ctx.guild.id, {"$set": {'volume': value}}) await send(ctx, 'setVolume', value) @settings.command(name="togglecontroller", aliases=get_aliases("togglecontroller")) diff --git a/ipc/methods.py b/ipc/methods.py index 9a93a173..d3ddf348 100644 --- a/ipc/methods.py +++ b/ipc/methods.py @@ -274,7 +274,6 @@ async def clearQueue(player: Player, member: Member, data: Dict) -> None: @require_permission(only_admin=True) async def updateVolume(player: Player, member: Member, data: Dict) -> None: volume = data.get("volume", 100) - await func.update_settings(player.guild.id, {"$set": {"volume": volume}}) await player.set_volume(volume=volume, requester=member) async def updatePause(player: Player, member: Member, data: Dict) -> None: diff --git a/voicelink/player.py b/voicelink/player.py index 752162b0..de368c76 100644 --- a/voicelink/player.py +++ b/voicelink/player.py @@ -73,9 +73,6 @@ async def connect_channel(ctx: Union[commands.Context, Interaction], channel: Vo channel, ctx, settings )) - if player.volume != 100: - await player.set_volume(player.volume) - if ctx.bot.ipc.is_connected: await player.send_ws({"op": "createPlayer", "memberIds": [str(member.id) for member in channel.members]}) @@ -343,6 +340,7 @@ async def _dispatch_voice_update(self, voice_data: Dict[str, Any] = None): "token": state['event']['token'], "endpoint": state['event']['endpoint'], "sessionId": state['sessionId'], + "channelId": str(self.channel.id), } await self.send(method=RequestMethod.PATCH, data={"voice": data}) @@ -541,6 +539,8 @@ async def connect(self, *, timeout: float, reconnect: bool, self_deaf: bool = Tr if self.channel: self._logger.debug(f"Player in {self.guild.name}({self.guild.id}) has been connected to {self.channel.name}({self.channel.id}).") + + await self.set_volume(self._volume) async def stop(self): """Stops the currently playing track.""" @@ -693,6 +693,11 @@ async def set_pause(self, pause: bool, requester: Member = None) -> bool: async def set_volume(self, volume: int, requester: Member = None) -> int: """Sets the volume of the player as an integer. Lavalink accepts values from 0 to 500.""" await self.send(method=RequestMethod.PATCH, data={"volume": volume}) + + if self._volume != volume: + self.settings['volume'] = volume + await func.update_settings(self.guild.id, {"$set": {"volume": volume}}) + self._volume = volume if self.is_ipc_connected: diff --git a/voicelink/pool.py b/voicelink/pool.py index 427fcfd3..7578e3a3 100644 --- a/voicelink/pool.py +++ b/voicelink/pool.py @@ -325,6 +325,7 @@ async def reconnect(self) -> None: await player._dispatch_voice_update(player._voice_state) if player.current: + await player.set_volume(player.volume) await player.play(track=player.current, start=min(player._last_position, player.current.length)) if player.is_paused: