Skip to main content

Minimalistic lavalink wrapper based on wavelink. Made for Pycord.

Project description

Prerequisites

Make sure you have a running lavalink server.

Installation

pip install git+https://github.com/KaasToast/Pisslink.py

Basic example

import discord
import pisslink
import re

from discord.commands import slash_command
from discord.ext import commands

YOUTUBE_REGEX = re.compile(r'^((?:https?:)?\/\/)?((?:www|m)\.)?((?:youtube\.com|youtu.be))(\/(?:[\w\-]+\?v=|embed\/|v\/)?)([\w\-]+)(\S+)?$')

class Client(discord.Bot):

    def __init__(self):
        super().__init__()

class Music(commands.Cog):

    def __init__(self, client):
        self.client = client
        self.client.loop.create_task(self.node())

    async def node(self):
        await self.client.wait_until_ready()
        await pisslink.NodePool.create_node(
            client = self.client,
            host = '127.0.0.1',
            port = 2333,
            password = 'youshallnotpass'
        )

    @slash_command()
    async def play(self, ctx, query):
        '''Play a song from youtube.'''
        player = ctx.voice_client
        await ctx.defer()
        if not player: # try to connect to the voice channel
            if not ctx.author.voice:
                return await ctx.respond('You are not connected to a voice channel.')
            else:
                try:
                    channel = ctx.author.voice.channel
                    await channel.connect(cls=pisslink.Player())
                    player = ctx.voice_client
                except discord.Forbidden:
                    return await ctx.respond('I do not have access to this channel.')
        if not ctx.author.voice or player.channel != ctx.author.voice.channel: # check if author is in same channel as the bot
            await ctx.respond('You must be in the same channel as the bot.')
        else:
            if YOUTUBE_REGEX.match(query): # check if query is url.
                track = await pisslink.PisslinkTrack.get(query, return_first=True)
            else: # query is not a url
                track = await pisslink.PisslinkTrack.search(query, return_first=True)
            if not track: # check if track was found
                await ctx.respond('Song not found.')
            else: # play the track
                await player.play(track)
                await ctx.respond(f'Playing {track.title}.')

client = Client()
client.add_cog(Music(client))
client.run('TOKEN')

For advanced usage see advanced.py

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

pisslink-1.0.2.tar.gz (10.8 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

pisslink-1.0.2-py3-none-any.whl (12.5 kB view details)

Uploaded Python 3

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page