Metadata-Version: 2.1
Name: Py-Lav
Version: 1.15.7
Summary:  A Lavalink WebSocket & API wrapper for discord.py
Home-page: https://github.com/PyLav/PyLav
License: AGPL-3.0-or-later
Author: Draper
Author-email: 27962761+Drapersniper@users.noreply.github.com
Requires-Python: >=3.11,<3.12
Classifier: Development Status :: 5 - Production/Stable
Classifier: Intended Audience :: Developers
Classifier: License :: OSI Approved :: GNU Affero General Public License v3 or later (AGPLv3+)
Classifier: Natural Language :: English
Classifier: Operating System :: MacOS :: MacOS X
Classifier: Operating System :: Microsoft :: Windows
Classifier: Operating System :: POSIX :: Linux
Classifier: Programming Language :: Python :: 3
Classifier: Programming Language :: Python :: 3.11
Classifier: Programming Language :: Python :: 3 :: Only
Classifier: Programming Language :: Python :: Implementation :: CPython
Classifier: Topic :: Software Development :: Libraries
Classifier: Topic :: Software Development :: Libraries :: Python Modules
Classifier: Topic :: Software Development :: Version Control :: Git
Classifier: Topic :: Utilities
Classifier: Typing :: Typed
Provides-Extra: all
Provides-Extra: all-nored
Provides-Extra: docs
Provides-Extra: nored
Provides-Extra: redis
Requires-Dist: APScheduler (>=3.10.4,<4.0.0)
Requires-Dist: Brotli (>=1.1.0,<2.0.0)
Requires-Dist: PyYAML (>=6.0.1,<7.0.0)
Requires-Dist: Red-Commons (>=1.0.0,<2.0.0) ; extra == "nored" or extra == "all-nored"
Requires-Dist: Red-DiscordBot (>=3.5.9,<4.0.0) ; extra == "docs"
Requires-Dist: aiohttp-client-cache (>=0.11.0,<0.12.0)
Requires-Dist: aiohttp[speedups] (==3.9.3) ; extra == "nored" or extra == "all-nored"
Requires-Dist: aiopath (==0.6.11)
Requires-Dist: apsw (==3.45.2.0) ; extra == "nored" or extra == "all-nored"
Requires-Dist: asyncpg (>=0.29.0,<0.30.0)
Requires-Dist: asyncspotify (>=0.12.1,<0.13.0)
Requires-Dist: asyncstdlib (>=3.12.3,<4.0.0)
Requires-Dist: cached-property (>=1.5.2,<2.0.0)
Requires-Dist: cashews[dill,redis] (>=7.0.2,<8.0.0)
Requires-Dist: dacite (>=1.8.1,<2.0.0)
Requires-Dist: deepdiff6 (>=6.2.0,<7.0.0)
Requires-Dist: expiringdict (>=1.2.2,<2.0.0)
Requires-Dist: furo (>=2024.4.27,<2025.0.0) ; extra == "docs"
Requires-Dist: humanize (>=4.9.0,<5.0.0)
Requires-Dist: importlib-metadata (>=7.1.0,<8.0.0) ; extra == "nored" or extra == "all-nored"
Requires-Dist: iso8601 (>=2.1.0,<3.0.0)
Requires-Dist: mutagen (>=1.47.0,<2.0.0)
Requires-Dist: netaddr (>=1.2.1,<2.0.0)
Requires-Dist: numpy (>=1.26.4,<2.0.0)
Requires-Dist: olefile (>=0.47,<0.48) ; extra == "docs"
Requires-Dist: orjson (==3.10.0) ; extra == "nored" or extra == "all-nored" or extra == "all-nored"
Requires-Dist: packaging (>=24.0,<25.0) ; extra == "nored" or extra == "all-nored"
Requires-Dist: piccolo[all] (>=1.5.0,<2.0.0)
Requires-Dist: pip (>=24.0,<25.0)
Requires-Dist: platformdirs (==4.2.0) ; extra == "nored" or extra == "all-nored"
Requires-Dist: psutil (>=5.9.8,<6.0.0) ; extra == "nored" or extra == "all-nored"
Requires-Dist: python-dateutil (>=2.9.0.post0,<3.0.0) ; extra == "nored" or extra == "all-nored"
Requires-Dist: pytz (>=2024.1,<2025.0) ; extra == "nored" or extra == "all-nored"
Requires-Dist: rapidfuzz (==3.7.0) ; extra == "nored" or extra == "all-nored"
Requires-Dist: redis (>=5.0.4,<6.0.0) ; extra == "redis" or extra == "all" or extra == "all-nored"
Requires-Dist: rich (>=13.7.1,<14.0.0) ; extra == "nored" or extra == "all-nored"
Requires-Dist: sphinx-copybutton (>=0.5.2,<0.6.0) ; extra == "docs"
Requires-Dist: sphinx-inline-tabs (>=2023.4.21,<2024.0.0) ; extra == "docs"
Requires-Dist: sphinx-issues (>=4.1.0,<5.0.0) ; extra == "docs"
Requires-Dist: sphinx-removed-in (>=0.2.2,<0.3.0) ; extra == "docs"
Requires-Dist: sphinx_rtd_theme (>=2.0.0,<3.0.0) ; extra == "docs"
Requires-Dist: tabulate[widechars] (>=0.9.0,<0.10.0)
Requires-Dist: typing-extensions (==4.10.0) ; extra == "nored" or extra == "all-nored"
Requires-Dist: ujson (>=5.9.0,<6.0.0)
Requires-Dist: uvloop (>=0.19.0,<0.20.0) ; (sys_platform != "win32" and platform_python_implementation == "CPython") and (extra == "nored" or extra == "all-nored")
Requires-Dist: watchfiles (>=0.21.0,<0.22.0)
Requires-Dist: wheel (>=0.43.0,<0.44.0)
Project-URL: Bug Tracker, https://github.com/PyLav/PyLav/issues
Project-URL: Documentation, https://pylav.readthedocs.io/en/latest/
Project-URL: Repository, https://github.com/PyLav/PyLav
Description-Content-Type: text/markdown

[![GitHub license](https://img.shields.io/github/license/PyLav/PyLav.svg)](https://github.com/PyLav/PyLav/blob/develop/LICENSE)
[![Support Server](https://img.shields.io/discord/970987707834720266)](https://discord.com/invite/vnmcXqtgeY)
[![PyPi](https://img.shields.io/pypi/v/Py-Lav?style=plastic)](https://pypi.org/project/Py-Lav/)
[![Crowdin](https://badges.crowdin.net/pylav/localized.svg)](https://crowdin.com/project/pylav)
[![Documentation Status](https://readthedocs.org/projects/pylav/badge/?version=stable)](https://pylav.readthedocs.io/en/stable/?badge=stable)


# Documentation
### Installation
 - [Click Here](SETUP.md)
---------------------------
### Requirements
- PostgresSQL 14 server
  - MacOS: [PostgresSQL](https://www.postgresql.org/download/macosx/)
  - Windows: [PostgresSQL](https://www.postgresql.org/download/windows/)
  - Linux: [PostgresSQL](https://www.postgresql.org/download/linux/)
- Python 3.11
- [Discord.py](https://github.com/Rapptz/discord.py) 2.1.0+ bot
- [Lavalink](https://github.com/lavalink-devs/Lavalink) v4.0.0+ server
---------------------------
## Supported sources
### [Built-in](https://github.com/lavalink-devs/Lavalink):
  - youtube (Deprecated with LL 4.0.5)
  - soundcloud
  - bandcamp
  - twitch
  - vimeo
  - http
  - local
### With [YouTube-plugin](https://github.com/lavalink-devs/youtube-source):
- youtube
### With [LavaSrc](https://github.com/topi314/LavaSrc)
  - spotify
  - applemusic
  - deezer
  - youtube
  - flowery-tts
### With [DuncteBot-plugin](https://github.com/DuncteBot/skybot-lavalink-plugin):
  - getyarn.io
  - clypit
  - tts
  - pornhub
  - reddit
  - ocremix
  - tiktok
  - mixcloud
  - soundgasm
### With [Google Cloud TTS](https://github.com/DuncteBot/tts-plugin):
  - gcloud-tts
### With [Sponsorblock-Plugin](https://github.com/topi314/Sponsorblock-Plugin):
  - sponsorblock
### With [LavaSearch](https://github.com/topi314/LavaSearch):
### With [LavaLyrics](https://github.com/topi314/LavaLyrics):

## Supported Lavalink features
  - Supports all features of [Lavalink](https://github.com/lavalink-devs/Lavalink)
    - Filters
    - IP Rotation
    - Plug-ins

Features
---------------------------
- Multiple node support
  - Node region assignment based on IP
- Track cache for the last 30 days to reduce the number of duplicated queries
- Managed local node with auto-restart and auto update
- Many helper methods and functions
- Support for multiple cogs to access the library at once
- Playlists and EQ saved at a library level to be shared with cogs
- Player state persistence
    - Upon library state being shutdown all player states are saved and restored on library startup
- History of played tracks available for players
- RadioBrowser.org API to retrieve radio stations available for players
- M3U, PLS and PYLAV text file parser to convert contents into a playlist (p.s. Lavalink must support the format/coded of files still)

System Requirements
------------------------------------
With a locally hosted Postgres server and locally hosted/managed lavalink node (**recommended - Best performance**):
- CPU: 3 cores or more
- RAM: 4GB or more
- Disk Space: 10GB or more (NVME Ideally, SSD OK)

With a locally hosted Postgres server and externally hosted lavalink node (Okay performance):
- CPU: 2 cores or more
- RAM: 3GB or more
- Disk Space: 10GB or more (NVME Ideally, SSD OK)

With an externally hosted Postgres server and locally hosted/managed lavalink node (Poor performance):
- CPU: 2 cores or more
- RAM: 2GB or more
- Disk Space: 10GB or more (SSD)

With an externally hosted Postgres server and externally hosted lavalink node (Worst performance):
- CPU: 1 cores or more
- RAM: 1GB or more
- Disk Space: 10GB or more (SSD)

Credits
---------------------------
- [Topi](https://github.com/topi314) for all the work done to Lavalink and implementing direct requests to make PyLav even better.
- [Devoxin - Lavalink.py](https://github.com/Devoxin/Lavalink.py) for the original ideas for implementation.
- [globocom/m3u8](https://github.com/globocom/m3u8) for the M3U8 parser which I made asynchronous found in [m3u8_parser](pylav/extension/m3u).
- [andreztz/pyradios](https://github.com/andreztz/pyradios) for the radio parser which I made asynchronous found in [radio](pylav/extension/radio).
- [Lifeismana](https://github.com/Lifeismana) for the custom Red-DiscordBot docker image which added Python3.11 support until Phasecore's image is updated.

