diff --git a/musicbot/cogs/music/decorators.py b/musicbot/cogs/music/decorators.py index 2b8e4a3..d94f8ca 100644 --- a/musicbot/cogs/music/decorators.py +++ b/musicbot/cogs/music/decorators.py @@ -7,69 +7,29 @@ import functools import inspect import math - from ...utils.checks import is_dj from .music_errors import WrongVoiceChannelError -class LavalinkVoiceClient(discord.VoiceClient): - """ - This is the preferred way to handle external voice sending - This client will be created via a cls in the connect method of the channel - see the following documentation: - https://discordpy.readthedocs.io/en/latest/api.html#voiceprotocol - """ - +class BasicVoiceClient(discord.VoiceClient): def __init__(self, client: discord.Client, channel: discord.abc.Connectable): self.client = client self.channel = channel - # ensure a client already exists if hasattr(self.client, 'lavalink'): self.lavalink = self.client.lavalink else: raise Exception("client did not have defined lavalink before connect") - self.client.lavalink = lavalink.Client(client.user.id) - self.client.lavalink.add_node( - 'localhost', - 2334, - 'butiactuallydid', - 'us', - 'default-node' - ) - self.lavalink = self.client.lavalink async def on_voice_server_update(self, data): - # the data needs to be transformed before being handed down to - # voice_update_handler - lavalink_data = { - 't': 'VOICE_SERVER_UPDATE', - 'd': data - } - await self.lavalink.voice_update_handler(lavalink_data) + await self.lavalink.voice_update_handler({'t': 'VOICE_SERVER_UPDATE', 'd': data}) async def on_voice_state_update(self, data): - # the data needs to be transformed before being handed down to - # voice_update_handler - lavalink_data = { - 't': 'VOICE_STATE_UPDATE', - 'd': data - } - await self.lavalink.voice_update_handler(lavalink_data) + await self.lavalink.voice_update_handler({'t': 'VOICE_STATE_UPDATE', 'd': data}) async def connect(self, *, timeout: float, reconnect: bool, self_deaf: bool = False, self_mute: bool = False) -> None: - """ - Connect the bot to the voice channel and create a player_manager - if it doesn't exist yet. - """ - # ensure there is a player_manager when creating a new voice_client - self.lavalink.player_manager.create(guild_id=self.channel.guild.id) await self.channel.guild.change_voice_state(channel=self.channel, self_mute=self_mute, self_deaf=self_deaf) async def disconnect(self, *, force: bool = False) -> None: - """ - Handles the disconnect. - Cleans up running player and leaves the voice client. - """ player = self.lavalink.player_manager.get(self.channel.guild.id) # no need to disconnect if we are not connected @@ -78,10 +38,6 @@ class LavalinkVoiceClient(discord.VoiceClient): # None means disconnect await self.channel.guild.change_voice_state(channel=None) - - # update the channel_id of the player to None - # this must be done because the on_voice_state_update that would set channel_id - # to None doesn't get dispatched after the disconnect player.channel_id = None self.cleanup() @@ -120,8 +76,7 @@ def require_voice_connection(should_connect=False): 'You need to be in the right voice channel', channels=voice_channels) player.store('channel', ctx.channel.id) - #await self.connect_to(ctx.guild.id, str(ctx.author.voice.channel.id)) - await ctx.author.voice.channel.connect(cls=LavalinkVoiceClient) + await ctx.author.voice.channel.connect(cls=BasicVoiceClient) elif int(player.channel_id) != ctx.author.voice.channel.id: