A powerful and robust Python library built from the ground up for interacting with Lavalink.
The aim of this library was to provide a wrapper for lavalink when using discord.py. Before I started development, I was using a library called Wavelink, however, once it became archived I decided to start development on this library to not only improve my own skills but to help others with the same problem.
However, now my interest has started to falter. I have lost the drive to continue maintaining this library for a number of reasons: the code isn't PEP 8 compliant unlike my newer projects and the code is hard to maintain in its current form. But the most important reason is that there is now a large number of alternative libraries which do this specific purpose much better than this library including but not limited to: Wavelink, Pomice, and Pycord.Wavelink.
Henceforth, I have made the decision to stop maintaining this library and leave it dormant. I won't archive it as I may recover the drive I had when starting this project later on, but for now, the library is now inactive.
Lavapy requires Python 3.8 or higher
To install Lavapy, use one of the commands below:
# Windows
py -3.8 -m pip install -U lavapy
# Linux/macOS
python3.8 -m pip install -U lavapyThen you need to setup the Lavalink server. For more details visit the faq.
Now all of that is done, you can start using Lavapy.
A simple and easy example to connect to a voice channel and play a Youtube song based on a given search query.
fromdiscord.extimportcommandsimportlavapybot=commands.Bot(command_prefix="!")
asyncdefinitialiseNodes():
""" Wait until the bot is ready then create a Lavapy node """awaitbot.wait_until_ready()
awaitlavapy.NodePool.createNode(client=bot,
host="0.0.0.0",
port=2333,
password="LAVALINK_PASSWORD")
@bot.command()asyncdefplay(ctx: commands.Context, *query) ->None:
""" Play a Youtube song from a given search query. If the bot is not connected, connect it to the user's voice channel. For this to work, the user must be connected to a voice channel """ifnotctx.voice_client:
# Bot is not connected to a voice channeltry:
player: lavapy.Player=awaitctx.author.voice.channel.connect(cls=lavapy.Player)
exceptAttributeError:
# User is not connected to a voice channelawaitctx.channel.send("You must be connected to a voice channel")
returnelse:
# Bot is connected to a voice channelplayer: lavapy.Player=ctx.voice_client# Get tracks based on the given search querytrack=awaitlavapy.YoutubeTrack.search(" ".join(query), player.node)
awaitplayer.play(track)
bot.loop.create_task(initialiseNodes())
bot.run("BOT_TOKEN")