Playlist
========
.. versionadded:: 2.0.0
This cog adds the possibility to have as many playlists per user as you want.
It is compatible with the Music cog: see :ref:`cogs/playlist:music cog integration`.
.. hint::
To enable this cog, set the :envvar:`ENABLE_PLAYLISTS` variable.
Packages
--------
The :py:mod:`asyncpg` package is used to connect to the PostgreSQL database.
The :py:mod:`yt-dlp` package is used to get validate the URL given
and get the song information from Youtube.
env variables
-------------
.. csv-table::
:file: playlist-vars.csv
:header-rows: 1
:delim: ,
Creating the database
---------------------
This cog uses `PostgreSQL `_,
a "powerful, open source object-relational database system".
Its documentation is quite detailed, don't hesitate to check it out when in doubt.
A quick guide on setting up PostgreSQL can be found at
``_.
For this cog, the steps to follow are:
1. Install PostgreSQL: check its `downloads page `_.
If you haven't installed PostgreSQL before, I recommend using version 13
since it's the one I used to develop this cog.
2. Switch to user ``postgres`` with:
.. code-block:: bash
sudo su postgres
3. Create a new role. You can use any username you want. Use the command:
.. code-block:: bash
createuser -P -D -R -S
This creates a role named username. It requires creating a password (``-P``).
The role cannot create databases (``-D``), roles (``-R``) and won't be a superuser (``-S``).
4. Launch the CLI with the ``psql`` command (while still connected as user ``postgres``).
5. Create the database.
You can use any name (except ``songs``, ``playlists`` or ``songs_in_playlists``
to avoid any confusion).
You can name it ``music`` for example. Use the command:
.. code-block:: psql
CREATE DATABASE OWNER ;
Where ``username`` is the name of the user created in step 3.
6. You can now exit the CLI with ``\q`` and return to your usual user with ``exit``.
7. Set the ``.env`` variables starting with :envvar:`DB_MUSIC`:
- :envvar:`HOST` should be ``localhost``.
- :envvar:`USER` is the name of the user you created in step 3.
- :envvar:`PASSWORD` is that user's password.
- :envvar:`DATABASE` is the name of the database (``music`` in the example).
- :envvar:`PORT` is the port used to connect to the database. By default, its 5432.
8. Once the variables are set, use ``config.py`` to create the tables needed by the cog:
.. tab:: Unix (Linux/MacOS)
.. code-block:: bash
python3 config.py --database
.. tab:: Windows
.. code-block:: batch
py config.py --database
.. note::
When restarting the computer, you may need to restart the database server.
For Ubuntu, use ``sudo service postgresql start`` to do so.
For distros with ``systemd``, it should be ``sudo systemctl start postgresql``.
Music cog integration
---------------------
Like the Favourites cog, this cog has two commands that use the Music cog:
- ``now`` adds the currently playing song to the default 'favourites' list
or one specified by the user.
- ``play`` queues a playlist or a specific song from a playlist.
It also uses the :py:class:`YTDLSource` class that comes in the Music cog to generate
the :py:class:`Song` to save with ``add``.
This **does not** require enabling the Music cog in order to work.