Merge pull request #56 from r-Norge/hotfix/missing_player_in_on_voice_state_update

Don't propagate error in on_state_update if we don't have a player
This commit is contained in:
Ev-1 authored and GitHub committed 2022-10-09 15:04:05 +02:00
commit bf907b9ef1
2 files changed
+17 -7

No files matched your search

+12 -7
View File
@@ -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 """
+5
View File
@@ -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)