Welcome to Pomice!

https://raw.githubusercontent.com/cloudwithax/pomice/main/banner.jpg

The modern Lavalink wrapper designed for discord.py

Contents

Before You Start

This library is designed to work with the Lavalink audio delivery system, which directly interfaces with Discord to provide buttery smooth audio without wasting your precious system resources.

Pomice is made with convenience to the user, in that everything is easy to use and is out of your way, while also being customizable.

In order to start using this library, please download a Lavalink node to start, you can get it here

Quick Jumpstart

If you want a quick example as to how to start with Pomice, look below:

import pomice
import discord
import re

from discord.ext import commands

URL_REG = re.compile(r'https?://(?:www\.)?.+')

class MyBot(commands.Bot):

   def __init__(self) -> None:
      super().__init__(command_prefix='!', activity=discord.Activity(type=discord.ActivityType.listening, name='to music!'))

      self.add_cog(Music(self))

   async def on_ready(self) -> None:
      print("I'm online!")
      await self.cogs["Music"].start_nodes()


class Music(commands.Cog):

   def __init__(self, bot) -> None:
      self.bot = bot

      self.pomice = pomice.NodePool()

   async def start_nodes(self):
      await self.pomice.create_node(bot=self.bot, host='127.0.0.1', port='3030',
                                    password='youshallnotpass', identifier='MAIN')
      print(f"Node is ready!")



   @commands.command(name='join', aliases=['connect'])
   async def join(self, ctx: commands.Context, *, channel: discord.TextChannel = None) -> None:

      if not channel:
            channel = getattr(ctx.author.voice, 'channel', None)
            if not channel:
               raise commands.CheckFailure('You must be in a voice channel to use this command'
                                          'without specifying the channel argument.')


      await ctx.author.voice.channel.connect(cls=pomice.Player)
      await ctx.send(f'Joined the voice channel `{channel}`')

   @commands.command(name='play')
   async def play(self, ctx, *, search: str) -> None:

      if not ctx.voice_client:
            await ctx.invoke(self.join)

      player = ctx.voice_client

      results = await player.get_tracks(query=f'{search}')

      if not results:
            raise commands.CommandError('No results were found for that search term.')

      if isinstance(results, pomice.Playlist):
            await player.play(track=results.tracks[0])
      else:
            await player.play(track=results[0])


bot = MyBot()
bot.run("token here")