diff --git a/musicbot/cogs/music/__init__.py b/musicbot/cogs/music/__init__.py index 08f709b..b1ca978 100644 --- a/musicbot/cogs/music/__init__.py +++ b/musicbot/cogs/music/__init__.py @@ -26,7 +26,7 @@ from ...utils.userinteraction.paginators import QueuePaginator, TextPaginator from ...utils.userinteraction.scroller import ClearOn, Scroller from ...utils.userinteraction.selector import SelectMode, Selector, SelectorButton, SelectorItem from .decorators import require_playing, require_queue, require_voice_connection, voteable -from .music_errors import MusicError, WrongTextChannelError +from .music_errors import MusicError, PlayerNotAvailableError, WrongTextChannelError from .voice_client import BasicVoiceClient time_rx = re.compile('[0-9]+') @@ -64,7 +64,7 @@ class Music(commands.Cog): player: Optional[MixPlayer] = self.lavalink.player_manager.get(guild.id) if player is None: self.logger.error(f"Tried to get player for guild {guild.id} but got None") - raise MusicError(f"Tried to get player for guild {guild.id} but got None") + raise PlayerNotAvailableError(f"Tried to get player for guild {guild.id} but got None") return player async def enqueue(self, ctx, track, embed, silent=False, check_max_length=True) -> tuple[discord.Embed, bool]: @@ -850,17 +850,22 @@ class Music(commands.Cog): return # Bot not logged in if member.id == self.bot.user.id and after.channel is not None: voice_channel = after.channel - player = self.get_player(member.guild) + try: + player = self.get_player(member.guild) + except PlayerNotAvailableError: # This is expected if we have not created a player for the guild yet + return player.clear_listeners() for member in voice_channel.members: if not member.bot: player.update_listeners(member, member.voice) if not member.bot: - player = self.get_player(member.guild) - if player is not None: - player.update_listeners(member, after) - await self.check_leave_voice(member.guild) + try: + player = self.get_player(member.guild) + except PlayerNotAvailableError: # This is expected if we have not created a player for the guild yet + return + player.update_listeners(member, after) + await self.check_leave_voice(member.guild) async def check_leave_voice(self, guild: discord.Guild): """ Checks if the bot should leave the voice channel """ diff --git a/musicbot/cogs/music/music_errors.py b/musicbot/cogs/music/music_errors.py index c0430e5..28e52ef 100644 --- a/musicbot/cogs/music/music_errors.py +++ b/musicbot/cogs/music/music_errors.py @@ -10,6 +10,11 @@ class MusicError(CommandError): super().__init__(message) +class PlayerNotAvailable(MusicError): + def __init__(self, message: str, inner_error: Optional[Exception] = None): + super().__init__(message, inner_error=inner_error) + + class MissingPermissionsError(MusicError): def __init__(self, message: str, inner_error: Optional[Exception] = None): super().__init__(message, inner_error=inner_error)