Lavalink support for interactions.py
Project description
interactions-lavalink
Installation
Download ext via pip install --upgrade interactions-lavalink
Configuring own lavalink server
- Download Java SE if you don't have it
- Download lavalink from this repo
- Configure
application.ymlfile like here - Run lavalink server via
java -jar Lavalink.jarin same folder withapplication.ymlfile.
Usage
Create bot like example and run it.
Main file:
from interactions import Client
# Creating bot variable
client = Client()
# Loading your extension
client.load("exts.music")
# Starting bot
client.start("TOKEN")
Extension file: exts/music.py
from interactions import Extension, SlashContext, listen, slash_command, slash_option
from interactions_lavalink import Lavalink
from interactions_lavalink.events import TrackStart
class Music(Extension):
def __init__(self, client):
self.client = client
self.lavalink: Lavalink | None = None
@listen()
async def on_startup(self):
# Initializing lavalink instance on bot startup
self.lavalink: Lavalink = Lavalink(self.client)
# Connecting to local lavalink server
self.lavalink.add_node("127.0.0.1", 43421, "your_password", "eu")
@listen()
async def on_track_start(self, event: TrackStart):
print("Track started", event.track.title)
@slash_command()
@slash_option("query", "The search query or url", opt_type=3, required=True)
async def play(self, ctx: SlashContext, query: str):
await ctx.defer()
# Getting user's voice state
voice_state = ctx.author.voice
if not voice_state or not voice_state.channel:
return await ctx.send("You're not connected to the voice channel!")
# Connecting to voice channel and getting player instance
player = await self.lavalink.connect(voice_state.guild.id, voice_state.channel.id)
# Getting tracks from youtube
tracks = await player.search_youtube(query)
track = tracks[0]
# Adding track to the queue
player.add(requester=int(ctx.author.id), track=track)
# Check if player is already playing
if player.is_playing:
return await ctx.send(f"Added to queue: `{track.title}`")
# Starting playing track
await player.play()
await ctx.send(f"Now playing: `{track.title}`")
@slash_command()
async def leave(self, ctx: SlashContext):
# Disconnecting from voice channel
await self.lavalink.disconnect(ctx.guild.id)
await ctx.send("Disconnected", ephemeral=True)
Events
To listen lavalink event you have to use @listen decorator.
from interactions import Extension, listen
from interactions_lavalink import TrackStart, TrackEnd, QueueEnd
class MusicExt(Extension):
... # Some your cool music commands
# There are many useful events for you. You can use other events if you want it.
@listen()
async def on_track_start(self, event: TrackStart):
"""Fires when track starts"""
print(f"Track {event.track.title} started")
@listen()
async def on_track_end(self, event: TrackEnd):
"""Fires when track ends"""
@listen()
async def on_queue_end(self, event: QueueEnd):
"""Fires when queue ends"""
More events you could find in the lavalink.py documentation
Documentation
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file interactions_lavalink-3.0.0.tar.gz.
File metadata
- Download URL: interactions_lavalink-3.0.0.tar.gz
- Upload date:
- Size: 17.4 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/5.1.0 CPython/3.9.19
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
0de870d9c076c6370d53184c792fb52d4b86fd615a4cbafdc0d1f379370c5547
|
|
| MD5 |
34ccdb4b9e053a0e649f547c4f0b72cc
|
|
| BLAKE2b-256 |
a8082ae672de8ef1329c02611b8c53c10ad07cecae080f428ffb6b681292b90a
|
File details
Details for the file interactions_lavalink-3.0.0-py3-none-any.whl.
File metadata
- Download URL: interactions_lavalink-3.0.0-py3-none-any.whl
- Upload date:
- Size: 17.8 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/5.1.0 CPython/3.9.19
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
901f3f9321d9b54e2cdcdc66e5ca715ebf804df8bca110a1eed71be6cbd8efdf
|
|
| MD5 |
328fd8e737b021e92b0ef54bfb494b01
|
|
| BLAKE2b-256 |
e57f99f3e4925e9390a725d4cbe5e49c1d318e44910c54049cbcd0165ca5bd0e
|