code: async def ensure_voice(self, ctx):
          
          player = self.bot.lavalink.players.get(ctx.guild.id)
  
          if not player.is_connected:
              if not ctx.author.voice or not ctx.author.voice.channel:
                  await ctx.send('You aren\'t connected to any voice channel.')
                  raise commands.CommandInvokeError('Author not connected to voice channel.')
  
              permissions = ctx.author.voice.channel.permissions_for(ctx.me)
  
              if not permissions.connect or not permissions.speak:
                  await ctx.send('Missing permissions `CONNECT` and/or `SPEAK`.')
                  raise commands.CommandInvokeError('Bot has no permissions CONNECT and/or SPEAK')
  
              player.store('channel', ctx.channel.id)
              await player.connect(ctx.author.voice.channel.id)
          else:
              if player.connected_channel.id != ctx.author.voice.channel.id:
                  return await ctx.send('Join my voice channel!')
docs: A few checks to make sure the bot can join a voice channel.