FINALLY ADDED DOCS

This commit is contained in:
cloudwithax 2021-11-02 20:43:21 -04:00
parent c83e59e91f
commit d9d958266e
42 changed files with 18683 additions and 1 deletions

3
.gitignore vendored
View File

@ -2,4 +2,5 @@
.git/
__pycache/
dist/
pomice.egg-info/
pomice.egg-info/
docs/_build/

20
docs/Makefile Normal file
View File

@ -0,0 +1,20 @@
# Minimal makefile for Sphinx documentation
#
# You can set these variables from the command line, and also
# from the environment for the first two.
SPHINXOPTS ?=
SPHINXBUILD ?= sphinx-build
SOURCEDIR = .
BUILDDIR = _build
# Put it first so that "make" without argument is like "make help".
help:
@$(SPHINXBUILD) -M help "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O)
.PHONY: help Makefile
# Catch-all target: route all unknown targets to Sphinx using the new
# "make mode" option. $(O) is meant as a shortcut for $(SPHINXOPTS).
%: Makefile
@$(SPHINXBUILD) -M $@ "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O)

BIN
docs/_build/doctrees/environment.pickle vendored Normal file

Binary file not shown.

BIN
docs/_build/doctrees/index.doctree vendored Normal file

Binary file not shown.

BIN
docs/_build/doctrees/modules.doctree vendored Normal file

Binary file not shown.

BIN
docs/_build/doctrees/pomice.doctree vendored Normal file

Binary file not shown.

Binary file not shown.

4
docs/_build/html/.buildinfo vendored Normal file
View File

@ -0,0 +1,4 @@
# Sphinx build info version 1
# This file hashes the configuration used when building these files. When it is not found, a full rebuild will be done.
config: 0ed884b921767abe79957ecf5d5887be
tags: 645f666f9bcd5a90fca523b33c5a78b7

112
docs/_build/html/_sources/index.rst.txt vendored Normal file
View File

@ -0,0 +1,112 @@
.. pomice documentation master file, created by
sphinx-quickstart on Tue Nov 2 19:31:07 2021.
You can adapt this file completely to your liking, but it should at least
contain the root `toctree` directive.
Welcome to Pomice!
==================
.. image:: https://raw.githubusercontent.com/cloudwithax/pomice/main/banner.jpg
The modern `Lavalink <https://github.com/freyacodes/Lavalink>`_ wrapper designed for `discord.py <https://github.com/Rapptz/discord.py>`_
Contents
---------
.. toctree::
modules
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 <https://github.com/freyacodes/Lavalink/releases/latest>`_
Quick Jumpstart
----------------
If you want a quick example as to how to start with Pomice, look below:
.. code-block:: python3
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")

View File

@ -0,0 +1,4 @@
.. toctree::
:maxdepth: 4
pomice

View File

@ -0,0 +1,74 @@
Pomice
==============
.. toctree::
:maxdepth: 4
pomice.spotify
Enums
-------------------
.. automodule:: pomice.enums
:members:
:undoc-members:
:show-inheritance:
Events
--------------------
.. automodule:: pomice.events
:members:
:undoc-members:
:show-inheritance:
Exceptions
------------------------
.. automodule:: pomice.exceptions
:members:
:undoc-members:
:show-inheritance:
Filters
---------------------
.. automodule:: pomice.filters
:members:
:undoc-members:
:show-inheritance:
Objects
---------------------
.. automodule:: pomice.objects
:members:
:undoc-members:
:show-inheritance:
Player
--------------------
.. automodule:: pomice.player
:members:
:undoc-members:
:show-inheritance:
Pool
------------------
.. automodule:: pomice.pool
:members:
:undoc-members:
:show-inheritance:
Utils
-------------------
.. automodule:: pomice.utils
:members:
:undoc-members:
:show-inheritance:

View File

@ -0,0 +1,43 @@
Spotify
======================
spotify.Album
---------------------------
.. automodule:: pomice.spotify.album
:members:
:undoc-members:
:show-inheritance:
spotify.Client
----------------------------
.. automodule:: pomice.spotify.client
:members:
:undoc-members:
:show-inheritance:
spotify.Exceptions
--------------------------------
.. automodule:: pomice.spotify.exceptions
:members:
:undoc-members:
:show-inheritance:
spotify.Playlist
------------------------------
.. automodule:: pomice.spotify.playlist
:members:
:undoc-members:
:show-inheritance:
spotify.Track
---------------------------
.. automodule:: pomice.spotify.track
:members:
:undoc-members:
:show-inheritance:

701
docs/_build/html/_static/alabaster.css vendored Normal file
View File

@ -0,0 +1,701 @@
@import url("basic.css");
/* -- page layout ----------------------------------------------------------- */
body {
font-family: Georgia, serif;
font-size: 17px;
background-color: #fff;
color: #000;
margin: 0;
padding: 0;
}
div.document {
width: 940px;
margin: 30px auto 0 auto;
}
div.documentwrapper {
float: left;
width: 100%;
}
div.bodywrapper {
margin: 0 0 0 220px;
}
div.sphinxsidebar {
width: 220px;
font-size: 14px;
line-height: 1.5;
}
hr {
border: 1px solid #B1B4B6;
}
div.body {
background-color: #fff;
color: #3E4349;
padding: 0 30px 0 30px;
}
div.body > .section {
text-align: left;
}
div.footer {
width: 940px;
margin: 20px auto 30px auto;
font-size: 14px;
color: #888;
text-align: right;
}
div.footer a {
color: #888;
}
p.caption {
font-family: inherit;
font-size: inherit;
}
div.relations {
display: none;
}
div.sphinxsidebar a {
color: #444;
text-decoration: none;
border-bottom: 1px dotted #999;
}
div.sphinxsidebar a:hover {
border-bottom: 1px solid #999;
}
div.sphinxsidebarwrapper {
padding: 18px 10px;
}
div.sphinxsidebarwrapper p.logo {
padding: 0;
margin: -10px 0 0 0px;
text-align: center;
}
div.sphinxsidebarwrapper h1.logo {
margin-top: -10px;
text-align: center;
margin-bottom: 5px;
text-align: left;
}
div.sphinxsidebarwrapper h1.logo-name {
margin-top: 0px;
}
div.sphinxsidebarwrapper p.blurb {
margin-top: 0;
font-style: normal;
}
div.sphinxsidebar h3,
div.sphinxsidebar h4 {
font-family: Georgia, serif;
color: #444;
font-size: 24px;
font-weight: normal;
margin: 0 0 5px 0;
padding: 0;
}
div.sphinxsidebar h4 {
font-size: 20px;
}
div.sphinxsidebar h3 a {
color: #444;
}
div.sphinxsidebar p.logo a,
div.sphinxsidebar h3 a,
div.sphinxsidebar p.logo a:hover,
div.sphinxsidebar h3 a:hover {
border: none;
}
div.sphinxsidebar p {
color: #555;
margin: 10px 0;
}
div.sphinxsidebar ul {
margin: 10px 0;
padding: 0;
color: #000;
}
div.sphinxsidebar ul li.toctree-l1 > a {
font-size: 120%;
}
div.sphinxsidebar ul li.toctree-l2 > a {
font-size: 110%;
}
div.sphinxsidebar input {
border: 1px solid #CCC;
font-family: Georgia, serif;
font-size: 1em;
}
div.sphinxsidebar hr {
border: none;
height: 1px;
color: #AAA;
background: #AAA;
text-align: left;
margin-left: 0;
width: 50%;
}
div.sphinxsidebar .badge {
border-bottom: none;
}
div.sphinxsidebar .badge:hover {
border-bottom: none;
}
/* To address an issue with donation coming after search */
div.sphinxsidebar h3.donation {
margin-top: 10px;
}
/* -- body styles ----------------------------------------------------------- */
a {
color: #004B6B;
text-decoration: underline;
}
a:hover {
color: #6D4100;
text-decoration: underline;
}
div.body h1,
div.body h2,
div.body h3,
div.body h4,
div.body h5,
div.body h6 {
font-family: Georgia, serif;
font-weight: normal;
margin: 30px 0px 10px 0px;
padding: 0;
}
div.body h1 { margin-top: 0; padding-top: 0; font-size: 240%; }
div.body h2 { font-size: 180%; }
div.body h3 { font-size: 150%; }
div.body h4 { font-size: 130%; }
div.body h5 { font-size: 100%; }
div.body h6 { font-size: 100%; }
a.headerlink {
color: #DDD;
padding: 0 4px;
text-decoration: none;
}
a.headerlink:hover {
color: #444;
background: #EAEAEA;
}
div.body p, div.body dd, div.body li {
line-height: 1.4em;
}
div.admonition {
margin: 20px 0px;
padding: 10px 30px;
background-color: #EEE;
border: 1px solid #CCC;
}
div.admonition tt.xref, div.admonition code.xref, div.admonition a tt {
background-color: #FBFBFB;
border-bottom: 1px solid #fafafa;
}
div.admonition p.admonition-title {
font-family: Georgia, serif;
font-weight: normal;
font-size: 24px;
margin: 0 0 10px 0;
padding: 0;
line-height: 1;
}
div.admonition p.last {
margin-bottom: 0;
}
div.highlight {
background-color: #fff;
}
dt:target, .highlight {
background: #FAF3E8;
}
div.warning {
background-color: #FCC;
border: 1px solid #FAA;
}
div.danger {
background-color: #FCC;
border: 1px solid #FAA;
-moz-box-shadow: 2px 2px 4px #D52C2C;
-webkit-box-shadow: 2px 2px 4px #D52C2C;
box-shadow: 2px 2px 4px #D52C2C;
}
div.error {
background-color: #FCC;
border: 1px solid #FAA;
-moz-box-shadow: 2px 2px 4px #D52C2C;
-webkit-box-shadow: 2px 2px 4px #D52C2C;
box-shadow: 2px 2px 4px #D52C2C;
}
div.caution {
background-color: #FCC;
border: 1px solid #FAA;
}
div.attention {
background-color: #FCC;
border: 1px solid #FAA;
}
div.important {
background-color: #EEE;
border: 1px solid #CCC;
}
div.note {
background-color: #EEE;
border: 1px solid #CCC;
}
div.tip {
background-color: #EEE;
border: 1px solid #CCC;
}
div.hint {
background-color: #EEE;
border: 1px solid #CCC;
}
div.seealso {
background-color: #EEE;
border: 1px solid #CCC;
}
div.topic {
background-color: #EEE;
}
p.admonition-title {
display: inline;
}
p.admonition-title:after {
content: ":";
}
pre, tt, code {
font-family: 'Consolas', 'Menlo', 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', monospace;
font-size: 0.9em;
}
.hll {
background-color: #FFC;
margin: 0 -12px;
padding: 0 12px;
display: block;
}
img.screenshot {
}
tt.descname, tt.descclassname, code.descname, code.descclassname {
font-size: 0.95em;
}
tt.descname, code.descname {
padding-right: 0.08em;
}
img.screenshot {
-moz-box-shadow: 2px 2px 4px #EEE;
-webkit-box-shadow: 2px 2px 4px #EEE;
box-shadow: 2px 2px 4px #EEE;
}
table.docutils {
border: 1px solid #888;
-moz-box-shadow: 2px 2px 4px #EEE;
-webkit-box-shadow: 2px 2px 4px #EEE;
box-shadow: 2px 2px 4px #EEE;
}
table.docutils td, table.docutils th {
border: 1px solid #888;
padding: 0.25em 0.7em;
}
table.field-list, table.footnote {
border: none;
-moz-box-shadow: none;
-webkit-box-shadow: none;
box-shadow: none;
}
table.footnote {
margin: 15px 0;
width: 100%;
border: 1px solid #EEE;
background: #FDFDFD;
font-size: 0.9em;
}
table.footnote + table.footnote {
margin-top: -15px;
border-top: none;
}
table.field-list th {
padding: 0 0.8em 0 0;
}
table.field-list td {
padding: 0;
}
table.field-list p {
margin-bottom: 0.8em;
}
/* Cloned from
* https://github.com/sphinx-doc/sphinx/commit/ef60dbfce09286b20b7385333d63a60321784e68
*/
.field-name {
-moz-hyphens: manual;
-ms-hyphens: manual;
-webkit-hyphens: manual;
hyphens: manual;
}
table.footnote td.label {
width: .1px;
padding: 0.3em 0 0.3em 0.5em;
}
table.footnote td {
padding: 0.3em 0.5em;
}
dl {
margin: 0;
padding: 0;
}
dl dd {
margin-left: 30px;
}
blockquote {
margin: 0 0 0 30px;
padding: 0;
}
ul, ol {
/* Matches the 30px from the narrow-screen "li > ul" selector below */
margin: 10px 0 10px 30px;
padding: 0;
}
pre {
background: #EEE;
padding: 7px 30px;
margin: 15px 0px;
line-height: 1.3em;
}
div.viewcode-block:target {
background: #ffd;
}
dl pre, blockquote pre, li pre {
margin-left: 0;
padding-left: 30px;
}
tt, code {
background-color: #ecf0f3;
color: #222;
/* padding: 1px 2px; */
}
tt.xref, code.xref, a tt {
background-color: #FBFBFB;
border-bottom: 1px solid #fff;
}
a.reference {
text-decoration: none;
border-bottom: 1px dotted #004B6B;
}
/* Don't put an underline on images */
a.image-reference, a.image-reference:hover {
border-bottom: none;
}
a.reference:hover {
border-bottom: 1px solid #6D4100;
}
a.footnote-reference {
text-decoration: none;
font-size: 0.7em;
vertical-align: top;
border-bottom: 1px dotted #004B6B;
}
a.footnote-reference:hover {
border-bottom: 1px solid #6D4100;
}
a:hover tt, a:hover code {
background: #EEE;
}
@media screen and (max-width: 870px) {
div.sphinxsidebar {
display: none;
}
div.document {
width: 100%;
}
div.documentwrapper {
margin-left: 0;
margin-top: 0;
margin-right: 0;
margin-bottom: 0;
}
div.bodywrapper {
margin-top: 0;
margin-right: 0;
margin-bottom: 0;
margin-left: 0;
}
ul {
margin-left: 0;
}
li > ul {
/* Matches the 30px from the "ul, ol" selector above */
margin-left: 30px;
}
.document {
width: auto;
}
.footer {
width: auto;
}
.bodywrapper {
margin: 0;
}
.footer {
width: auto;
}
.github {
display: none;
}
}
@media screen and (max-width: 875px) {
body {
margin: 0;
padding: 20px 30px;
}
div.documentwrapper {
float: none;
background: #fff;
}
div.sphinxsidebar {
display: block;
float: none;
width: 102.5%;
margin: 50px -30px -20px -30px;
padding: 10px 20px;
background: #333;
color: #FFF;
}
div.sphinxsidebar h3, div.sphinxsidebar h4, div.sphinxsidebar p,
div.sphinxsidebar h3 a {
color: #fff;
}
div.sphinxsidebar a {
color: #AAA;
}
div.sphinxsidebar p.logo {
display: none;
}
div.document {
width: 100%;
margin: 0;
}
div.footer {
display: none;
}
div.bodywrapper {
margin: 0;
}
div.body {
min-height: 0;
padding: 0;
}
.rtd_doc_footer {
display: none;
}
.document {
width: auto;
}
.footer {
width: auto;
}
.footer {
width: auto;
}
.github {
display: none;
}
}
/* misc. */
.revsys-inline {
display: none!important;
}
/* Make nested-list/multi-paragraph items look better in Releases changelog
* pages. Without this, docutils' magical list fuckery causes inconsistent
* formatting between different release sub-lists.
*/
div#changelog > div.section > ul > li > p:only-child {
margin-bottom: 0;
}
/* Hide fugly table cell borders in ..bibliography:: directive output */
table.docutils.citation, table.docutils.citation td, table.docutils.citation th {
border: none;
/* Below needed in some edge cases; if not applied, bottom shadows appear */
-moz-box-shadow: none;
-webkit-box-shadow: none;
box-shadow: none;
}
/* relbar */
.related {
line-height: 30px;
width: 100%;
font-size: 0.9rem;
}
.related.top {
border-bottom: 1px solid #EEE;
margin-bottom: 20px;
}
.related.bottom {
border-top: 1px solid #EEE;
}
.related ul {
padding: 0;
margin: 0;
list-style: none;
}
.related li {
display: inline;
}
nav#rellinks {
float: right;
}
nav#rellinks li+li:before {
content: "|";
}
nav#breadcrumbs li+li:before {
content: "\00BB";
}
/* Hide certain items when printing */
@media print {
div.related {
display: none;
}
}

904
docs/_build/html/_static/basic.css vendored Normal file
View File

@ -0,0 +1,904 @@
/*
* basic.css
* ~~~~~~~~~
*
* Sphinx stylesheet -- basic theme.
*
* :copyright: Copyright 2007-2021 by the Sphinx team, see AUTHORS.
* :license: BSD, see LICENSE for details.
*
*/
/* -- main layout ----------------------------------------------------------- */
div.clearer {
clear: both;
}
div.section::after {
display: block;
content: '';
clear: left;
}
/* -- relbar ---------------------------------------------------------------- */
div.related {
width: 100%;
font-size: 90%;
}
div.related h3 {
display: none;
}
div.related ul {
margin: 0;
padding: 0 0 0 10px;
list-style: none;
}
div.related li {
display: inline;
}
div.related li.right {
float: right;
margin-right: 5px;
}
/* -- sidebar --------------------------------------------------------------- */
div.sphinxsidebarwrapper {
padding: 10px 5px 0 10px;
}
div.sphinxsidebar {
float: left;
width: 230px;
margin-left: -100%;
font-size: 90%;
word-wrap: break-word;
overflow-wrap : break-word;
}
div.sphinxsidebar ul {
list-style: none;
}
div.sphinxsidebar ul ul,
div.sphinxsidebar ul.want-points {
margin-left: 20px;
list-style: square;
}
div.sphinxsidebar ul ul {
margin-top: 0;
margin-bottom: 0;
}
div.sphinxsidebar form {
margin-top: 10px;
}
div.sphinxsidebar input {
border: 1px solid #98dbcc;
font-family: sans-serif;
font-size: 1em;
}
div.sphinxsidebar #searchbox form.search {
overflow: hidden;
}
div.sphinxsidebar #searchbox input[type="text"] {
float: left;
width: 80%;
padding: 0.25em;
box-sizing: border-box;
}
div.sphinxsidebar #searchbox input[type="submit"] {
float: left;
width: 20%;
border-left: none;
padding: 0.25em;
box-sizing: border-box;
}
img {
border: 0;
max-width: 100%;
}
/* -- search page ----------------------------------------------------------- */
ul.search {
margin: 10px 0 0 20px;
padding: 0;
}
ul.search li {
padding: 5px 0 5px 20px;
background-image: url(file.png);
background-repeat: no-repeat;
background-position: 0 7px;
}
ul.search li a {
font-weight: bold;
}
ul.search li p.context {
color: #888;
margin: 2px 0 0 30px;
text-align: left;
}
ul.keywordmatches li.goodmatch a {
font-weight: bold;
}
/* -- index page ------------------------------------------------------------ */
table.contentstable {
width: 90%;
margin-left: auto;
margin-right: auto;
}
table.contentstable p.biglink {
line-height: 150%;
}
a.biglink {
font-size: 1.3em;
}
span.linkdescr {
font-style: italic;
padding-top: 5px;
font-size: 90%;
}
/* -- general index --------------------------------------------------------- */
table.indextable {
width: 100%;
}
table.indextable td {
text-align: left;
vertical-align: top;
}
table.indextable ul {
margin-top: 0;
margin-bottom: 0;
list-style-type: none;
}
table.indextable > tbody > tr > td > ul {
padding-left: 0em;
}
table.indextable tr.pcap {
height: 10px;
}
table.indextable tr.cap {
margin-top: 10px;
background-color: #f2f2f2;
}
img.toggler {
margin-right: 3px;
margin-top: 3px;
cursor: pointer;
}
div.modindex-jumpbox {
border-top: 1px solid #ddd;
border-bottom: 1px solid #ddd;
margin: 1em 0 1em 0;
padding: 0.4em;
}
div.genindex-jumpbox {
border-top: 1px solid #ddd;
border-bottom: 1px solid #ddd;
margin: 1em 0 1em 0;
padding: 0.4em;
}
/* -- domain module index --------------------------------------------------- */
table.modindextable td {
padding: 2px;
border-collapse: collapse;
}
/* -- general body styles --------------------------------------------------- */
div.body {
min-width: 450px;
max-width: 800px;
}
div.body p, div.body dd, div.body li, div.body blockquote {
-moz-hyphens: auto;
-ms-hyphens: auto;
-webkit-hyphens: auto;
hyphens: auto;
}
a.headerlink {
visibility: hidden;
}
a.brackets:before,
span.brackets > a:before{
content: "[";
}
a.brackets:after,
span.brackets > a:after {
content: "]";
}
h1:hover > a.headerlink,
h2:hover > a.headerlink,
h3:hover > a.headerlink,
h4:hover > a.headerlink,
h5:hover > a.headerlink,
h6:hover > a.headerlink,
dt:hover > a.headerlink,
caption:hover > a.headerlink,
p.caption:hover > a.headerlink,
div.code-block-caption:hover > a.headerlink {
visibility: visible;
}
div.body p.caption {
text-align: inherit;
}
div.body td {
text-align: left;
}
.first {
margin-top: 0 !important;
}
p.rubric {
margin-top: 30px;
font-weight: bold;
}
img.align-left, figure.align-left, .figure.align-left, object.align-left {
clear: left;
float: left;
margin-right: 1em;
}
img.align-right, figure.align-right, .figure.align-right, object.align-right {
clear: right;
float: right;
margin-left: 1em;
}
img.align-center, figure.align-center, .figure.align-center, object.align-center {
display: block;
margin-left: auto;
margin-right: auto;
}
img.align-default, figure.align-default, .figure.align-default {
display: block;
margin-left: auto;
margin-right: auto;
}
.align-left {
text-align: left;
}
.align-center {
text-align: center;
}
.align-default {
text-align: center;
}
.align-right {
text-align: right;
}
/* -- sidebars -------------------------------------------------------------- */
div.sidebar,
aside.sidebar {
margin: 0 0 0.5em 1em;
border: 1px solid #ddb;
padding: 7px;
background-color: #ffe;
width: 40%;
float: right;
clear: right;
overflow-x: auto;
}
p.sidebar-title {
font-weight: bold;
}
div.admonition, div.topic, blockquote {
clear: left;
}
/* -- topics ---------------------------------------------------------------- */
div.topic {
border: 1px solid #ccc;
padding: 7px;
margin: 10px 0 10px 0;
}
p.topic-title {
font-size: 1.1em;
font-weight: bold;
margin-top: 10px;
}
/* -- admonitions ----------------------------------------------------------- */
div.admonition {
margin-top: 10px;
margin-bottom: 10px;
padding: 7px;
}
div.admonition dt {
font-weight: bold;
}
p.admonition-title {
margin: 0px 10px 5px 0px;
font-weight: bold;
}
div.body p.centered {
text-align: center;
margin-top: 25px;
}
/* -- content of sidebars/topics/admonitions -------------------------------- */
div.sidebar > :last-child,
aside.sidebar > :last-child,
div.topic > :last-child,
div.admonition > :last-child {
margin-bottom: 0;
}
div.sidebar::after,
aside.sidebar::after,
div.topic::after,
div.admonition::after,
blockquote::after {
display: block;
content: '';
clear: both;
}
/* -- tables ---------------------------------------------------------------- */
table.docutils {
margin-top: 10px;
margin-bottom: 10px;
border: 0;
border-collapse: collapse;
}
table.align-center {
margin-left: auto;
margin-right: auto;
}
table.align-default {
margin-left: auto;
margin-right: auto;
}
table caption span.caption-number {
font-style: italic;
}
table caption span.caption-text {
}
table.docutils td, table.docutils th {
padding: 1px 8px 1px 5px;
border-top: 0;
border-left: 0;
border-right: 0;
border-bottom: 1px solid #aaa;
}
table.footnote td, table.footnote th {
border: 0 !important;
}
th {
text-align: left;
padding-right: 5px;
}
table.citation {
border-left: solid 1px gray;
margin-left: 1px;
}
table.citation td {
border-bottom: none;
}
th > :first-child,
td > :first-child {
margin-top: 0px;
}
th > :last-child,
td > :last-child {
margin-bottom: 0px;
}
/* -- figures --------------------------------------------------------------- */
div.figure, figure {
margin: 0.5em;
padding: 0.5em;
}
div.figure p.caption, figcaption {
padding: 0.3em;
}
div.figure p.caption span.caption-number,
figcaption span.caption-number {
font-style: italic;
}
div.figure p.caption span.caption-text,
figcaption span.caption-text {
}
/* -- field list styles ----------------------------------------------------- */
table.field-list td, table.field-list th {
border: 0 !important;
}
.field-list ul {
margin: 0;
padding-left: 1em;
}
.field-list p {
margin: 0;
}
.field-name {
-moz-hyphens: manual;
-ms-hyphens: manual;
-webkit-hyphens: manual;
hyphens: manual;
}
/* -- hlist styles ---------------------------------------------------------- */
table.hlist {
margin: 1em 0;
}
table.hlist td {
vertical-align: top;
}
/* -- object description styles --------------------------------------------- */
.sig {
font-family: 'Consolas', 'Menlo', 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', monospace;
}
.sig-name, code.descname {
background-color: transparent;
font-weight: bold;
}
.sig-name {
font-size: 1.1em;
}
code.descname {
font-size: 1.2em;
}
.sig-prename, code.descclassname {
background-color: transparent;
}
.optional {
font-size: 1.3em;
}
.sig-paren {
font-size: larger;
}
.sig-param.n {
font-style: italic;
}
/* C++ specific styling */
.sig-inline.c-texpr,
.sig-inline.cpp-texpr {
font-family: unset;
}
.sig.c .k, .sig.c .kt,
.sig.cpp .k, .sig.cpp .kt {
color: #0033B3;
}
.sig.c .m,
.sig.cpp .m {
color: #1750EB;
}
.sig.c .s, .sig.c .sc,
.sig.cpp .s, .sig.cpp .sc {
color: #067D17;
}
/* -- other body styles ----------------------------------------------------- */
ol.arabic {
list-style: decimal;
}
ol.loweralpha {
list-style: lower-alpha;
}
ol.upperalpha {
list-style: upper-alpha;
}
ol.lowerroman {
list-style: lower-roman;
}
ol.upperroman {
list-style: upper-roman;
}
:not(li) > ol > li:first-child > :first-child,
:not(li) > ul > li:first-child > :first-child {
margin-top: 0px;
}
:not(li) > ol > li:last-child > :last-child,
:not(li) > ul > li:last-child > :last-child {
margin-bottom: 0px;
}
ol.simple ol p,
ol.simple ul p,
ul.simple ol p,
ul.simple ul p {
margin-top: 0;
}
ol.simple > li:not(:first-child) > p,
ul.simple > li:not(:first-child) > p {
margin-top: 0;
}
ol.simple p,
ul.simple p {
margin-bottom: 0;
}
dl.footnote > dt,
dl.citation > dt {
float: left;
margin-right: 0.5em;
}
dl.footnote > dd,
dl.citation > dd {
margin-bottom: 0em;
}
dl.footnote > dd:after,
dl.citation > dd:after {
content: "";
clear: both;
}
dl.field-list {
display: grid;
grid-template-columns: fit-content(30%) auto;
}
dl.field-list > dt {
font-weight: bold;
word-break: break-word;
padding-left: 0.5em;
padding-right: 5px;
}
dl.field-list > dt:after {
content: ":";
}
dl.field-list > dd {
padding-left: 0.5em;
margin-top: 0em;
margin-left: 0em;
margin-bottom: 0em;
}
dl {
margin-bottom: 15px;
}
dd > :first-child {
margin-top: 0px;
}
dd ul, dd table {
margin-bottom: 10px;
}
dd {
margin-top: 3px;
margin-bottom: 10px;
margin-left: 30px;
}
dl > dd:last-child,
dl > dd:last-child > :last-child {
margin-bottom: 0;
}
dt:target, span.highlighted {
background-color: #fbe54e;
}
rect.highlighted {
fill: #fbe54e;
}
dl.glossary dt {
font-weight: bold;
font-size: 1.1em;
}
.versionmodified {
font-style: italic;
}
.system-message {
background-color: #fda;
padding: 5px;
border: 3px solid red;
}
.footnote:target {
background-color: #ffa;
}
.line-block {
display: block;
margin-top: 1em;
margin-bottom: 1em;
}
.line-block .line-block {
margin-top: 0;
margin-bottom: 0;
margin-left: 1.5em;
}
.guilabel, .menuselection {
font-family: sans-serif;
}
.accelerator {
text-decoration: underline;
}
.classifier {
font-style: oblique;
}
.classifier:before {
font-style: normal;
margin: 0.5em;
content: ":";
}
abbr, acronym {
border-bottom: dotted 1px;
cursor: help;
}
/* -- code displays --------------------------------------------------------- */
pre {
overflow: auto;
overflow-y: hidden; /* fixes display issues on Chrome browsers */
}
pre, div[class*="highlight-"] {
clear: both;
}
span.pre {
-moz-hyphens: none;
-ms-hyphens: none;
-webkit-hyphens: none;
hyphens: none;
}
div[class*="highlight-"] {
margin: 1em 0;
}
td.linenos pre {
border: 0;
background-color: transparent;
color: #aaa;
}
table.highlighttable {
display: block;
}
table.highlighttable tbody {
display: block;
}
table.highlighttable tr {
display: flex;
}
table.highlighttable td {
margin: 0;
padding: 0;
}
table.highlighttable td.linenos {
padding-right: 0.5em;
}
table.highlighttable td.code {
flex: 1;
overflow: hidden;
}
.highlight .hll {
display: block;
}
div.highlight pre,
table.highlighttable pre {
margin: 0;
}
div.code-block-caption + div {
margin-top: 0;
}
div.code-block-caption {
margin-top: 1em;
padding: 2px 5px;
font-size: small;
}
div.code-block-caption code {
background-color: transparent;
}
table.highlighttable td.linenos,
span.linenos,
div.highlight span.gp { /* gp: Generic.Prompt */
user-select: none;
-webkit-user-select: text; /* Safari fallback only */
-webkit-user-select: none; /* Chrome/Safari */
-moz-user-select: none; /* Firefox */
-ms-user-select: none; /* IE10+ */
}
div.code-block-caption span.caption-number {
padding: 0.1em 0.3em;
font-style: italic;
}
div.code-block-caption span.caption-text {
}
div.literal-block-wrapper {
margin: 1em 0;
}
code.xref, a code {
background-color: transparent;
font-weight: bold;
}
h1 code, h2 code, h3 code, h4 code, h5 code, h6 code {
background-color: transparent;
}
.viewcode-link {
float: right;
}
.viewcode-back {
float: right;
font-family: sans-serif;
}
div.viewcode-block:target {
margin: -1px -10px;
padding: 0 10px;
}
/* -- math display ---------------------------------------------------------- */
img.math {
vertical-align: middle;
}
div.body div.math p {
text-align: center;
}
span.eqno {
float: right;
}
span.eqno a.headerlink {
position: absolute;
z-index: 1;
}
div.math:hover a.headerlink {
visibility: visible;
}
/* -- printout stylesheet --------------------------------------------------- */
@media print {
div.document,
div.documentwrapper,
div.bodywrapper {
margin: 0 !important;
width: 100%;
}
div.sphinxsidebar,
div.related,
div.footer,
#top-link {
display: none;
}
}

1
docs/_build/html/_static/custom.css vendored Normal file
View File

@ -0,0 +1 @@
/* This file intentionally left blank. */

323
docs/_build/html/_static/doctools.js vendored Normal file
View File

@ -0,0 +1,323 @@
/*
* doctools.js
* ~~~~~~~~~~~
*
* Sphinx JavaScript utilities for all documentation.
*
* :copyright: Copyright 2007-2021 by the Sphinx team, see AUTHORS.
* :license: BSD, see LICENSE for details.
*
*/
/**
* select a different prefix for underscore
*/
$u = _.noConflict();
/**
* make the code below compatible with browsers without
* an installed firebug like debugger
if (!window.console || !console.firebug) {
var names = ["log", "debug", "info", "warn", "error", "assert", "dir",
"dirxml", "group", "groupEnd", "time", "timeEnd", "count", "trace",
"profile", "profileEnd"];
window.console = {};
for (var i = 0; i < names.length; ++i)
window.console[names[i]] = function() {};
}
*/
/**
* small helper function to urldecode strings
*
* See https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/decodeURIComponent#Decoding_query_parameters_from_a_URL
*/
jQuery.urldecode = function(x) {
if (!x) {
return x
}
return decodeURIComponent(x.replace(/\+/g, ' '));
};
/**
* small helper function to urlencode strings
*/
jQuery.urlencode = encodeURIComponent;
/**
* This function returns the parsed url parameters of the
* current request. Multiple values per key are supported,
* it will always return arrays of strings for the value parts.
*/
jQuery.getQueryParameters = function(s) {
if (typeof s === 'undefined')
s = document.location.search;
var parts = s.substr(s.indexOf('?') + 1).split('&');
var result = {};
for (var i = 0; i < parts.length; i++) {
var tmp = parts[i].split('=', 2);
var key = jQuery.urldecode(tmp[0]);
var value = jQuery.urldecode(tmp[1]);
if (key in result)
result[key].push(value);
else
result[key] = [value];
}
return result;
};
/**
* highlight a given string on a jquery object by wrapping it in
* span elements with the given class name.
*/
jQuery.fn.highlightText = function(text, className) {
function highlight(node, addItems) {
if (node.nodeType === 3) {
var val = node.nodeValue;
var pos = val.toLowerCase().indexOf(text);
if (pos >= 0 &&
!jQuery(node.parentNode).hasClass(className) &&
!jQuery(node.parentNode).hasClass("nohighlight")) {
var span;
var isInSVG = jQuery(node).closest("body, svg, foreignObject").is("svg");
if (isInSVG) {
span = document.createElementNS("http://www.w3.org/2000/svg", "tspan");
} else {
span = document.createElement("span");
span.className = className;
}
span.appendChild(document.createTextNode(val.substr(pos, text.length)));
node.parentNode.insertBefore(span, node.parentNode.insertBefore(
document.createTextNode(val.substr(pos + text.length)),
node.nextSibling));
node.nodeValue = val.substr(0, pos);
if (isInSVG) {
var rect = document.createElementNS("http://www.w3.org/2000/svg", "rect");
var bbox = node.parentElement.getBBox();
rect.x.baseVal.value = bbox.x;
rect.y.baseVal.value = bbox.y;
rect.width.baseVal.value = bbox.width;
rect.height.baseVal.value = bbox.height;
rect.setAttribute('class', className);
addItems.push({
"parent": node.parentNode,
"target": rect});
}
}
}
else if (!jQuery(node).is("button, select, textarea")) {
jQuery.each(node.childNodes, function() {
highlight(this, addItems);
});
}
}
var addItems = [];
var result = this.each(function() {
highlight(this, addItems);
});
for (var i = 0; i < addItems.length; ++i) {
jQuery(addItems[i].parent).before(addItems[i].target);
}
return result;
};
/*
* backward compatibility for jQuery.browser
* This will be supported until firefox bug is fixed.
*/
if (!jQuery.browser) {
jQuery.uaMatch = function(ua) {
ua = ua.toLowerCase();
var match = /(chrome)[ \/]([\w.]+)/.exec(ua) ||
/(webkit)[ \/]([\w.]+)/.exec(ua) ||
/(opera)(?:.*version|)[ \/]([\w.]+)/.exec(ua) ||
/(msie) ([\w.]+)/.exec(ua) ||
ua.indexOf("compatible") < 0 && /(mozilla)(?:.*? rv:([\w.]+)|)/.exec(ua) ||
[];
return {
browser: match[ 1 ] || "",
version: match[ 2 ] || "0"
};
};
jQuery.browser = {};
jQuery.browser[jQuery.uaMatch(navigator.userAgent).browser] = true;
}
/**
* Small JavaScript module for the documentation.
*/
var Documentation = {
init : function() {
this.fixFirefoxAnchorBug();
this.highlightSearchWords();
this.initIndexTable();
if (DOCUMENTATION_OPTIONS.NAVIGATION_WITH_KEYS) {
this.initOnKeyListeners();
}
},
/**
* i18n support
*/
TRANSLATIONS : {},
PLURAL_EXPR : function(n) { return n === 1 ? 0 : 1; },
LOCALE : 'unknown',
// gettext and ngettext don't access this so that the functions
// can safely bound to a different name (_ = Documentation.gettext)
gettext : function(string) {
var translated = Documentation.TRANSLATIONS[string];
if (typeof translated === 'undefined')
return string;
return (typeof translated === 'string') ? translated : translated[0];
},
ngettext : function(singular, plural, n) {
var translated = Documentation.TRANSLATIONS[singular];
if (typeof translated === 'undefined')
return (n == 1) ? singular : plural;
return translated[Documentation.PLURALEXPR(n)];
},
addTranslations : function(catalog) {
for (var key in catalog.messages)
this.TRANSLATIONS[key] = catalog.messages[key];
this.PLURAL_EXPR = new Function('n', 'return +(' + catalog.plural_expr + ')');
this.LOCALE = catalog.locale;
},
/**
* add context elements like header anchor links
*/
addContextElements : function() {
$('div[id] > :header:first').each(function() {
$('<a class="headerlink">\u00B6</a>').
attr('href', '#' + this.id).
attr('title', _('Permalink to this headline')).
appendTo(this);
});
$('dt[id]').each(function() {
$('<a class="headerlink">\u00B6</a>').
attr('href', '#' + this.id).
attr('title', _('Permalink to this definition')).
appendTo(this);
});
},
/**
* workaround a firefox stupidity
* see: https://bugzilla.mozilla.org/show_bug.cgi?id=645075
*/
fixFirefoxAnchorBug : function() {
if (document.location.hash && $.browser.mozilla)
window.setTimeout(function() {
document.location.href += '';
}, 10);
},
/**
* highlight the search words provided in the url in the text
*/
highlightSearchWords : function() {
var params = $.getQueryParameters();
var terms = (params.highlight) ? params.highlight[0].split(/\s+/) : [];
if (terms.length) {
var body = $('div.body');
if (!body.length) {
body = $('body');
}
window.setTimeout(function() {
$.each(terms, function() {
body.highlightText(this.toLowerCase(), 'highlighted');
});
}, 10);
$('<p class="highlight-link"><a href="javascript:Documentation.' +
'hideSearchWords()">' + _('Hide Search Matches') + '</a></p>')
.appendTo($('#searchbox'));
}
},
/**
* init the domain index toggle buttons
*/
initIndexTable : function() {
var togglers = $('img.toggler').click(function() {
var src = $(this).attr('src');
var idnum = $(this).attr('id').substr(7);
$('tr.cg-' + idnum).toggle();
if (src.substr(-9) === 'minus.png')
$(this).attr('src', src.substr(0, src.length-9) + 'plus.png');
else
$(this).attr('src', src.substr(0, src.length-8) + 'minus.png');
}).css('display', '');
if (DOCUMENTATION_OPTIONS.COLLAPSE_INDEX) {
togglers.click();
}
},
/**
* helper function to hide the search marks again
*/
hideSearchWords : function() {
$('#searchbox .highlight-link').fadeOut(300);
$('span.highlighted').removeClass('highlighted');
},
/**
* make the url absolute
*/
makeURL : function(relativeURL) {
return DOCUMENTATION_OPTIONS.URL_ROOT + '/' + relativeURL;
},
/**
* get the current relative url
*/
getCurrentURL : function() {
var path = document.location.pathname;
var parts = path.split(/\//);
$.each(DOCUMENTATION_OPTIONS.URL_ROOT.split(/\//), function() {
if (this === '..')
parts.pop();
});
var url = parts.join('/');
return path.substring(url.lastIndexOf('/') + 1, path.length - 1);
},
initOnKeyListeners: function() {
$(document).keydown(function(event) {
var activeElementType = document.activeElement.tagName;
// don't navigate when in search box, textarea, dropdown or button
if (activeElementType !== 'TEXTAREA' && activeElementType !== 'INPUT' && activeElementType !== 'SELECT'
&& activeElementType !== 'BUTTON' && !event.altKey && !event.ctrlKey && !event.metaKey
&& !event.shiftKey) {
switch (event.keyCode) {
case 37: // left
var prevHref = $('link[rel="prev"]').prop('href');
if (prevHref) {
window.location.href = prevHref;
return false;
}
break;
case 39: // right
var nextHref = $('link[rel="next"]').prop('href');
if (nextHref) {
window.location.href = nextHref;
return false;
}
break;
}
}
});
}
};
// quick alias for translations
_ = Documentation.gettext;
$(document).ready(function() {
Documentation.init();
});

View File

@ -0,0 +1,12 @@
var DOCUMENTATION_OPTIONS = {
URL_ROOT: document.getElementById("documentation_options").getAttribute('data-url_root'),
VERSION: '1.1.1',
LANGUAGE: 'None',
COLLAPSE_INDEX: false,
BUILDER: 'html',
FILE_SUFFIX: '.html',
LINK_SUFFIX: '.html',
HAS_SOURCE: true,
SOURCELINK_SUFFIX: '.txt',
NAVIGATION_WITH_KEYS: false
};

BIN
docs/_build/html/_static/file.png vendored Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 286 B

10872
docs/_build/html/_static/jquery-3.5.1.js vendored Normal file

File diff suppressed because it is too large Load Diff

2
docs/_build/html/_static/jquery.js vendored Normal file

File diff suppressed because one or more lines are too long

View File

@ -0,0 +1,297 @@
/*
* language_data.js
* ~~~~~~~~~~~~~~~~
*
* This script contains the language-specific data used by searchtools.js,
* namely the list of stopwords, stemmer, scorer and splitter.
*
* :copyright: Copyright 2007-2021 by the Sphinx team, see AUTHORS.
* :license: BSD, see LICENSE for details.
*
*/
var stopwords = ["a","and","are","as","at","be","but","by","for","if","in","into","is","it","near","no","not","of","on","or","such","that","the","their","then","there","these","they","this","to","was","will","with"];
/* Non-minified version is copied as a separate JS file, is available */
/**
* Porter Stemmer
*/
var Stemmer = function() {
var step2list = {
ational: 'ate',
tional: 'tion',
enci: 'ence',
anci: 'ance',
izer: 'ize',
bli: 'ble',
alli: 'al',
entli: 'ent',
eli: 'e',
ousli: 'ous',
ization: 'ize',
ation: 'ate',
ator: 'ate',
alism: 'al',
iveness: 'ive',
fulness: 'ful',
ousness: 'ous',
aliti: 'al',
iviti: 'ive',
biliti: 'ble',
logi: 'log'
};
var step3list = {
icate: 'ic',
ative: '',
alize: 'al',
iciti: 'ic',
ical: 'ic',
ful: '',
ness: ''
};
var c = "[^aeiou]"; // consonant
var v = "[aeiouy]"; // vowel
var C = c + "[^aeiouy]*"; // consonant sequence
var V = v + "[aeiou]*"; // vowel sequence
var mgr0 = "^(" + C + ")?" + V + C; // [C]VC... is m>0
var meq1 = "^(" + C + ")?" + V + C + "(" + V + ")?$"; // [C]VC[V] is m=1
var mgr1 = "^(" + C + ")?" + V + C + V + C; // [C]VCVC... is m>1
var s_v = "^(" + C + ")?" + v; // vowel in stem
this.stemWord = function (w) {
var stem;
var suffix;
var firstch;
var origword = w;
if (w.length < 3)
return w;
var re;
var re2;
var re3;
var re4;
firstch = w.substr(0,1);
if (firstch == "y")
w = firstch.toUpperCase() + w.substr(1);
// Step 1a
re = /^(.+?)(ss|i)es$/;
re2 = /^(.+?)([^s])s$/;
if (re.test(w))
w = w.replace(re,"$1$2");
else if (re2.test(w))
w = w.replace(re2,"$1$2");
// Step 1b
re = /^(.+?)eed$/;
re2 = /^(.+?)(ed|ing)$/;
if (re.test(w)) {
var fp = re.exec(w);
re = new RegExp(mgr0);
if (re.test(fp[1])) {
re = /.$/;
w = w.replace(re,"");
}
}
else if (re2.test(w)) {
var fp = re2.exec(w);
stem = fp[1];
re2 = new RegExp(s_v);
if (re2.test(stem)) {
w = stem;
re2 = /(at|bl|iz)$/;
re3 = new RegExp("([^aeiouylsz])\\1$");
re4 = new RegExp("^" + C + v + "[^aeiouwxy]$");
if (re2.test(w))
w = w + "e";
else if (re3.test(w)) {
re = /.$/;
w = w.replace(re,"");
}
else if (re4.test(w))
w = w + "e";
}
}
// Step 1c
re = /^(.+?)y$/;
if (re.test(w)) {
var fp = re.exec(w);
stem = fp[1];
re = new RegExp(s_v);
if (re.test(stem))
w = stem + "i";
}
// Step 2
re = /^(.+?)(ational|tional|enci|anci|izer|bli|alli|entli|eli|ousli|ization|ation|ator|alism|iveness|fulness|ousness|aliti|iviti|biliti|logi)$/;
if (re.test(w)) {
var fp = re.exec(w);
stem = fp[1];
suffix = fp[2];
re = new RegExp(mgr0);
if (re.test(stem))
w = stem + step2list[suffix];
}
// Step 3
re = /^(.+?)(icate|ative|alize|iciti|ical|ful|ness)$/;
if (re.test(w)) {
var fp = re.exec(w);
stem = fp[1];
suffix = fp[2];
re = new RegExp(mgr0);
if (re.test(stem))
w = stem + step3list[suffix];
}
// Step 4
re = /^(.+?)(al|ance|ence|er|ic|able|ible|ant|ement|ment|ent|ou|ism|ate|iti|ous|ive|ize)$/;
re2 = /^(.+?)(s|t)(ion)$/;
if (re.test(w)) {
var fp = re.exec(w);
stem = fp[1];
re = new RegExp(mgr1);
if (re.test(stem))
w = stem;
}
else if (re2.test(w)) {
var fp = re2.exec(w);
stem = fp[1] + fp[2];
re2 = new RegExp(mgr1);
if (re2.test(stem))
w = stem;
}
// Step 5
re = /^(.+?)e$/;
if (re.test(w)) {
var fp = re.exec(w);
stem = fp[1];
re = new RegExp(mgr1);
re2 = new RegExp(meq1);
re3 = new RegExp("^" + C + v + "[^aeiouwxy]$");
if (re.test(stem) || (re2.test(stem) && !(re3.test(stem))))
w = stem;
}
re = /ll$/;
re2 = new RegExp(mgr1);
if (re.test(w) && re2.test(w)) {
re = /.$/;
w = w.replace(re,"");
}
// and turn initial Y back to y
if (firstch == "y")
w = firstch.toLowerCase() + w.substr(1);
return w;
}
}
var splitChars = (function() {
var result = {};
var singles = [96, 180, 187, 191, 215, 247, 749, 885, 903, 907, 909, 930, 1014, 1648,
1748, 1809, 2416, 2473, 2481, 2526, 2601, 2609, 2612, 2615, 2653, 2702,
2706, 2729, 2737, 2740, 2857, 2865, 2868, 2910, 2928, 2948, 2961, 2971,
2973, 3085, 3089, 3113, 3124, 3213, 3217, 3241, 3252, 3295, 3341, 3345,
3369, 3506, 3516, 3633, 3715, 3721, 3736, 3744, 3748, 3750, 3756, 3761,
3781, 3912, 4239, 4347, 4681, 4695, 4697, 4745, 4785, 4799, 4801, 4823,
4881, 5760, 5901, 5997, 6313, 7405, 8024, 8026, 8028, 8030, 8117, 8125,
8133, 8181, 8468, 8485, 8487, 8489, 8494, 8527, 11311, 11359, 11687, 11695,
11703, 11711, 11719, 11727, 11735, 12448, 12539, 43010, 43014, 43019, 43587,
43696, 43713, 64286, 64297, 64311, 64317, 64319, 64322, 64325, 65141];
var i, j, start, end;
for (i = 0; i < singles.length; i++) {
result[singles[i]] = true;
}
var ranges = [[0, 47], [58, 64], [91, 94], [123, 169], [171, 177], [182, 184], [706, 709],
[722, 735], [741, 747], [751, 879], [888, 889], [894, 901], [1154, 1161],
[1318, 1328], [1367, 1368], [1370, 1376], [1416, 1487], [1515, 1519], [1523, 1568],
[1611, 1631], [1642, 1645], [1750, 1764], [1767, 1773], [1789, 1790], [1792, 1807],
[1840, 1868], [1958, 1968], [1970, 1983], [2027, 2035], [2038, 2041], [2043, 2047],
[2070, 2073], [2075, 2083], [2085, 2087], [2089, 2307], [2362, 2364], [2366, 2383],
[2385, 2391], [2402, 2405], [2419, 2424], [2432, 2436], [2445, 2446], [2449, 2450],
[2483, 2485], [2490, 2492], [2494, 2509], [2511, 2523], [2530, 2533], [2546, 2547],
[2554, 2564], [2571, 2574], [2577, 2578], [2618, 2648], [2655, 2661], [2672, 2673],
[2677, 2692], [2746, 2748], [2750, 2767], [2769, 2783], [2786, 2789], [2800, 2820],
[2829, 2830], [2833, 2834], [2874, 2876], [2878, 2907], [2914, 2917], [2930, 2946],
[2955, 2957], [2966, 2968], [2976, 2978], [2981, 2983], [2987, 2989], [3002, 3023],
[3025, 3045], [3059, 3076], [3130, 3132], [3134, 3159], [3162, 3167], [3170, 3173],
[3184, 3191], [3199, 3204], [3258, 3260], [3262, 3293], [3298, 3301], [3312, 3332],
[3386, 3388], [3390, 3423], [3426, 3429], [3446, 3449], [3456, 3460], [3479, 3481],
[3518, 3519], [3527, 3584], [3636, 3647], [3655, 3663], [3674, 3712], [3717, 3718],
[3723, 3724], [3726, 3731], [3752, 3753], [3764, 3772], [3774, 3775], [3783, 3791],
[3802, 3803], [3806, 3839], [3841, 3871], [3892, 3903], [3949, 3975], [3980, 4095],
[4139, 4158], [4170, 4175], [4182, 4185], [4190, 4192], [4194, 4196], [4199, 4205],
[4209, 4212], [4226, 4237], [4250, 4255], [4294, 4303], [4349, 4351], [4686, 4687],
[4702, 4703], [4750, 4751], [4790, 4791], [4806, 4807], [4886, 4887], [4955, 4968],
[4989, 4991], [5008, 5023], [5109, 5120], [5741, 5742], [5787, 5791], [5867, 5869],
[5873, 5887], [5906, 5919], [5938, 5951], [5970, 5983], [6001, 6015], [6068, 6102],
[6104, 6107], [6109, 6111], [6122, 6127], [6138, 6159], [6170, 6175], [6264, 6271],
[6315, 6319], [6390, 6399], [6429, 6469], [6510, 6511], [6517, 6527], [6572, 6592],
[6600, 6607], [6619, 6655], [6679, 6687], [6741, 6783], [6794, 6799], [6810, 6822],
[6824, 6916], [6964, 6980], [6988, 6991], [7002, 7042], [7073, 7085], [7098, 7167],
[7204, 7231], [7242, 7244], [7294, 7400], [7410, 7423], [7616, 7679], [7958, 7959],
[7966, 7967], [8006, 8007], [8014, 8015], [8062, 8063], [8127, 8129], [8141, 8143],
[8148, 8149], [8156, 8159], [8173, 8177], [8189, 8303], [8306, 8307], [8314, 8318],
[8330, 8335], [8341, 8449], [8451, 8454], [8456, 8457], [8470, 8472], [8478, 8483],
[8506, 8507], [8512, 8516], [8522, 8525], [8586, 9311], [9372, 9449], [9472, 10101],
[10132, 11263], [11493, 11498], [11503, 11516], [11518, 11519], [11558, 11567],
[11622, 11630], [11632, 11647], [11671, 11679], [11743, 11822], [11824, 12292],
[12296, 12320], [12330, 12336], [12342, 12343], [12349, 12352], [12439, 12444],
[12544, 12548], [12590, 12592], [12687, 12689], [12694, 12703], [12728, 12783],
[12800, 12831], [12842, 12880], [12896, 12927], [12938, 12976], [12992, 13311],
[19894, 19967], [40908, 40959], [42125, 42191], [42238, 42239], [42509, 42511],
[42540, 42559], [42592, 42593], [42607, 42622], [42648, 42655], [42736, 42774],
[42784, 42785], [42889, 42890], [42893, 43002], [43043, 43055], [43062, 43071],
[43124, 43137], [43188, 43215], [43226, 43249], [43256, 43258], [43260, 43263],
[43302, 43311], [43335, 43359], [43389, 43395], [43443, 43470], [43482, 43519],
[43561, 43583], [43596, 43599], [43610, 43615], [43639, 43641], [43643, 43647],
[43698, 43700], [43703, 43704], [43710, 43711], [43715, 43738], [43742, 43967],
[44003, 44015], [44026, 44031], [55204, 55215], [55239, 55242], [55292, 55295],
[57344, 63743], [64046, 64047], [64110, 64111], [64218, 64255], [64263, 64274],
[64280, 64284], [64434, 64466], [64830, 64847], [64912, 64913], [64968, 65007],
[65020, 65135], [65277, 65295], [65306, 65312], [65339, 65344], [65371, 65381],
[65471, 65473], [65480, 65481], [65488, 65489], [65496, 65497]];
for (i = 0; i < ranges.length; i++) {
start = ranges[i][0];
end = ranges[i][1];
for (j = start; j <= end; j++) {
result[j] = true;
}
}
return result;
})();
function splitQuery(query) {
var result = [];
var start = -1;
for (var i = 0; i < query.length; i++) {
if (splitChars[query.charCodeAt(i)]) {
if (start !== -1) {
result.push(query.slice(start, i));
start = -1;
}
} else if (start === -1) {
start = i;
}
}
if (start !== -1) {
result.push(query.slice(start));
}
return result;
}

BIN
docs/_build/html/_static/minus.png vendored Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 90 B

BIN
docs/_build/html/_static/plus.png vendored Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 90 B

82
docs/_build/html/_static/pygments.css vendored Normal file
View File

@ -0,0 +1,82 @@
pre { line-height: 125%; }
td.linenos .normal { color: inherit; background-color: transparent; padding-left: 5px; padding-right: 5px; }
span.linenos { color: inherit; background-color: transparent; padding-left: 5px; padding-right: 5px; }
td.linenos .special { color: #000000; background-color: #ffffc0; padding-left: 5px; padding-right: 5px; }
span.linenos.special { color: #000000; background-color: #ffffc0; padding-left: 5px; padding-right: 5px; }
.highlight .hll { background-color: #ffffcc }
.highlight { background: #f8f8f8; }
.highlight .c { color: #8f5902; font-style: italic } /* Comment */
.highlight .err { color: #a40000; border: 1px solid #ef2929 } /* Error */
.highlight .g { color: #000000 } /* Generic */
.highlight .k { color: #004461; font-weight: bold } /* Keyword */
.highlight .l { color: #000000 } /* Literal */
.highlight .n { color: #000000 } /* Name */
.highlight .o { color: #582800 } /* Operator */
.highlight .x { color: #000000 } /* Other */
.highlight .p { color: #000000; font-weight: bold } /* Punctuation */
.highlight .ch { color: #8f5902; font-style: italic } /* Comment.Hashbang */
.highlight .cm { color: #8f5902; font-style: italic } /* Comment.Multiline */
.highlight .cp { color: #8f5902 } /* Comment.Preproc */
.highlight .cpf { color: #8f5902; font-style: italic } /* Comment.PreprocFile */
.highlight .c1 { color: #8f5902; font-style: italic } /* Comment.Single */
.highlight .cs { color: #8f5902; font-style: italic } /* Comment.Special */
.highlight .gd { color: #a40000 } /* Generic.Deleted */
.highlight .ge { color: #000000; font-style: italic } /* Generic.Emph */
.highlight .gr { color: #ef2929 } /* Generic.Error */
.highlight .gh { color: #000080; font-weight: bold } /* Generic.Heading */
.highlight .gi { color: #00A000 } /* Generic.Inserted */
.highlight .go { color: #888888 } /* Generic.Output */
.highlight .gp { color: #745334 } /* Generic.Prompt */
.highlight .gs { color: #000000; font-weight: bold } /* Generic.Strong */
.highlight .gu { color: #800080; font-weight: bold } /* Generic.Subheading */
.highlight .gt { color: #a40000; font-weight: bold } /* Generic.Traceback */
.highlight .kc { color: #004461; font-weight: bold } /* Keyword.Constant */
.highlight .kd { color: #004461; font-weight: bold } /* Keyword.Declaration */
.highlight .kn { color: #004461; font-weight: bold } /* Keyword.Namespace */
.highlight .kp { color: #004461; font-weight: bold } /* Keyword.Pseudo */
.highlight .kr { color: #004461; font-weight: bold } /* Keyword.Reserved */
.highlight .kt { color: #004461; font-weight: bold } /* Keyword.Type */
.highlight .ld { color: #000000 } /* Literal.Date */
.highlight .m { color: #990000 } /* Literal.Number */
.highlight .s { color: #4e9a06 } /* Literal.String */
.highlight .na { color: #c4a000 } /* Name.Attribute */
.highlight .nb { color: #004461 } /* Name.Builtin */
.highlight .nc { color: #000000 } /* Name.Class */
.highlight .no { color: #000000 } /* Name.Constant */
.highlight .nd { color: #888888 } /* Name.Decorator */
.highlight .ni { color: #ce5c00 } /* Name.Entity */
.highlight .ne { color: #cc0000; font-weight: bold } /* Name.Exception */
.highlight .nf { color: #000000 } /* Name.Function */
.highlight .nl { color: #f57900 } /* Name.Label */
.highlight .nn { color: #000000 } /* Name.Namespace */
.highlight .nx { color: #000000 } /* Name.Other */
.highlight .py { color: #000000 } /* Name.Property */
.highlight .nt { color: #004461; font-weight: bold } /* Name.Tag */
.highlight .nv { color: #000000 } /* Name.Variable */
.highlight .ow { color: #004461; font-weight: bold } /* Operator.Word */
.highlight .w { color: #f8f8f8; text-decoration: underline } /* Text.Whitespace */
.highlight .mb { color: #990000 } /* Literal.Number.Bin */
.highlight .mf { color: #990000 } /* Literal.Number.Float */
.highlight .mh { color: #990000 } /* Literal.Number.Hex */
.highlight .mi { color: #990000 } /* Literal.Number.Integer */
.highlight .mo { color: #990000 } /* Literal.Number.Oct */
.highlight .sa { color: #4e9a06 } /* Literal.String.Affix */
.highlight .sb { color: #4e9a06 } /* Literal.String.Backtick */
.highlight .sc { color: #4e9a06 } /* Literal.String.Char */
.highlight .dl { color: #4e9a06 } /* Literal.String.Delimiter */
.highlight .sd { color: #8f5902; font-style: italic } /* Literal.String.Doc */
.highlight .s2 { color: #4e9a06 } /* Literal.String.Double */
.highlight .se { color: #4e9a06 } /* Literal.String.Escape */
.highlight .sh { color: #4e9a06 } /* Literal.String.Heredoc */
.highlight .si { color: #4e9a06 } /* Literal.String.Interpol */
.highlight .sx { color: #4e9a06 } /* Literal.String.Other */
.highlight .sr { color: #4e9a06 } /* Literal.String.Regex */
.highlight .s1 { color: #4e9a06 } /* Literal.String.Single */
.highlight .ss { color: #4e9a06 } /* Literal.String.Symbol */
.highlight .bp { color: #3465a4 } /* Name.Builtin.Pseudo */
.highlight .fm { color: #000000 } /* Name.Function.Magic */
.highlight .vc { color: #000000 } /* Name.Variable.Class */
.highlight .vg { color: #000000 } /* Name.Variable.Global */
.highlight .vi { color: #000000 } /* Name.Variable.Instance */
.highlight .vm { color: #000000 } /* Name.Variable.Magic */
.highlight .il { color: #990000 } /* Literal.Number.Integer.Long */

528
docs/_build/html/_static/searchtools.js vendored Normal file
View File

@ -0,0 +1,528 @@
/*
* searchtools.js
* ~~~~~~~~~~~~~~~~
*
* Sphinx JavaScript utilities for the full-text search.
*
* :copyright: Copyright 2007-2021 by the Sphinx team, see AUTHORS.
* :license: BSD, see LICENSE for details.
*
*/
if (!Scorer) {
/**
* Simple result scoring code.
*/
var Scorer = {
// Implement the following function to further tweak the score for each result
// The function takes a result array [filename, title, anchor, descr, score]
// and returns the new score.
/*
score: function(result) {
return result[4];
},
*/
// query matches the full name of an object
objNameMatch: 11,
// or matches in the last dotted part of the object name
objPartialMatch: 6,
// Additive scores depending on the priority of the object
objPrio: {0: 15, // used to be importantResults
1: 5, // used to be objectResults
2: -5}, // used to be unimportantResults
// Used when the priority is not in the mapping.
objPrioDefault: 0,
// query found in title
title: 15,
partialTitle: 7,
// query found in terms
term: 5,
partialTerm: 2
};
}
if (!splitQuery) {
function splitQuery(query) {
return query.split(/\s+/);
}
}
/**
* Search Module
*/
var Search = {
_index : null,
_queued_query : null,
_pulse_status : -1,
htmlToText : function(htmlString) {
var virtualDocument = document.implementation.createHTMLDocument('virtual');
var htmlElement = $(htmlString, virtualDocument);
htmlElement.find('.headerlink').remove();
docContent = htmlElement.find('[role=main]')[0];
if(docContent === undefined) {
console.warn("Content block not found. Sphinx search tries to obtain it " +
"via '[role=main]'. Could you check your theme or template.");
return "";
}
return docContent.textContent || docContent.innerText;
},
init : function() {
var params = $.getQueryParameters();
if (params.q) {
var query = params.q[0];
$('input[name="q"]')[0].value = query;
this.performSearch(query);
}
},
loadIndex : function(url) {
$.ajax({type: "GET", url: url, data: null,
dataType: "script", cache: true,
complete: function(jqxhr, textstatus) {
if (textstatus != "success") {
document.getElementById("searchindexloader").src = url;
}
}});
},
setIndex : function(index) {
var q;
this._index = index;
if ((q = this._queued_query) !== null) {
this._queued_query = null;
Search.query(q);
}
},
hasIndex : function() {
return this._index !== null;
},
deferQuery : function(query) {
this._queued_query = query;
},
stopPulse : function() {
this._pulse_status = 0;
},
startPulse : function() {
if (this._pulse_status >= 0)
return;
function pulse() {
var i;
Search._pulse_status = (Search._pulse_status + 1) % 4;
var dotString = '';
for (i = 0; i < Search._pulse_status; i++)
dotString += '.';
Search.dots.text(dotString);
if (Search._pulse_status > -1)
window.setTimeout(pulse, 500);
}
pulse();
},
/**
* perform a search for something (or wait until index is loaded)
*/
performSearch : function(query) {
// create the required interface elements
this.out = $('#search-results');
this.title = $('<h2>' + _('Searching') + '</h2>').appendTo(this.out);
this.dots = $('<span></span>').appendTo(this.title);
this.status = $('<p class="search-summary">&nbsp;</p>').appendTo(this.out);
this.output = $('<ul class="search"/>').appendTo(this.out);
$('#search-progress').text(_('Preparing search...'));
this.startPulse();
// index already loaded, the browser was quick!
if (this.hasIndex())
this.query(query);
else
this.deferQuery(query);
},
/**
* execute search (requires search index to be loaded)
*/
query : function(query) {
var i;
// stem the searchterms and add them to the correct list
var stemmer = new Stemmer();
var searchterms = [];
var excluded = [];
var hlterms = [];
var tmp = splitQuery(query);
var objectterms = [];
for (i = 0; i < tmp.length; i++) {
if (tmp[i] !== "") {
objectterms.push(tmp[i].toLowerCase());
}
if ($u.indexOf(stopwords, tmp[i].toLowerCase()) != -1 || tmp[i] === "") {
// skip this "word"
continue;
}
// stem the word
var word = stemmer.stemWord(tmp[i].toLowerCase());
// prevent stemmer from cutting word smaller than two chars
if(word.length < 3 && tmp[i].length >= 3) {
word = tmp[i];
}
var toAppend;
// select the correct list
if (word[0] == '-') {
toAppend = excluded;
word = word.substr(1);
}
else {
toAppend = searchterms;
hlterms.push(tmp[i].toLowerCase());
}
// only add if not already in the list
if (!$u.contains(toAppend, word))
toAppend.push(word);
}
var highlightstring = '?highlight=' + $.urlencode(hlterms.join(" "));
// console.debug('SEARCH: searching for:');
// console.info('required: ', searchterms);
// console.info('excluded: ', excluded);
// prepare search
var terms = this._index.terms;
var titleterms = this._index.titleterms;
// array of [filename, title, anchor, descr, score]
var results = [];
$('#search-progress').empty();
// lookup as object
for (i = 0; i < objectterms.length; i++) {
var others = [].concat(objectterms.slice(0, i),
objectterms.slice(i+1, objectterms.length));
results = results.concat(this.performObjectSearch(objectterms[i], others));
}
// lookup as search terms in fulltext
results = results.concat(this.performTermsSearch(searchterms, excluded, terms, titleterms));
// let the scorer override scores with a custom scoring function
if (Scorer.score) {
for (i = 0; i < results.length; i++)
results[i][4] = Scorer.score(results[i]);
}
// now sort the results by score (in opposite order of appearance, since the
// display function below uses pop() to retrieve items) and then
// alphabetically
results.sort(function(a, b) {
var left = a[4];
var right = b[4];
if (left > right) {
return 1;
} else if (left < right) {
return -1;
} else {
// same score: sort alphabetically
left = a[1].toLowerCase();
right = b[1].toLowerCase();
return (left > right) ? -1 : ((left < right) ? 1 : 0);
}
});
// for debugging
//Search.lastresults = results.slice(); // a copy
//console.info('search results:', Search.lastresults);
// print the results
var resultCount = results.length;
function displayNextItem() {
// results left, load the summary and display it
if (results.length) {
var item = results.pop();
var listItem = $('<li></li>');
var requestUrl = "";
var linkUrl = "";
if (DOCUMENTATION_OPTIONS.BUILDER === 'dirhtml') {
// dirhtml builder
var dirname = item[0] + '/';
if (dirname.match(/\/index\/$/)) {
dirname = dirname.substring(0, dirname.length-6);
} else if (dirname == 'index/') {
dirname = '';
}
requestUrl = DOCUMENTATION_OPTIONS.URL_ROOT + dirname;
linkUrl = requestUrl;
} else {
// normal html builders
requestUrl = DOCUMENTATION_OPTIONS.URL_ROOT + item[0] + DOCUMENTATION_OPTIONS.FILE_SUFFIX;
linkUrl = item[0] + DOCUMENTATION_OPTIONS.LINK_SUFFIX;
}
listItem.append($('<a/>').attr('href',
linkUrl +
highlightstring + item[2]).html(item[1]));
if (item[3]) {
listItem.append($('<span> (' + item[3] + ')</span>'));
Search.output.append(listItem);
setTimeout(function() {
displayNextItem();
}, 5);
} else if (DOCUMENTATION_OPTIONS.HAS_SOURCE) {
$.ajax({url: requestUrl,
dataType: "text",
complete: function(jqxhr, textstatus) {
var data = jqxhr.responseText;
if (data !== '' && data !== undefined) {
var summary = Search.makeSearchSummary(data, searchterms, hlterms);
if (summary) {
listItem.append(summary);
}
}
Search.output.append(listItem);
setTimeout(function() {
displayNextItem();
}, 5);
}});
} else {
// no source available, just display title
Search.output.append(listItem);
setTimeout(function() {
displayNextItem();
}, 5);
}
}
// search finished, update title and status message
else {
Search.stopPulse();
Search.title.text(_('Search Results'));
if (!resultCount)
Search.status.text(_('Your search did not match any documents. Please make sure that all words are spelled correctly and that you\'ve selected enough categories.'));
else
Search.status.text(_('Search finished, found %s page(s) matching the search query.').replace('%s', resultCount));
Search.status.fadeIn(500);
}
}
displayNextItem();
},
/**
* search for object names
*/
performObjectSearch : function(object, otherterms) {
var filenames = this._index.filenames;
var docnames = this._index.docnames;
var objects = this._index.objects;
var objnames = this._index.objnames;
var titles = this._index.titles;
var i;
var results = [];
for (var prefix in objects) {
for (var name in objects[prefix]) {
var fullname = (prefix ? prefix + '.' : '') + name;
var fullnameLower = fullname.toLowerCase()
if (fullnameLower.indexOf(object) > -1) {
var score = 0;
var parts = fullnameLower.split('.');
// check for different match types: exact matches of full name or
// "last name" (i.e. last dotted part)
if (fullnameLower == object || parts[parts.length - 1] == object) {
score += Scorer.objNameMatch;
// matches in last name
} else if (parts[parts.length - 1].indexOf(object) > -1) {
score += Scorer.objPartialMatch;
}
var match = objects[prefix][name];
var objname = objnames[match[1]][2];
var title = titles[match[0]];
// If more than one term searched for, we require other words to be
// found in the name/title/description
if (otherterms.length > 0) {
var haystack = (prefix + ' ' + name + ' ' +
objname + ' ' + title).toLowerCase();
var allfound = true;
for (i = 0; i < otherterms.length; i++) {
if (haystack.indexOf(otherterms[i]) == -1) {
allfound = false;
break;
}
}
if (!allfound) {
continue;
}
}
var descr = objname + _(', in ') + title;
var anchor = match[3];
if (anchor === '')
anchor = fullname;
else if (anchor == '-')
anchor = objnames[match[1]][1] + '-' + fullname;
// add custom score for some objects according to scorer
if (Scorer.objPrio.hasOwnProperty(match[2])) {
score += Scorer.objPrio[match[2]];
} else {
score += Scorer.objPrioDefault;
}
results.push([docnames[match[0]], fullname, '#'+anchor, descr, score, filenames[match[0]]]);
}
}
}
return results;
},
/**
* See https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Regular_Expressions
*/
escapeRegExp : function(string) {
return string.replace(/[.*+\-?^${}()|[\]\\]/g, '\\$&'); // $& means the whole matched string
},
/**
* search for full-text terms in the index
*/
performTermsSearch : function(searchterms, excluded, terms, titleterms) {
var docnames = this._index.docnames;
var filenames = this._index.filenames;
var titles = this._index.titles;
var i, j, file;
var fileMap = {};
var scoreMap = {};
var results = [];
// perform the search on the required terms
for (i = 0; i < searchterms.length; i++) {
var word = searchterms[i];
var files = [];
var _o = [
{files: terms[word], score: Scorer.term},
{files: titleterms[word], score: Scorer.title}
];
// add support for partial matches
if (word.length > 2) {
var word_regex = this.escapeRegExp(word);
for (var w in terms) {
if (w.match(word_regex) && !terms[word]) {
_o.push({files: terms[w], score: Scorer.partialTerm})
}
}
for (var w in titleterms) {
if (w.match(word_regex) && !titleterms[word]) {
_o.push({files: titleterms[w], score: Scorer.partialTitle})
}
}
}
// no match but word was a required one
if ($u.every(_o, function(o){return o.files === undefined;})) {
break;
}
// found search word in contents
$u.each(_o, function(o) {
var _files = o.files;
if (_files === undefined)
return
if (_files.length === undefined)
_files = [_files];
files = files.concat(_files);
// set score for the word in each file to Scorer.term
for (j = 0; j < _files.length; j++) {
file = _files[j];
if (!(file in scoreMap))
scoreMap[file] = {};
scoreMap[file][word] = o.score;
}
});
// create the mapping
for (j = 0; j < files.length; j++) {
file = files[j];
if (file in fileMap && fileMap[file].indexOf(word) === -1)
fileMap[file].push(word);
else
fileMap[file] = [word];
}
}
// now check if the files don't contain excluded terms
for (file in fileMap) {
var valid = true;
// check if all requirements are matched
var filteredTermCount = // as search terms with length < 3 are discarded: ignore
searchterms.filter(function(term){return term.length > 2}).length
if (
fileMap[file].length != searchterms.length &&
fileMap[file].length != filteredTermCount
) continue;
// ensure that none of the excluded terms is in the search result
for (i = 0; i < excluded.length; i++) {
if (terms[excluded[i]] == file ||
titleterms[excluded[i]] == file ||
$u.contains(terms[excluded[i]] || [], file) ||
$u.contains(titleterms[excluded[i]] || [], file)) {
valid = false;
break;
}
}
// if we have still a valid result we can add it to the result list
if (valid) {
// select one (max) score for the file.
// for better ranking, we should calculate ranking by using words statistics like basic tf-idf...
var score = $u.max($u.map(fileMap[file], function(w){return scoreMap[file][w]}));
results.push([docnames[file], titles[file], '', null, score, filenames[file]]);
}
}
return results;
},
/**
* helper function to return a node containing the
* search summary for a given text. keywords is a list
* of stemmed words, hlwords is the list of normal, unstemmed
* words. the first one is used to find the occurrence, the
* latter for highlighting it.
*/
makeSearchSummary : function(htmlText, keywords, hlwords) {
var text = Search.htmlToText(htmlText);
if (text == "") {
return null;
}
var textLower = text.toLowerCase();
var start = 0;
$.each(keywords, function() {
var i = textLower.indexOf(this.toLowerCase());
if (i > -1)
start = i;
});
start = Math.max(start - 120, 0);
var excerpt = ((start > 0) ? '...' : '') +
$.trim(text.substr(start, 240)) +
((start + 240 - text.length) ? '...' : '');
var rv = $('<p class="context"></p>').text(excerpt);
$.each(hlwords, function() {
rv = rv.highlightText(this, 'highlighted');
});
return rv;
}
};
$(document).ready(function() {
Search.init();
});

File diff suppressed because it is too large Load Diff

File diff suppressed because one or more lines are too long

631
docs/_build/html/genindex.html vendored Normal file
View File

@ -0,0 +1,631 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Index &#8212; Pomice 1.1.1 documentation</title>
<link rel="stylesheet" type="text/css" href="_static/pygments.css" />
<link rel="stylesheet" type="text/css" href="_static/alabaster.css" />
<script data-url_root="./" id="documentation_options" src="_static/documentation_options.js"></script>
<script src="_static/jquery.js"></script>
<script src="_static/underscore.js"></script>
<script src="_static/doctools.js"></script>
<link rel="index" title="Index" href="#" />
<link rel="search" title="Search" href="search.html" />
<link rel="stylesheet" href="_static/custom.css" type="text/css" />
<meta name="viewport" content="width=device-width, initial-scale=0.9, maximum-scale=0.9" />
</head><body>
<div class="document">
<div class="documentwrapper">
<div class="bodywrapper">
<div class="body" role="main">
<h1 id="index">Index</h1>
<div class="genindex-jumpbox">
<a href="#A"><strong>A</strong></a>
| <a href="#B"><strong>B</strong></a>
| <a href="#C"><strong>C</strong></a>
| <a href="#D"><strong>D</strong></a>
| <a href="#E"><strong>E</strong></a>
| <a href="#F"><strong>F</strong></a>
| <a href="#G"><strong>G</strong></a>
| <a href="#H"><strong>H</strong></a>
| <a href="#I"><strong>I</strong></a>
| <a href="#K"><strong>K</strong></a>
| <a href="#L"><strong>L</strong></a>
| <a href="#M"><strong>M</strong></a>
| <a href="#N"><strong>N</strong></a>
| <a href="#O"><strong>O</strong></a>
| <a href="#P"><strong>P</strong></a>
| <a href="#R"><strong>R</strong></a>
| <a href="#S"><strong>S</strong></a>
| <a href="#T"><strong>T</strong></a>
| <a href="#U"><strong>U</strong></a>
| <a href="#V"><strong>V</strong></a>
| <a href="#W"><strong>W</strong></a>
| <a href="#Y"><strong>Y</strong></a>
</div>
<h2 id="A">A</h2>
<table style="width: 100%" class="indextable genindextable"><tr>
<td style="width: 33%; vertical-align: top;"><ul>
<li><a href="pomice.spotify.html#pomice.spotify.album.Album">Album (class in pomice.spotify.album)</a>
</li>
</ul></td>
</tr></table>
<h2 id="B">B</h2>
<table style="width: 100%" class="indextable genindextable"><tr>
<td style="width: 33%; vertical-align: top;"><ul>
<li><a href="pomice.html#pomice.player.Player.bot">bot (pomice.player.Player property)</a>
<ul>
<li><a href="pomice.html#pomice.pool.Node.bot">(pomice.pool.Node property)</a>
</li>
</ul></li>
</ul></td>
<td style="width: 33%; vertical-align: top;"><ul>
<li><a href="pomice.html#pomice.pool.Node.build_track">build_track() (pomice.pool.Node method)</a>
</li>
</ul></td>
</tr></table>
<h2 id="C">C</h2>
<table style="width: 100%" class="indextable genindextable"><tr>
<td style="width: 33%; vertical-align: top;"><ul>
<li><a href="pomice.html#pomice.filters.ChannelMix">ChannelMix (class in pomice.filters)</a>
</li>
<li><a href="pomice.spotify.html#pomice.spotify.client.Client">Client (class in pomice.spotify.client)</a>
</li>
<li><a href="pomice.html#pomice.player.Player.connect">connect() (pomice.player.Player method)</a>
<ul>
<li><a href="pomice.html#pomice.pool.Node.connect">(pomice.pool.Node method)</a>
</li>
</ul></li>
</ul></td>
<td style="width: 33%; vertical-align: top;"><ul>
<li><a href="pomice.html#pomice.pool.NodePool.create_node">create_node() (pomice.pool.NodePool class method)</a>
</li>
<li><a href="pomice.html#pomice.player.Player.current">current (pomice.player.Player property)</a>
</li>
</ul></td>
</tr></table>
<h2 id="D">D</h2>
<table style="width: 100%" class="indextable genindextable"><tr>
<td style="width: 33%; vertical-align: top;"><ul>
<li><a href="pomice.html#pomice.utils.ExponentialBackoff.delay">delay() (pomice.utils.ExponentialBackoff method)</a>
</li>
<li><a href="pomice.html#pomice.player.Player.destroy">destroy() (pomice.player.Player method)</a>
</li>
<li><a href="pomice.html#pomice.player.Player.disconnect">disconnect() (pomice.player.Player method)</a>
<ul>
<li><a href="pomice.html#pomice.pool.Node.disconnect">(pomice.pool.Node method)</a>
</li>
</ul></li>
</ul></td>
<td style="width: 33%; vertical-align: top;"><ul>
<li><a href="pomice.html#pomice.events.PomiceEvent.dispatch">dispatch() (pomice.events.PomiceEvent method)</a>
</li>
<li><a href="pomice.html#pomice.filters.Distortion">Distortion (class in pomice.filters)</a>
</li>
</ul></td>
</tr></table>
<h2 id="E">E</h2>
<table style="width: 100%" class="indextable genindextable"><tr>
<td style="width: 33%; vertical-align: top;"><ul>
<li><a href="pomice.html#pomice.filters.Equalizer">Equalizer (class in pomice.filters)</a>
</li>
</ul></td>
<td style="width: 33%; vertical-align: top;"><ul>
<li><a href="pomice.html#pomice.utils.ExponentialBackoff">ExponentialBackoff (class in pomice.utils)</a>
</li>
</ul></td>
</tr></table>
<h2 id="F">F</h2>
<table style="width: 100%" class="indextable genindextable"><tr>
<td style="width: 33%; vertical-align: top;"><ul>
<li><a href="pomice.html#pomice.filters.Filter">Filter (class in pomice.filters)</a>
</li>
</ul></td>
<td style="width: 33%; vertical-align: top;"><ul>
<li><a href="pomice.html#pomice.player.Player.filter">filter (pomice.player.Player property)</a>
</li>
<li><a href="pomice.html#pomice.exceptions.FilterInvalidArgument">FilterInvalidArgument</a>
</li>
</ul></td>
</tr></table>
<h2 id="G">G</h2>
<table style="width: 100%" class="indextable genindextable"><tr>
<td style="width: 33%; vertical-align: top;"><ul>
<li><a href="pomice.html#pomice.pool.NodePool.get_node">get_node() (pomice.pool.NodePool class method)</a>
</li>
<li><a href="pomice.html#pomice.pool.Node.get_player">get_player() (pomice.pool.Node method)</a>
</li>
</ul></td>
<td style="width: 33%; vertical-align: top;"><ul>
<li><a href="pomice.html#pomice.player.Player.get_tracks">get_tracks() (pomice.player.Player method)</a>
<ul>
<li><a href="pomice.html#pomice.pool.Node.get_tracks">(pomice.pool.Node method)</a>
</li>
</ul></li>
<li><a href="pomice.html#pomice.player.Player.guild">guild (pomice.player.Player property)</a>
</li>
</ul></td>
</tr></table>
<h2 id="H">H</h2>
<table style="width: 100%" class="indextable genindextable"><tr>
<td style="width: 33%; vertical-align: top;"><ul>
<li><a href="pomice.html#pomice.events.PomiceEvent.handler_args">handler_args (pomice.events.PomiceEvent attribute)</a>
</li>
</ul></td>
</tr></table>
<h2 id="I">I</h2>
<table style="width: 100%" class="indextable genindextable"><tr>
<td style="width: 33%; vertical-align: top;"><ul>
<li><a href="pomice.html#pomice.exceptions.InvalidSpotifyClientAuthorization">InvalidSpotifyClientAuthorization</a>
</li>
<li><a href="pomice.spotify.html#pomice.spotify.exceptions.InvalidSpotifyURL">InvalidSpotifyURL</a>
</li>
<li><a href="pomice.html#pomice.player.Player.is_connected">is_connected (pomice.player.Player property)</a>
<ul>
<li><a href="pomice.html#pomice.pool.Node.is_connected">(pomice.pool.Node property)</a>
</li>
</ul></li>
</ul></td>
<td style="width: 33%; vertical-align: top;"><ul>
<li><a href="pomice.html#pomice.player.Player.is_dead">is_dead (pomice.player.Player property)</a>
</li>
<li><a href="pomice.html#pomice.player.Player.is_paused">is_paused (pomice.player.Player property)</a>
</li>
<li><a href="pomice.html#pomice.player.Player.is_playing">is_playing (pomice.player.Player property)</a>
</li>
</ul></td>
</tr></table>
<h2 id="K">K</h2>
<table style="width: 100%" class="indextable genindextable"><tr>
<td style="width: 33%; vertical-align: top;"><ul>
<li><a href="pomice.html#pomice.filters.Karaoke">Karaoke (class in pomice.filters)</a>
</li>
</ul></td>
</tr></table>
<h2 id="L">L</h2>
<table style="width: 100%" class="indextable genindextable"><tr>
<td style="width: 33%; vertical-align: top;"><ul>
<li><a href="pomice.html#pomice.pool.Node.latency">latency (pomice.pool.Node property)</a>
</li>
</ul></td>
<td style="width: 33%; vertical-align: top;"><ul>
<li><a href="pomice.html#pomice.filters.LowPass">LowPass (class in pomice.filters)</a>
</li>
</ul></td>
</tr></table>
<h2 id="M">M</h2>
<table style="width: 100%" class="indextable genindextable"><tr>
<td style="width: 33%; vertical-align: top;"><ul>
<li>
module
<ul>
<li><a href="pomice.html#module-pomice.enums">pomice.enums</a>
</li>
<li><a href="pomice.html#module-pomice.events">pomice.events</a>
</li>
<li><a href="pomice.html#module-pomice.exceptions">pomice.exceptions</a>
</li>
<li><a href="pomice.html#module-pomice.filters">pomice.filters</a>
</li>
<li><a href="pomice.html#module-pomice.objects">pomice.objects</a>
</li>
<li><a href="pomice.html#module-pomice.player">pomice.player</a>
</li>
<li><a href="pomice.html#module-pomice.pool">pomice.pool</a>
</li>
<li><a href="pomice.spotify.html#module-pomice.spotify.album">pomice.spotify.album</a>
</li>
<li><a href="pomice.spotify.html#module-pomice.spotify.client">pomice.spotify.client</a>
</li>
<li><a href="pomice.spotify.html#module-pomice.spotify.exceptions">pomice.spotify.exceptions</a>
</li>
<li><a href="pomice.spotify.html#module-pomice.spotify.playlist">pomice.spotify.playlist</a>
</li>
<li><a href="pomice.spotify.html#module-pomice.spotify.track">pomice.spotify.track</a>
</li>
<li><a href="pomice.html#module-pomice.utils">pomice.utils</a>
</li>
</ul></li>
</ul></td>
</tr></table>
<h2 id="N">N</h2>
<table style="width: 100%" class="indextable genindextable"><tr>
<td style="width: 33%; vertical-align: top;"><ul>
<li><a href="pomice.html#pomice.events.PomiceEvent.name">name (pomice.events.PomiceEvent attribute)</a>
<ul>
<li><a href="pomice.html#pomice.events.TrackEndEvent.name">(pomice.events.TrackEndEvent attribute)</a>
</li>
<li><a href="pomice.html#pomice.events.TrackExceptionEvent.name">(pomice.events.TrackExceptionEvent attribute)</a>
</li>
<li><a href="pomice.html#pomice.events.TrackStartEvent.name">(pomice.events.TrackStartEvent attribute)</a>
</li>
<li><a href="pomice.html#pomice.events.TrackStuckEvent.name">(pomice.events.TrackStuckEvent attribute)</a>
</li>
<li><a href="pomice.html#pomice.events.WebSocketClosedEvent.name">(pomice.events.WebSocketClosedEvent attribute)</a>
</li>
<li><a href="pomice.html#pomice.events.WebSocketOpenEvent.name">(pomice.events.WebSocketOpenEvent attribute)</a>
</li>
</ul></li>
<li><a href="pomice.html#pomice.pool.Node">Node (class in pomice.pool)</a>
</li>
<li><a href="pomice.html#pomice.player.Player.node">node (pomice.player.Player property)</a>
</li>
</ul></td>
<td style="width: 33%; vertical-align: top;"><ul>
<li><a href="pomice.html#pomice.pool.NodePool.node_count">node_count (pomice.pool.NodePool property)</a>
</li>
<li><a href="pomice.html#pomice.exceptions.NodeConnectionClosed">NodeConnectionClosed</a>
</li>
<li><a href="pomice.html#pomice.exceptions.NodeConnectionFailure">NodeConnectionFailure</a>
</li>
<li><a href="pomice.html#pomice.exceptions.NodeCreationError">NodeCreationError</a>
</li>
<li><a href="pomice.html#pomice.exceptions.NodeException">NodeException</a>
</li>
<li><a href="pomice.html#pomice.exceptions.NodeNotAvailable">NodeNotAvailable</a>
</li>
<li><a href="pomice.html#pomice.pool.NodePool">NodePool (class in pomice.pool)</a>
</li>
<li><a href="pomice.html#pomice.pool.NodePool.nodes">nodes (pomice.pool.NodePool property)</a>
</li>
<li><a href="pomice.html#pomice.utils.NodeStats">NodeStats (class in pomice.utils)</a>
</li>
<li><a href="pomice.html#pomice.exceptions.NoNodesAvailable">NoNodesAvailable</a>
</li>
</ul></td>
</tr></table>
<h2 id="O">O</h2>
<table style="width: 100%" class="indextable genindextable"><tr>
<td style="width: 33%; vertical-align: top;"><ul>
<li><a href="pomice.html#pomice.player.Player.on_voice_server_update">on_voice_server_update() (pomice.player.Player method)</a>
</li>
</ul></td>
<td style="width: 33%; vertical-align: top;"><ul>
<li><a href="pomice.html#pomice.player.Player.on_voice_state_update">on_voice_state_update() (pomice.player.Player method)</a>
</li>
</ul></td>
</tr></table>
<h2 id="P">P</h2>
<table style="width: 100%" class="indextable genindextable"><tr>
<td style="width: 33%; vertical-align: top;"><ul>
<li><a href="pomice.html#pomice.player.Player.play">play() (pomice.player.Player method)</a>
</li>
<li><a href="pomice.html#pomice.player.Player">Player (class in pomice.player)</a>
</li>
<li><a href="pomice.html#pomice.pool.Node.player_count">player_count (pomice.pool.Node property)</a>
</li>
<li><a href="pomice.html#pomice.pool.Node.players">players (pomice.pool.Node property)</a>
</li>
<li><a href="pomice.html#pomice.objects.Playlist">Playlist (class in pomice.objects)</a>
<ul>
<li><a href="pomice.spotify.html#pomice.spotify.playlist.Playlist">(class in pomice.spotify.playlist)</a>
</li>
</ul></li>
<li>
pomice.enums
<ul>
<li><a href="pomice.html#module-pomice.enums">module</a>
</li>
</ul></li>
<li>
pomice.events
<ul>
<li><a href="pomice.html#module-pomice.events">module</a>
</li>
</ul></li>
<li>
pomice.exceptions
<ul>
<li><a href="pomice.html#module-pomice.exceptions">module</a>
</li>
</ul></li>
<li>
pomice.filters
<ul>
<li><a href="pomice.html#module-pomice.filters">module</a>
</li>
</ul></li>
<li>
pomice.objects
<ul>
<li><a href="pomice.html#module-pomice.objects">module</a>
</li>
</ul></li>
<li>
pomice.player
<ul>
<li><a href="pomice.html#module-pomice.player">module</a>
</li>
</ul></li>
</ul></td>
<td style="width: 33%; vertical-align: top;"><ul>
<li>
pomice.pool
<ul>
<li><a href="pomice.html#module-pomice.pool">module</a>
</li>
</ul></li>
<li>
pomice.spotify.album
<ul>
<li><a href="pomice.spotify.html#module-pomice.spotify.album">module</a>
</li>
</ul></li>
<li>
pomice.spotify.client
<ul>
<li><a href="pomice.spotify.html#module-pomice.spotify.client">module</a>
</li>
</ul></li>
<li>
pomice.spotify.exceptions
<ul>
<li><a href="pomice.spotify.html#module-pomice.spotify.exceptions">module</a>
</li>
</ul></li>
<li>
pomice.spotify.playlist
<ul>
<li><a href="pomice.spotify.html#module-pomice.spotify.playlist">module</a>
</li>
</ul></li>
<li>
pomice.spotify.track
<ul>
<li><a href="pomice.spotify.html#module-pomice.spotify.track">module</a>
</li>
</ul></li>
<li>
pomice.utils
<ul>
<li><a href="pomice.html#module-pomice.utils">module</a>
</li>
</ul></li>
<li><a href="pomice.html#pomice.events.PomiceEvent">PomiceEvent (class in pomice.events)</a>
</li>
<li><a href="pomice.html#pomice.exceptions.PomiceException">PomiceException</a>
</li>
<li><a href="pomice.html#pomice.pool.Node.pool">pool (pomice.pool.Node property)</a>
</li>
<li><a href="pomice.html#pomice.player.Player.position">position (pomice.player.Player property)</a>
</li>
</ul></td>
</tr></table>
<h2 id="R">R</h2>
<table style="width: 100%" class="indextable genindextable"><tr>
<td style="width: 33%; vertical-align: top;"><ul>
<li><a href="pomice.html#pomice.filters.Rotation">Rotation (class in pomice.filters)</a>
</li>
</ul></td>
</tr></table>
<h2 id="S">S</h2>
<table style="width: 100%" class="indextable genindextable"><tr>
<td style="width: 33%; vertical-align: top;"><ul>
<li><a href="pomice.html#pomice.enums.SearchType.scsearch">scsearch (pomice.enums.SearchType attribute)</a>
</li>
<li><a href="pomice.spotify.html#pomice.spotify.client.Client.search">search() (pomice.spotify.client.Client method)</a>
</li>
<li><a href="pomice.html#pomice.enums.SearchType">SearchType (class in pomice.enums)</a>
</li>
<li><a href="pomice.html#pomice.player.Player.seek">seek() (pomice.player.Player method)</a>
</li>
<li><a href="pomice.html#pomice.pool.Node.send">send() (pomice.pool.Node method)</a>
</li>
<li><a href="pomice.html#pomice.player.Player.set_filter">set_filter() (pomice.player.Player method)</a>
</li>
<li><a href="pomice.html#pomice.player.Player.set_pause">set_pause() (pomice.player.Player method)</a>
</li>
</ul></td>
<td style="width: 33%; vertical-align: top;"><ul>
<li><a href="pomice.html#pomice.player.Player.set_volume">set_volume() (pomice.player.Player method)</a>
</li>
<li><a href="pomice.html#pomice.exceptions.SpotifyAlbumLoadFailed">SpotifyAlbumLoadFailed</a>
</li>
<li><a href="pomice.html#pomice.exceptions.SpotifyPlaylistLoadFailed">SpotifyPlaylistLoadFailed</a>
</li>
<li><a href="pomice.spotify.html#pomice.spotify.exceptions.SpotifyRequestException">SpotifyRequestException</a>
</li>
<li><a href="pomice.html#pomice.exceptions.SpotifyTrackLoadFailed">SpotifyTrackLoadFailed</a>
</li>
<li><a href="pomice.html#pomice.pool.Node.stats">stats (pomice.pool.Node property)</a>
</li>
<li><a href="pomice.html#pomice.player.Player.stop">stop() (pomice.player.Player method)</a>
</li>
</ul></td>
</tr></table>
<h2 id="T">T</h2>
<table style="width: 100%" class="indextable genindextable"><tr>
<td style="width: 33%; vertical-align: top;"><ul>
<li><a href="pomice.html#pomice.objects.Playlist.thumbnail">thumbnail (pomice.objects.Playlist property)</a>
</li>
<li><a href="pomice.html#pomice.filters.Timescale">Timescale (class in pomice.filters)</a>
</li>
<li><a href="pomice.html#pomice.objects.Track">Track (class in pomice.objects)</a>
<ul>
<li><a href="pomice.spotify.html#pomice.spotify.track.Track">(class in pomice.spotify.track)</a>
</li>
</ul></li>
<li><a href="pomice.html#pomice.events.TrackEndEvent">TrackEndEvent (class in pomice.events)</a>
</li>
</ul></td>
<td style="width: 33%; vertical-align: top;"><ul>
<li><a href="pomice.html#pomice.events.TrackExceptionEvent">TrackExceptionEvent (class in pomice.events)</a>
</li>
<li><a href="pomice.html#pomice.exceptions.TrackInvalidPosition">TrackInvalidPosition</a>
</li>
<li><a href="pomice.html#pomice.exceptions.TrackLoadError">TrackLoadError</a>
</li>
<li><a href="pomice.html#pomice.events.TrackStartEvent">TrackStartEvent (class in pomice.events)</a>
</li>
<li><a href="pomice.html#pomice.events.TrackStuckEvent">TrackStuckEvent (class in pomice.events)</a>
</li>
<li><a href="pomice.html#pomice.filters.Tremolo">Tremolo (class in pomice.filters)</a>
</li>
</ul></td>
</tr></table>
<h2 id="U">U</h2>
<table style="width: 100%" class="indextable genindextable"><tr>
<td style="width: 33%; vertical-align: top;"><ul>
<li><a href="pomice.html#pomice.objects.Playlist.uri">uri (pomice.objects.Playlist property)</a>
</li>
</ul></td>
</tr></table>
<h2 id="V">V</h2>
<table style="width: 100%" class="indextable genindextable"><tr>
<td style="width: 33%; vertical-align: top;"><ul>
<li><a href="pomice.html#pomice.filters.Vibrato">Vibrato (class in pomice.filters)</a>
</li>
</ul></td>
<td style="width: 33%; vertical-align: top;"><ul>
<li><a href="pomice.html#pomice.player.Player.volume">volume (pomice.player.Player property)</a>
</li>
</ul></td>
</tr></table>
<h2 id="W">W</h2>
<table style="width: 100%" class="indextable genindextable"><tr>
<td style="width: 33%; vertical-align: top;"><ul>
<li><a href="pomice.html#pomice.events.WebSocketClosedEvent">WebSocketClosedEvent (class in pomice.events)</a>
</li>
</ul></td>
<td style="width: 33%; vertical-align: top;"><ul>
<li><a href="pomice.html#pomice.events.WebSocketClosedPayload">WebSocketClosedPayload (class in pomice.events)</a>
</li>
<li><a href="pomice.html#pomice.events.WebSocketOpenEvent">WebSocketOpenEvent (class in pomice.events)</a>
</li>
</ul></td>
</tr></table>
<h2 id="Y">Y</h2>
<table style="width: 100%" class="indextable genindextable"><tr>
<td style="width: 33%; vertical-align: top;"><ul>
<li><a href="pomice.html#pomice.enums.SearchType.ytmsearch">ytmsearch (pomice.enums.SearchType attribute)</a>
</li>
</ul></td>
<td style="width: 33%; vertical-align: top;"><ul>
<li><a href="pomice.html#pomice.enums.SearchType.ytsearch">ytsearch (pomice.enums.SearchType attribute)</a>
</li>
</ul></td>
</tr></table>
</div>
</div>
</div>
<div class="sphinxsidebar" role="navigation" aria-label="main navigation">
<div class="sphinxsidebarwrapper">
<h1 class="logo"><a href="index.html">Pomice</a></h1>
<h3>Navigation</h3>
<ul>
<li class="toctree-l1"><a class="reference internal" href="pomice.html">Pomice</a></li>
</ul>
<div class="relations">
<h3>Related Topics</h3>
<ul>
<li><a href="index.html">Documentation overview</a><ul>
</ul></li>
</ul>
</div>
<div id="searchbox" style="display: none" role="search">
<h3 id="searchlabel">Quick search</h3>
<div class="searchformwrapper">
<form class="search" action="search.html" method="get">
<input type="text" name="q" aria-labelledby="searchlabel" autocomplete="off" autocorrect="off" autocapitalize="off" spellcheck="false"/>
<input type="submit" value="Go" />
</form>
</div>
</div>
<script>$('#searchbox').show(0);</script>
</div>
</div>
<div class="clearer"></div>
</div>
<div class="footer">
&copy;2021, cloudwithax.
|
Powered by <a href="http://sphinx-doc.org/">Sphinx 4.2.0</a>
&amp; <a href="https://github.com/bitprophet/alabaster">Alabaster 0.7.12</a>
</div>
</body>
</html>

218
docs/_build/html/index.html vendored Normal file
View File

@ -0,0 +1,218 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" /><meta name="generator" content="Docutils 0.17.1: http://docutils.sourceforge.net/" />
<title>Welcome to Pomice! &#8212; Pomice 1.1.1 documentation</title>
<link rel="stylesheet" type="text/css" href="_static/pygments.css" />
<link rel="stylesheet" type="text/css" href="_static/alabaster.css" />
<script data-url_root="./" id="documentation_options" src="_static/documentation_options.js"></script>
<script src="_static/jquery.js"></script>
<script src="_static/underscore.js"></script>
<script src="_static/doctools.js"></script>
<link rel="index" title="Index" href="genindex.html" />
<link rel="search" title="Search" href="search.html" />
<link rel="next" title="&lt;no title&gt;" href="modules.html" />
<link rel="stylesheet" href="_static/custom.css" type="text/css" />
<meta name="viewport" content="width=device-width, initial-scale=0.9, maximum-scale=0.9" />
</head><body>
<div class="document">
<div class="documentwrapper">
<div class="bodywrapper">
<div class="body" role="main">
<section id="welcome-to-pomice">
<h1>Welcome to Pomice!<a class="headerlink" href="#welcome-to-pomice" title="Permalink to this headline"></a></h1>
<img alt="https://raw.githubusercontent.com/cloudwithax/pomice/main/banner.jpg" src="https://raw.githubusercontent.com/cloudwithax/pomice/main/banner.jpg" />
<p>The modern <a class="reference external" href="https://github.com/freyacodes/Lavalink">Lavalink</a> wrapper designed for <a class="reference external" href="https://github.com/Rapptz/discord.py">discord.py</a></p>
<section id="contents">
<h2>Contents<a class="headerlink" href="#contents" title="Permalink to this headline"></a></h2>
<div class="toctree-wrapper compound">
<ul>
<li class="toctree-l1"><a class="reference internal" href="pomice.html">Pomice</a><ul>
<li class="toctree-l2"><a class="reference internal" href="pomice.spotify.html">Spotify</a><ul>
<li class="toctree-l3"><a class="reference internal" href="pomice.spotify.html#module-pomice.spotify.album">spotify.Album</a></li>
<li class="toctree-l3"><a class="reference internal" href="pomice.spotify.html#module-pomice.spotify.client">spotify.Client</a></li>
<li class="toctree-l3"><a class="reference internal" href="pomice.spotify.html#module-pomice.spotify.exceptions">spotify.Exceptions</a></li>
<li class="toctree-l3"><a class="reference internal" href="pomice.spotify.html#module-pomice.spotify.playlist">spotify.Playlist</a></li>
<li class="toctree-l3"><a class="reference internal" href="pomice.spotify.html#module-pomice.spotify.track">spotify.Track</a></li>
</ul>
</li>
<li class="toctree-l2"><a class="reference internal" href="pomice.html#module-pomice.enums">Enums</a></li>
<li class="toctree-l2"><a class="reference internal" href="pomice.html#module-pomice.events">Events</a></li>
<li class="toctree-l2"><a class="reference internal" href="pomice.html#module-pomice.exceptions">Exceptions</a></li>
<li class="toctree-l2"><a class="reference internal" href="pomice.html#module-pomice.filters">Filters</a></li>
<li class="toctree-l2"><a class="reference internal" href="pomice.html#module-pomice.objects">Objects</a></li>
<li class="toctree-l2"><a class="reference internal" href="pomice.html#module-pomice.player">Player</a></li>
<li class="toctree-l2"><a class="reference internal" href="pomice.html#module-pomice.pool">Pool</a></li>
<li class="toctree-l2"><a class="reference internal" href="pomice.html#module-pomice.utils">Utils</a></li>
</ul>
</li>
</ul>
</div>
</section>
<section id="before-you-start">
<h2>Before You Start<a class="headerlink" href="#before-you-start" title="Permalink to this headline"></a></h2>
<p>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.</p>
<p>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.</p>
<p>In order to start using this library, please download a Lavalink node to start,
you can get it <a class="reference external" href="https://github.com/freyacodes/Lavalink/releases/latest">here</a></p>
</section>
<section id="quick-jumpstart">
<h2>Quick Jumpstart<a class="headerlink" href="#quick-jumpstart" title="Permalink to this headline"></a></h2>
<p>If you want a quick example as to how to start with Pomice, look below:</p>
<div class="highlight-python3 notranslate"><div class="highlight"><pre><span></span><span class="kn">import</span> <span class="nn">pomice</span>
<span class="kn">import</span> <span class="nn">discord</span>
<span class="kn">import</span> <span class="nn">re</span>
<span class="kn">from</span> <span class="nn">discord.ext</span> <span class="kn">import</span> <span class="n">commands</span>
<span class="n">URL_REG</span> <span class="o">=</span> <span class="n">re</span><span class="o">.</span><span class="n">compile</span><span class="p">(</span><span class="sa">r</span><span class="s1">&#39;https?://(?:www\.)?.+&#39;</span><span class="p">)</span>
<span class="k">class</span> <span class="nc">MyBot</span><span class="p">(</span><span class="n">commands</span><span class="o">.</span><span class="n">Bot</span><span class="p">):</span>
<span class="k">def</span> <span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="kc">None</span><span class="p">:</span>
<span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="fm">__init__</span><span class="p">(</span><span class="n">command_prefix</span><span class="o">=</span><span class="s1">&#39;!&#39;</span><span class="p">,</span> <span class="n">activity</span><span class="o">=</span><span class="n">discord</span><span class="o">.</span><span class="n">Activity</span><span class="p">(</span><span class="nb">type</span><span class="o">=</span><span class="n">discord</span><span class="o">.</span><span class="n">ActivityType</span><span class="o">.</span><span class="n">listening</span><span class="p">,</span> <span class="n">name</span><span class="o">=</span><span class="s1">&#39;to music!&#39;</span><span class="p">))</span>
<span class="bp">self</span><span class="o">.</span><span class="n">add_cog</span><span class="p">(</span><span class="n">Music</span><span class="p">(</span><span class="bp">self</span><span class="p">))</span>
<span class="k">async</span> <span class="k">def</span> <span class="nf">on_ready</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="kc">None</span><span class="p">:</span>
<span class="nb">print</span><span class="p">(</span><span class="s2">&quot;I&#39;m online!&quot;</span><span class="p">)</span>
<span class="k">await</span> <span class="bp">self</span><span class="o">.</span><span class="n">cogs</span><span class="p">[</span><span class="s2">&quot;Music&quot;</span><span class="p">]</span><span class="o">.</span><span class="n">start_nodes</span><span class="p">()</span>
<span class="k">class</span> <span class="nc">Music</span><span class="p">(</span><span class="n">commands</span><span class="o">.</span><span class="n">Cog</span><span class="p">):</span>
<span class="k">def</span> <span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">bot</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="kc">None</span><span class="p">:</span>
<span class="bp">self</span><span class="o">.</span><span class="n">bot</span> <span class="o">=</span> <span class="n">bot</span>
<span class="bp">self</span><span class="o">.</span><span class="n">pomice</span> <span class="o">=</span> <span class="n">pomice</span><span class="o">.</span><span class="n">NodePool</span><span class="p">()</span>
<span class="k">async</span> <span class="k">def</span> <span class="nf">start_nodes</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="k">await</span> <span class="bp">self</span><span class="o">.</span><span class="n">pomice</span><span class="o">.</span><span class="n">create_node</span><span class="p">(</span><span class="n">bot</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">bot</span><span class="p">,</span> <span class="n">host</span><span class="o">=</span><span class="s1">&#39;127.0.0.1&#39;</span><span class="p">,</span> <span class="n">port</span><span class="o">=</span><span class="s1">&#39;3030&#39;</span><span class="p">,</span>
<span class="n">password</span><span class="o">=</span><span class="s1">&#39;youshallnotpass&#39;</span><span class="p">,</span> <span class="n">identifier</span><span class="o">=</span><span class="s1">&#39;MAIN&#39;</span><span class="p">)</span>
<span class="nb">print</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Node is ready!&quot;</span><span class="p">)</span>
<span class="nd">@commands</span><span class="o">.</span><span class="n">command</span><span class="p">(</span><span class="n">name</span><span class="o">=</span><span class="s1">&#39;join&#39;</span><span class="p">,</span> <span class="n">aliases</span><span class="o">=</span><span class="p">[</span><span class="s1">&#39;connect&#39;</span><span class="p">])</span>
<span class="k">async</span> <span class="k">def</span> <span class="nf">join</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">ctx</span><span class="p">:</span> <span class="n">commands</span><span class="o">.</span><span class="n">Context</span><span class="p">,</span> <span class="o">*</span><span class="p">,</span> <span class="n">channel</span><span class="p">:</span> <span class="n">discord</span><span class="o">.</span><span class="n">TextChannel</span> <span class="o">=</span> <span class="kc">None</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="kc">None</span><span class="p">:</span>
<span class="k">if</span> <span class="ow">not</span> <span class="n">channel</span><span class="p">:</span>
<span class="n">channel</span> <span class="o">=</span> <span class="nb">getattr</span><span class="p">(</span><span class="n">ctx</span><span class="o">.</span><span class="n">author</span><span class="o">.</span><span class="n">voice</span><span class="p">,</span> <span class="s1">&#39;channel&#39;</span><span class="p">,</span> <span class="kc">None</span><span class="p">)</span>
<span class="k">if</span> <span class="ow">not</span> <span class="n">channel</span><span class="p">:</span>
<span class="k">raise</span> <span class="n">commands</span><span class="o">.</span><span class="n">CheckFailure</span><span class="p">(</span><span class="s1">&#39;You must be in a voice channel to use this command&#39;</span>
<span class="s1">&#39;without specifying the channel argument.&#39;</span><span class="p">)</span>
<span class="k">await</span> <span class="n">ctx</span><span class="o">.</span><span class="n">author</span><span class="o">.</span><span class="n">voice</span><span class="o">.</span><span class="n">channel</span><span class="o">.</span><span class="n">connect</span><span class="p">(</span><span class="bp">cls</span><span class="o">=</span><span class="n">pomice</span><span class="o">.</span><span class="n">Player</span><span class="p">)</span>
<span class="k">await</span> <span class="n">ctx</span><span class="o">.</span><span class="n">send</span><span class="p">(</span><span class="sa">f</span><span class="s1">&#39;Joined the voice channel `</span><span class="si">{</span><span class="n">channel</span><span class="si">}</span><span class="s1">`&#39;</span><span class="p">)</span>
<span class="nd">@commands</span><span class="o">.</span><span class="n">command</span><span class="p">(</span><span class="n">name</span><span class="o">=</span><span class="s1">&#39;play&#39;</span><span class="p">)</span>
<span class="k">async</span> <span class="k">def</span> <span class="nf">play</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">ctx</span><span class="p">,</span> <span class="o">*</span><span class="p">,</span> <span class="n">search</span><span class="p">:</span> <span class="nb">str</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="kc">None</span><span class="p">:</span>
<span class="k">if</span> <span class="ow">not</span> <span class="n">ctx</span><span class="o">.</span><span class="n">voice_client</span><span class="p">:</span>
<span class="k">await</span> <span class="n">ctx</span><span class="o">.</span><span class="n">invoke</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">join</span><span class="p">)</span>
<span class="n">player</span> <span class="o">=</span> <span class="n">ctx</span><span class="o">.</span><span class="n">voice_client</span>
<span class="n">results</span> <span class="o">=</span> <span class="k">await</span> <span class="n">player</span><span class="o">.</span><span class="n">get_tracks</span><span class="p">(</span><span class="n">query</span><span class="o">=</span><span class="sa">f</span><span class="s1">&#39;</span><span class="si">{</span><span class="n">search</span><span class="si">}</span><span class="s1">&#39;</span><span class="p">)</span>
<span class="k">if</span> <span class="ow">not</span> <span class="n">results</span><span class="p">:</span>
<span class="k">raise</span> <span class="n">commands</span><span class="o">.</span><span class="n">CommandError</span><span class="p">(</span><span class="s1">&#39;No results were found for that search term.&#39;</span><span class="p">)</span>
<span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">results</span><span class="p">,</span> <span class="n">pomice</span><span class="o">.</span><span class="n">Playlist</span><span class="p">):</span>
<span class="k">await</span> <span class="n">player</span><span class="o">.</span><span class="n">play</span><span class="p">(</span><span class="n">track</span><span class="o">=</span><span class="n">results</span><span class="o">.</span><span class="n">tracks</span><span class="p">[</span><span class="mi">0</span><span class="p">])</span>
<span class="k">else</span><span class="p">:</span>
<span class="k">await</span> <span class="n">player</span><span class="o">.</span><span class="n">play</span><span class="p">(</span><span class="n">track</span><span class="o">=</span><span class="n">results</span><span class="p">[</span><span class="mi">0</span><span class="p">])</span>
<span class="n">bot</span> <span class="o">=</span> <span class="n">MyBot</span><span class="p">()</span>
<span class="n">bot</span><span class="o">.</span><span class="n">run</span><span class="p">(</span><span class="s2">&quot;token here&quot;</span><span class="p">)</span>
</pre></div>
</div>
</section>
</section>
</div>
</div>
</div>
<div class="sphinxsidebar" role="navigation" aria-label="main navigation">
<div class="sphinxsidebarwrapper">
<h1 class="logo"><a href="#">Pomice</a></h1>
<h3>Navigation</h3>
<ul>
<li class="toctree-l1"><a class="reference internal" href="pomice.html">Pomice</a></li>
</ul>
<div class="relations">
<h3>Related Topics</h3>
<ul>
<li><a href="#">Documentation overview</a><ul>
<li>Next: <a href="modules.html" title="next chapter">&lt;no title&gt;</a></li>
</ul></li>
</ul>
</div>
<div id="searchbox" style="display: none" role="search">
<h3 id="searchlabel">Quick search</h3>
<div class="searchformwrapper">
<form class="search" action="search.html" method="get">
<input type="text" name="q" aria-labelledby="searchlabel" autocomplete="off" autocorrect="off" autocapitalize="off" spellcheck="false"/>
<input type="submit" value="Go" />
</form>
</div>
</div>
<script>$('#searchbox').show(0);</script>
</div>
</div>
<div class="clearer"></div>
</div>
<div class="footer">
&copy;2021, cloudwithax.
|
Powered by <a href="http://sphinx-doc.org/">Sphinx 4.2.0</a>
&amp; <a href="https://github.com/bitprophet/alabaster">Alabaster 0.7.12</a>
|
<a href="_sources/index.rst.txt"
rel="nofollow">Page source</a>
</div>
</body>
</html>

128
docs/_build/html/modules.html vendored Normal file
View File

@ -0,0 +1,128 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" /><meta name="generator" content="Docutils 0.17.1: http://docutils.sourceforge.net/" />
<title>&lt;no title&gt; &#8212; Pomice 1.1.1 documentation</title>
<link rel="stylesheet" type="text/css" href="_static/pygments.css" />
<link rel="stylesheet" type="text/css" href="_static/alabaster.css" />
<script data-url_root="./" id="documentation_options" src="_static/documentation_options.js"></script>
<script src="_static/jquery.js"></script>
<script src="_static/underscore.js"></script>
<script src="_static/doctools.js"></script>
<link rel="index" title="Index" href="genindex.html" />
<link rel="search" title="Search" href="search.html" />
<link rel="next" title="Pomice" href="pomice.html" />
<link rel="prev" title="Welcome to Pomice!" href="index.html" />
<link rel="stylesheet" href="_static/custom.css" type="text/css" />
<meta name="viewport" content="width=device-width, initial-scale=0.9, maximum-scale=0.9" />
</head><body>
<div class="document">
<div class="documentwrapper">
<div class="bodywrapper">
<div class="body" role="main">
<div class="toctree-wrapper compound">
<ul>
<li class="toctree-l1"><a class="reference internal" href="pomice.html">Pomice</a><ul>
<li class="toctree-l2"><a class="reference internal" href="pomice.spotify.html">pomice.spotify</a><ul>
<li class="toctree-l3"><a class="reference internal" href="pomice.spotify.html#module-pomice.spotify.album">spotify.Album</a></li>
<li class="toctree-l3"><a class="reference internal" href="pomice.spotify.html#module-pomice.spotify.client">spotify.Client</a></li>
<li class="toctree-l3"><a class="reference internal" href="pomice.spotify.html#module-pomice.spotify.exceptions">spotify.Exceptions</a></li>
<li class="toctree-l3"><a class="reference internal" href="pomice.spotify.html#module-pomice.spotify.playlist">spotify.Playlist</a></li>
<li class="toctree-l3"><a class="reference internal" href="pomice.spotify.html#module-pomice.spotify.track">spotify.Track</a></li>
</ul>
</li>
<li class="toctree-l2"><a class="reference internal" href="pomice.html#module-pomice.enums">Enums</a></li>
<li class="toctree-l2"><a class="reference internal" href="pomice.html#module-pomice.events">Events</a></li>
<li class="toctree-l2"><a class="reference internal" href="pomice.html#module-pomice.exceptions">Exceptions</a></li>
<li class="toctree-l2"><a class="reference internal" href="pomice.html#module-pomice.filters">Filters</a></li>
<li class="toctree-l2"><a class="reference internal" href="pomice.html#module-pomice.objects">Objects</a></li>
<li class="toctree-l2"><a class="reference internal" href="pomice.html#module-pomice.player">Player</a></li>
<li class="toctree-l2"><a class="reference internal" href="pomice.html#module-pomice.pool">Pool</a></li>
<li class="toctree-l2"><a class="reference internal" href="pomice.html#module-pomice.utils">Utils</a></li>
</ul>
</li>
</ul>
</div>
</div>
</div>
</div>
<div class="sphinxsidebar" role="navigation" aria-label="main navigation">
<div class="sphinxsidebarwrapper">
<h1 class="logo"><a href="index.html">Pomice</a></h1>
<h3>Navigation</h3>
<ul>
<li class="toctree-l1"><a class="reference internal" href="pomice.html">Pomice</a></li>
</ul>
<div class="relations">
<h3>Related Topics</h3>
<ul>
<li><a href="index.html">Documentation overview</a><ul>
<li>Previous: <a href="index.html" title="previous chapter">Welcome to Pomice!</a></li>
<li>Next: <a href="pomice.html" title="next chapter">Pomice</a></li>
</ul></li>
</ul>
</div>
<div id="searchbox" style="display: none" role="search">
<h3 id="searchlabel">Quick search</h3>
<div class="searchformwrapper">
<form class="search" action="search.html" method="get">
<input type="text" name="q" aria-labelledby="searchlabel" autocomplete="off" autocorrect="off" autocapitalize="off" spellcheck="false"/>
<input type="submit" value="Go" />
</form>
</div>
</div>
<script>$('#searchbox').show(0);</script>
</div>
</div>
<div class="clearer"></div>
</div>
<div class="footer">
&copy;2021, cloudwithax.
|
Powered by <a href="http://sphinx-doc.org/">Sphinx 4.2.0</a>
&amp; <a href="https://github.com/bitprophet/alabaster">Alabaster 0.7.12</a>
|
<a href="_sources/modules.rst.txt"
rel="nofollow">Page source</a>
</div>
</body>
</html>

BIN
docs/_build/html/objects.inv vendored Normal file

Binary file not shown.

854
docs/_build/html/pomice.html vendored Normal file
View File

@ -0,0 +1,854 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" /><meta name="generator" content="Docutils 0.17.1: http://docutils.sourceforge.net/" />
<title>Pomice &#8212; Pomice 1.1.1 documentation</title>
<link rel="stylesheet" type="text/css" href="_static/pygments.css" />
<link rel="stylesheet" type="text/css" href="_static/alabaster.css" />
<script data-url_root="./" id="documentation_options" src="_static/documentation_options.js"></script>
<script src="_static/jquery.js"></script>
<script src="_static/underscore.js"></script>
<script src="_static/doctools.js"></script>
<link rel="index" title="Index" href="genindex.html" />
<link rel="search" title="Search" href="search.html" />
<link rel="next" title="Spotify" href="pomice.spotify.html" />
<link rel="prev" title="&lt;no title&gt;" href="modules.html" />
<link rel="stylesheet" href="_static/custom.css" type="text/css" />
<meta name="viewport" content="width=device-width, initial-scale=0.9, maximum-scale=0.9" />
</head><body>
<div class="document">
<div class="documentwrapper">
<div class="bodywrapper">
<div class="body" role="main">
<section id="pomice">
<h1>Pomice<a class="headerlink" href="#pomice" title="Permalink to this headline"></a></h1>
<div class="toctree-wrapper compound">
<ul>
<li class="toctree-l1"><a class="reference internal" href="pomice.spotify.html">Spotify</a><ul>
<li class="toctree-l2"><a class="reference internal" href="pomice.spotify.html#module-pomice.spotify.album">spotify.Album</a></li>
<li class="toctree-l2"><a class="reference internal" href="pomice.spotify.html#module-pomice.spotify.client">spotify.Client</a></li>
<li class="toctree-l2"><a class="reference internal" href="pomice.spotify.html#module-pomice.spotify.exceptions">spotify.Exceptions</a></li>
<li class="toctree-l2"><a class="reference internal" href="pomice.spotify.html#module-pomice.spotify.playlist">spotify.Playlist</a></li>
<li class="toctree-l2"><a class="reference internal" href="pomice.spotify.html#module-pomice.spotify.track">spotify.Track</a></li>
</ul>
</li>
</ul>
</div>
<section id="module-pomice.enums">
<span id="enums"></span><h2>Enums<a class="headerlink" href="#module-pomice.enums" title="Permalink to this headline"></a></h2>
<dl class="py class">
<dt class="sig sig-object py" id="pomice.enums.SearchType">
<em class="property"><span class="pre">class</span> </em><span class="sig-prename descclassname"><span class="pre">pomice.enums.</span></span><span class="sig-name descname"><span class="pre">SearchType</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">value</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#pomice.enums.SearchType" title="Permalink to this definition"></a></dt>
<dd><p>Bases: <code class="xref py py-class docutils literal notranslate"><span class="pre">enum.Enum</span></code></p>
<p>The enum for the different search types for Pomice.
This feature is exclusively for the Spotify search feature of Pomice.
If you are not using this feature, this class is not necessary.</p>
<p>SearchType.ytsearch searches using regular Youtube,
which is best for all scenarios.</p>
<p>SearchType.ytmsearch searches using YouTube Music,
which is best for getting audio-only results.</p>
<p>SearchType.scsearch searches using SoundCloud,
which is an alternative to YouTube or YouTube Music.</p>
<dl class="py attribute">
<dt class="sig sig-object py" id="pomice.enums.SearchType.scsearch">
<span class="sig-name descname"><span class="pre">scsearch</span></span><em class="property"> <span class="pre">=</span> <span class="pre">'scsearch'</span></em><a class="headerlink" href="#pomice.enums.SearchType.scsearch" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
<dl class="py attribute">
<dt class="sig sig-object py" id="pomice.enums.SearchType.ytmsearch">
<span class="sig-name descname"><span class="pre">ytmsearch</span></span><em class="property"> <span class="pre">=</span> <span class="pre">'ytmsearch'</span></em><a class="headerlink" href="#pomice.enums.SearchType.ytmsearch" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
<dl class="py attribute">
<dt class="sig sig-object py" id="pomice.enums.SearchType.ytsearch">
<span class="sig-name descname"><span class="pre">ytsearch</span></span><em class="property"> <span class="pre">=</span> <span class="pre">'ytsearch'</span></em><a class="headerlink" href="#pomice.enums.SearchType.ytsearch" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
</dd></dl>
</section>
<section id="module-pomice.events">
<span id="events"></span><h2>Events<a class="headerlink" href="#module-pomice.events" title="Permalink to this headline"></a></h2>
<dl class="py class">
<dt class="sig sig-object py" id="pomice.events.PomiceEvent">
<em class="property"><span class="pre">class</span> </em><span class="sig-prename descclassname"><span class="pre">pomice.events.</span></span><span class="sig-name descname"><span class="pre">PomiceEvent</span></span><a class="headerlink" href="#pomice.events.PomiceEvent" title="Permalink to this definition"></a></dt>
<dd><p>Bases: <code class="xref py py-class docutils literal notranslate"><span class="pre">object</span></code></p>
<p>The base class for all events dispatched by a node.
Every event must be formatted within your bots code as a listener.
i.e: If you want to listen for when a track starts, the event would be:
<code class="docutils literal notranslate"><span class="pre">`py</span>
<span class="pre">&#64;bot.listen</span>
<span class="pre">async</span> <span class="pre">def</span> <span class="pre">on_pomice_track_start(self,</span> <span class="pre">event):</span>
<span class="pre">`</span></code></p>
<dl class="py method">
<dt class="sig sig-object py" id="pomice.events.PomiceEvent.dispatch">
<span class="sig-name descname"><span class="pre">dispatch</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">bot</span></span><span class="p"><span class="pre">:</span></span> <span class="n"><span class="pre">Union</span><span class="p"><span class="pre">[</span></span><span class="pre">discord.ext.commands.bot.AutoShardedBot</span><span class="p"><span class="pre">,</span> </span><span class="pre">discord.shard.AutoShardedClient</span><span class="p"><span class="pre">,</span> </span><span class="pre">discord.ext.commands.bot.Bot</span><span class="p"><span class="pre">,</span> </span><span class="pre">discord.client.Client</span><span class="p"><span class="pre">]</span></span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#pomice.events.PomiceEvent.dispatch" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
<dl class="py attribute">
<dt class="sig sig-object py" id="pomice.events.PomiceEvent.handler_args">
<span class="sig-name descname"><span class="pre">handler_args</span></span><em class="property"> <span class="pre">=</span> <span class="pre">()</span></em><a class="headerlink" href="#pomice.events.PomiceEvent.handler_args" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
<dl class="py attribute">
<dt class="sig sig-object py" id="pomice.events.PomiceEvent.name">
<span class="sig-name descname"><span class="pre">name</span></span><em class="property"> <span class="pre">=</span> <span class="pre">'event'</span></em><a class="headerlink" href="#pomice.events.PomiceEvent.name" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
</dd></dl>
<dl class="py class">
<dt class="sig sig-object py" id="pomice.events.TrackEndEvent">
<em class="property"><span class="pre">class</span> </em><span class="sig-prename descclassname"><span class="pre">pomice.events.</span></span><span class="sig-name descname"><span class="pre">TrackEndEvent</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">data</span></span><span class="p"><span class="pre">:</span></span> <span class="n"><span class="pre">dict</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#pomice.events.TrackEndEvent" title="Permalink to this definition"></a></dt>
<dd><p>Bases: <a class="reference internal" href="#pomice.events.PomiceEvent" title="pomice.events.PomiceEvent"><code class="xref py py-class docutils literal notranslate"><span class="pre">pomice.events.PomiceEvent</span></code></a></p>
<p>Fired when a track has successfully ended.
Returns the player associated with the event along with the pomice.Track object and reason.</p>
<dl class="py attribute">
<dt class="sig sig-object py" id="pomice.events.TrackEndEvent.name">
<span class="sig-name descname"><span class="pre">name</span></span><em class="property"> <span class="pre">=</span> <span class="pre">'track_end'</span></em><a class="headerlink" href="#pomice.events.TrackEndEvent.name" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
</dd></dl>
<dl class="py class">
<dt class="sig sig-object py" id="pomice.events.TrackExceptionEvent">
<em class="property"><span class="pre">class</span> </em><span class="sig-prename descclassname"><span class="pre">pomice.events.</span></span><span class="sig-name descname"><span class="pre">TrackExceptionEvent</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">data</span></span><span class="p"><span class="pre">:</span></span> <span class="n"><span class="pre">dict</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#pomice.events.TrackExceptionEvent" title="Permalink to this definition"></a></dt>
<dd><p>Bases: <a class="reference internal" href="#pomice.events.PomiceEvent" title="pomice.events.PomiceEvent"><code class="xref py py-class docutils literal notranslate"><span class="pre">pomice.events.PomiceEvent</span></code></a></p>
<p>Fired when a track error has occured.
Returns the player associated with the event along with the error code and exception.</p>
<dl class="py attribute">
<dt class="sig sig-object py" id="pomice.events.TrackExceptionEvent.name">
<span class="sig-name descname"><span class="pre">name</span></span><em class="property"> <span class="pre">=</span> <span class="pre">'track_exception'</span></em><a class="headerlink" href="#pomice.events.TrackExceptionEvent.name" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
</dd></dl>
<dl class="py class">
<dt class="sig sig-object py" id="pomice.events.TrackStartEvent">
<em class="property"><span class="pre">class</span> </em><span class="sig-prename descclassname"><span class="pre">pomice.events.</span></span><span class="sig-name descname"><span class="pre">TrackStartEvent</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">data</span></span><span class="p"><span class="pre">:</span></span> <span class="n"><span class="pre">dict</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#pomice.events.TrackStartEvent" title="Permalink to this definition"></a></dt>
<dd><p>Bases: <a class="reference internal" href="#pomice.events.PomiceEvent" title="pomice.events.PomiceEvent"><code class="xref py py-class docutils literal notranslate"><span class="pre">pomice.events.PomiceEvent</span></code></a></p>
<p>Fired when a track has successfully started.
Returns the player associated with the event and the pomice.Track object.</p>
<dl class="py attribute">
<dt class="sig sig-object py" id="pomice.events.TrackStartEvent.name">
<span class="sig-name descname"><span class="pre">name</span></span><em class="property"> <span class="pre">=</span> <span class="pre">'track_start'</span></em><a class="headerlink" href="#pomice.events.TrackStartEvent.name" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
</dd></dl>
<dl class="py class">
<dt class="sig sig-object py" id="pomice.events.TrackStuckEvent">
<em class="property"><span class="pre">class</span> </em><span class="sig-prename descclassname"><span class="pre">pomice.events.</span></span><span class="sig-name descname"><span class="pre">TrackStuckEvent</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">data</span></span><span class="p"><span class="pre">:</span></span> <span class="n"><span class="pre">dict</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#pomice.events.TrackStuckEvent" title="Permalink to this definition"></a></dt>
<dd><p>Bases: <a class="reference internal" href="#pomice.events.PomiceEvent" title="pomice.events.PomiceEvent"><code class="xref py py-class docutils literal notranslate"><span class="pre">pomice.events.PomiceEvent</span></code></a></p>
<p>Fired when a track is stuck and cannot be played. Returns the player
associated with the event along with the pomice.Track object
to be further parsed by the end user.</p>
<dl class="py attribute">
<dt class="sig sig-object py" id="pomice.events.TrackStuckEvent.name">
<span class="sig-name descname"><span class="pre">name</span></span><em class="property"> <span class="pre">=</span> <span class="pre">'track_stuck'</span></em><a class="headerlink" href="#pomice.events.TrackStuckEvent.name" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
</dd></dl>
<dl class="py class">
<dt class="sig sig-object py" id="pomice.events.WebSocketClosedEvent">
<em class="property"><span class="pre">class</span> </em><span class="sig-prename descclassname"><span class="pre">pomice.events.</span></span><span class="sig-name descname"><span class="pre">WebSocketClosedEvent</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">data</span></span><span class="p"><span class="pre">:</span></span> <span class="n"><span class="pre">dict</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#pomice.events.WebSocketClosedEvent" title="Permalink to this definition"></a></dt>
<dd><p>Bases: <a class="reference internal" href="#pomice.events.PomiceEvent" title="pomice.events.PomiceEvent"><code class="xref py py-class docutils literal notranslate"><span class="pre">pomice.events.PomiceEvent</span></code></a></p>
<p>Fired when a websocket connection to a node has been closed.
Returns the reason and the error code.</p>
<dl class="py attribute">
<dt class="sig sig-object py" id="pomice.events.WebSocketClosedEvent.name">
<span class="sig-name descname"><span class="pre">name</span></span><em class="property"> <span class="pre">=</span> <span class="pre">'websocket_closed'</span></em><a class="headerlink" href="#pomice.events.WebSocketClosedEvent.name" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
</dd></dl>
<dl class="py class">
<dt class="sig sig-object py" id="pomice.events.WebSocketClosedPayload">
<em class="property"><span class="pre">class</span> </em><span class="sig-prename descclassname"><span class="pre">pomice.events.</span></span><span class="sig-name descname"><span class="pre">WebSocketClosedPayload</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">data</span></span><span class="p"><span class="pre">:</span></span> <span class="n"><span class="pre">dict</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#pomice.events.WebSocketClosedPayload" title="Permalink to this definition"></a></dt>
<dd><p>Bases: <code class="xref py py-class docutils literal notranslate"><span class="pre">object</span></code></p>
</dd></dl>
<dl class="py class">
<dt class="sig sig-object py" id="pomice.events.WebSocketOpenEvent">
<em class="property"><span class="pre">class</span> </em><span class="sig-prename descclassname"><span class="pre">pomice.events.</span></span><span class="sig-name descname"><span class="pre">WebSocketOpenEvent</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">data</span></span><span class="p"><span class="pre">:</span></span> <span class="n"><span class="pre">dict</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#pomice.events.WebSocketOpenEvent" title="Permalink to this definition"></a></dt>
<dd><p>Bases: <a class="reference internal" href="#pomice.events.PomiceEvent" title="pomice.events.PomiceEvent"><code class="xref py py-class docutils literal notranslate"><span class="pre">pomice.events.PomiceEvent</span></code></a></p>
<p>Fired when a websocket connection to a node has been initiated.
Returns the target and the session SSRC.</p>
<dl class="py attribute">
<dt class="sig sig-object py" id="pomice.events.WebSocketOpenEvent.name">
<span class="sig-name descname"><span class="pre">name</span></span><em class="property"> <span class="pre">=</span> <span class="pre">'websocket_open'</span></em><a class="headerlink" href="#pomice.events.WebSocketOpenEvent.name" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
</dd></dl>
</section>
<section id="module-pomice.exceptions">
<span id="exceptions"></span><h2>Exceptions<a class="headerlink" href="#module-pomice.exceptions" title="Permalink to this headline"></a></h2>
<dl class="py exception">
<dt class="sig sig-object py" id="pomice.exceptions.FilterInvalidArgument">
<em class="property"><span class="pre">exception</span> </em><span class="sig-prename descclassname"><span class="pre">pomice.exceptions.</span></span><span class="sig-name descname"><span class="pre">FilterInvalidArgument</span></span><a class="headerlink" href="#pomice.exceptions.FilterInvalidArgument" title="Permalink to this definition"></a></dt>
<dd><p>Bases: <a class="reference internal" href="#pomice.exceptions.PomiceException" title="pomice.exceptions.PomiceException"><code class="xref py py-class docutils literal notranslate"><span class="pre">pomice.exceptions.PomiceException</span></code></a></p>
<p>An invalid argument was passed to a filter.</p>
</dd></dl>
<dl class="py exception">
<dt class="sig sig-object py" id="pomice.exceptions.InvalidSpotifyClientAuthorization">
<em class="property"><span class="pre">exception</span> </em><span class="sig-prename descclassname"><span class="pre">pomice.exceptions.</span></span><span class="sig-name descname"><span class="pre">InvalidSpotifyClientAuthorization</span></span><a class="headerlink" href="#pomice.exceptions.InvalidSpotifyClientAuthorization" title="Permalink to this definition"></a></dt>
<dd><p>Bases: <a class="reference internal" href="#pomice.exceptions.PomiceException" title="pomice.exceptions.PomiceException"><code class="xref py py-class docutils literal notranslate"><span class="pre">pomice.exceptions.PomiceException</span></code></a></p>
<p>No Spotify client authorization was provided for track searching.</p>
</dd></dl>
<dl class="py exception">
<dt class="sig sig-object py" id="pomice.exceptions.NoNodesAvailable">
<em class="property"><span class="pre">exception</span> </em><span class="sig-prename descclassname"><span class="pre">pomice.exceptions.</span></span><span class="sig-name descname"><span class="pre">NoNodesAvailable</span></span><a class="headerlink" href="#pomice.exceptions.NoNodesAvailable" title="Permalink to this definition"></a></dt>
<dd><p>Bases: <a class="reference internal" href="#pomice.exceptions.PomiceException" title="pomice.exceptions.PomiceException"><code class="xref py py-class docutils literal notranslate"><span class="pre">pomice.exceptions.PomiceException</span></code></a></p>
<p>There are no nodes currently available.</p>
</dd></dl>
<dl class="py exception">
<dt class="sig sig-object py" id="pomice.exceptions.NodeConnectionClosed">
<em class="property"><span class="pre">exception</span> </em><span class="sig-prename descclassname"><span class="pre">pomice.exceptions.</span></span><span class="sig-name descname"><span class="pre">NodeConnectionClosed</span></span><a class="headerlink" href="#pomice.exceptions.NodeConnectionClosed" title="Permalink to this definition"></a></dt>
<dd><p>Bases: <a class="reference internal" href="#pomice.exceptions.NodeException" title="pomice.exceptions.NodeException"><code class="xref py py-class docutils literal notranslate"><span class="pre">pomice.exceptions.NodeException</span></code></a></p>
<p>The nodes connection is closed.</p>
</dd></dl>
<dl class="py exception">
<dt class="sig sig-object py" id="pomice.exceptions.NodeConnectionFailure">
<em class="property"><span class="pre">exception</span> </em><span class="sig-prename descclassname"><span class="pre">pomice.exceptions.</span></span><span class="sig-name descname"><span class="pre">NodeConnectionFailure</span></span><a class="headerlink" href="#pomice.exceptions.NodeConnectionFailure" title="Permalink to this definition"></a></dt>
<dd><p>Bases: <a class="reference internal" href="#pomice.exceptions.NodeException" title="pomice.exceptions.NodeException"><code class="xref py py-class docutils literal notranslate"><span class="pre">pomice.exceptions.NodeException</span></code></a></p>
<p>There was a problem while connecting to the node.</p>
</dd></dl>
<dl class="py exception">
<dt class="sig sig-object py" id="pomice.exceptions.NodeCreationError">
<em class="property"><span class="pre">exception</span> </em><span class="sig-prename descclassname"><span class="pre">pomice.exceptions.</span></span><span class="sig-name descname"><span class="pre">NodeCreationError</span></span><a class="headerlink" href="#pomice.exceptions.NodeCreationError" title="Permalink to this definition"></a></dt>
<dd><p>Bases: <a class="reference internal" href="#pomice.exceptions.NodeException" title="pomice.exceptions.NodeException"><code class="xref py py-class docutils literal notranslate"><span class="pre">pomice.exceptions.NodeException</span></code></a></p>
<p>There was a problem while creating the node.</p>
</dd></dl>
<dl class="py exception">
<dt class="sig sig-object py" id="pomice.exceptions.NodeException">
<em class="property"><span class="pre">exception</span> </em><span class="sig-prename descclassname"><span class="pre">pomice.exceptions.</span></span><span class="sig-name descname"><span class="pre">NodeException</span></span><a class="headerlink" href="#pomice.exceptions.NodeException" title="Permalink to this definition"></a></dt>
<dd><p>Bases: <code class="xref py py-class docutils literal notranslate"><span class="pre">Exception</span></code></p>
<p>Base exception for nodes.</p>
</dd></dl>
<dl class="py exception">
<dt class="sig sig-object py" id="pomice.exceptions.NodeNotAvailable">
<em class="property"><span class="pre">exception</span> </em><span class="sig-prename descclassname"><span class="pre">pomice.exceptions.</span></span><span class="sig-name descname"><span class="pre">NodeNotAvailable</span></span><a class="headerlink" href="#pomice.exceptions.NodeNotAvailable" title="Permalink to this definition"></a></dt>
<dd><p>Bases: <a class="reference internal" href="#pomice.exceptions.PomiceException" title="pomice.exceptions.PomiceException"><code class="xref py py-class docutils literal notranslate"><span class="pre">pomice.exceptions.PomiceException</span></code></a></p>
<p>The node is currently unavailable.</p>
</dd></dl>
<dl class="py exception">
<dt class="sig sig-object py" id="pomice.exceptions.PomiceException">
<em class="property"><span class="pre">exception</span> </em><span class="sig-prename descclassname"><span class="pre">pomice.exceptions.</span></span><span class="sig-name descname"><span class="pre">PomiceException</span></span><a class="headerlink" href="#pomice.exceptions.PomiceException" title="Permalink to this definition"></a></dt>
<dd><p>Bases: <code class="xref py py-class docutils literal notranslate"><span class="pre">Exception</span></code></p>
<p>Base of all Pomice exceptions.</p>
</dd></dl>
<dl class="py exception">
<dt class="sig sig-object py" id="pomice.exceptions.SpotifyAlbumLoadFailed">
<em class="property"><span class="pre">exception</span> </em><span class="sig-prename descclassname"><span class="pre">pomice.exceptions.</span></span><span class="sig-name descname"><span class="pre">SpotifyAlbumLoadFailed</span></span><a class="headerlink" href="#pomice.exceptions.SpotifyAlbumLoadFailed" title="Permalink to this definition"></a></dt>
<dd><p>Bases: <a class="reference internal" href="#pomice.exceptions.PomiceException" title="pomice.exceptions.PomiceException"><code class="xref py py-class docutils literal notranslate"><span class="pre">pomice.exceptions.PomiceException</span></code></a></p>
<p>The pomice Spotify client was unable to load an album.</p>
</dd></dl>
<dl class="py exception">
<dt class="sig sig-object py" id="pomice.exceptions.SpotifyPlaylistLoadFailed">
<em class="property"><span class="pre">exception</span> </em><span class="sig-prename descclassname"><span class="pre">pomice.exceptions.</span></span><span class="sig-name descname"><span class="pre">SpotifyPlaylistLoadFailed</span></span><a class="headerlink" href="#pomice.exceptions.SpotifyPlaylistLoadFailed" title="Permalink to this definition"></a></dt>
<dd><p>Bases: <a class="reference internal" href="#pomice.exceptions.PomiceException" title="pomice.exceptions.PomiceException"><code class="xref py py-class docutils literal notranslate"><span class="pre">pomice.exceptions.PomiceException</span></code></a></p>
<p>The pomice Spotify client was unable to load a playlist.</p>
</dd></dl>
<dl class="py exception">
<dt class="sig sig-object py" id="pomice.exceptions.SpotifyTrackLoadFailed">
<em class="property"><span class="pre">exception</span> </em><span class="sig-prename descclassname"><span class="pre">pomice.exceptions.</span></span><span class="sig-name descname"><span class="pre">SpotifyTrackLoadFailed</span></span><a class="headerlink" href="#pomice.exceptions.SpotifyTrackLoadFailed" title="Permalink to this definition"></a></dt>
<dd><p>Bases: <a class="reference internal" href="#pomice.exceptions.PomiceException" title="pomice.exceptions.PomiceException"><code class="xref py py-class docutils literal notranslate"><span class="pre">pomice.exceptions.PomiceException</span></code></a></p>
<p>The pomice Spotify client was unable to load a track.</p>
</dd></dl>
<dl class="py exception">
<dt class="sig sig-object py" id="pomice.exceptions.TrackInvalidPosition">
<em class="property"><span class="pre">exception</span> </em><span class="sig-prename descclassname"><span class="pre">pomice.exceptions.</span></span><span class="sig-name descname"><span class="pre">TrackInvalidPosition</span></span><a class="headerlink" href="#pomice.exceptions.TrackInvalidPosition" title="Permalink to this definition"></a></dt>
<dd><p>Bases: <a class="reference internal" href="#pomice.exceptions.PomiceException" title="pomice.exceptions.PomiceException"><code class="xref py py-class docutils literal notranslate"><span class="pre">pomice.exceptions.PomiceException</span></code></a></p>
<p>An invalid position was chosen for a track.</p>
</dd></dl>
<dl class="py exception">
<dt class="sig sig-object py" id="pomice.exceptions.TrackLoadError">
<em class="property"><span class="pre">exception</span> </em><span class="sig-prename descclassname"><span class="pre">pomice.exceptions.</span></span><span class="sig-name descname"><span class="pre">TrackLoadError</span></span><a class="headerlink" href="#pomice.exceptions.TrackLoadError" title="Permalink to this definition"></a></dt>
<dd><p>Bases: <a class="reference internal" href="#pomice.exceptions.PomiceException" title="pomice.exceptions.PomiceException"><code class="xref py py-class docutils literal notranslate"><span class="pre">pomice.exceptions.PomiceException</span></code></a></p>
<p>There was an error while loading a track.</p>
</dd></dl>
</section>
<section id="module-pomice.filters">
<span id="filters"></span><h2>Filters<a class="headerlink" href="#module-pomice.filters" title="Permalink to this headline"></a></h2>
<dl class="py class">
<dt class="sig sig-object py" id="pomice.filters.ChannelMix">
<em class="property"><span class="pre">class</span> </em><span class="sig-prename descclassname"><span class="pre">pomice.filters.</span></span><span class="sig-name descname"><span class="pre">ChannelMix</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="o"><span class="pre">*</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">left_to_left</span></span><span class="p"><span class="pre">:</span></span> <span class="n"><span class="pre">float</span></span> <span class="o"><span class="pre">=</span></span> <span class="default_value"><span class="pre">1</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">right_to_right</span></span><span class="p"><span class="pre">:</span></span> <span class="n"><span class="pre">float</span></span> <span class="o"><span class="pre">=</span></span> <span class="default_value"><span class="pre">1</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">left_to_right</span></span><span class="p"><span class="pre">:</span></span> <span class="n"><span class="pre">float</span></span> <span class="o"><span class="pre">=</span></span> <span class="default_value"><span class="pre">0</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">right_to_left</span></span><span class="p"><span class="pre">:</span></span> <span class="n"><span class="pre">float</span></span> <span class="o"><span class="pre">=</span></span> <span class="default_value"><span class="pre">0</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#pomice.filters.ChannelMix" title="Permalink to this definition"></a></dt>
<dd><p>Bases: <a class="reference internal" href="#pomice.filters.Filter" title="pomice.filters.Filter"><code class="xref py py-class docutils literal notranslate"><span class="pre">pomice.filters.Filter</span></code></a></p>
<p>Filter which manually adjusts the panning of the audio, which can make
for some cool effects when done correctly.</p>
</dd></dl>
<dl class="py class">
<dt class="sig sig-object py" id="pomice.filters.Distortion">
<em class="property"><span class="pre">class</span> </em><span class="sig-prename descclassname"><span class="pre">pomice.filters.</span></span><span class="sig-name descname"><span class="pre">Distortion</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="o"><span class="pre">*</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">sin_offset</span></span><span class="p"><span class="pre">:</span></span> <span class="n"><span class="pre">float</span></span> <span class="o"><span class="pre">=</span></span> <span class="default_value"><span class="pre">0</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">sin_scale</span></span><span class="p"><span class="pre">:</span></span> <span class="n"><span class="pre">float</span></span> <span class="o"><span class="pre">=</span></span> <span class="default_value"><span class="pre">1</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">cos_offset</span></span><span class="p"><span class="pre">:</span></span> <span class="n"><span class="pre">float</span></span> <span class="o"><span class="pre">=</span></span> <span class="default_value"><span class="pre">0</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">cos_scale</span></span><span class="p"><span class="pre">:</span></span> <span class="n"><span class="pre">float</span></span> <span class="o"><span class="pre">=</span></span> <span class="default_value"><span class="pre">1</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">tan_offset</span></span><span class="p"><span class="pre">:</span></span> <span class="n"><span class="pre">float</span></span> <span class="o"><span class="pre">=</span></span> <span class="default_value"><span class="pre">0</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">tan_scale</span></span><span class="p"><span class="pre">:</span></span> <span class="n"><span class="pre">float</span></span> <span class="o"><span class="pre">=</span></span> <span class="default_value"><span class="pre">1</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">offset</span></span><span class="p"><span class="pre">:</span></span> <span class="n"><span class="pre">float</span></span> <span class="o"><span class="pre">=</span></span> <span class="default_value"><span class="pre">0</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">scale</span></span><span class="p"><span class="pre">:</span></span> <span class="n"><span class="pre">float</span></span> <span class="o"><span class="pre">=</span></span> <span class="default_value"><span class="pre">1</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#pomice.filters.Distortion" title="Permalink to this definition"></a></dt>
<dd><p>Bases: <a class="reference internal" href="#pomice.filters.Filter" title="pomice.filters.Filter"><code class="xref py py-class docutils literal notranslate"><span class="pre">pomice.filters.Filter</span></code></a></p>
<p>Filter which generates a distortion effect. Useful for certain filter implementations where
distortion is needed.</p>
</dd></dl>
<dl class="py class">
<dt class="sig sig-object py" id="pomice.filters.Equalizer">
<em class="property"><span class="pre">class</span> </em><span class="sig-prename descclassname"><span class="pre">pomice.filters.</span></span><span class="sig-name descname"><span class="pre">Equalizer</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="o"><span class="pre">*</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">levels</span></span><span class="p"><span class="pre">:</span></span> <span class="n"><span class="pre">list</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#pomice.filters.Equalizer" title="Permalink to this definition"></a></dt>
<dd><p>Bases: <code class="xref py py-class docutils literal notranslate"><span class="pre">object</span></code></p>
<p>Filter which represents a 15 band equalizer.
You can adjust the dynamic of the sound using this filter.
i.e: Applying a bass boost filter to emphasize the bass in a song.
The format for the levels is: List[Tuple[int, float]]</p>
</dd></dl>
<dl class="py class">
<dt class="sig sig-object py" id="pomice.filters.Filter">
<em class="property"><span class="pre">class</span> </em><span class="sig-prename descclassname"><span class="pre">pomice.filters.</span></span><span class="sig-name descname"><span class="pre">Filter</span></span><a class="headerlink" href="#pomice.filters.Filter" title="Permalink to this definition"></a></dt>
<dd><p>Bases: <code class="xref py py-class docutils literal notranslate"><span class="pre">object</span></code></p>
</dd></dl>
<dl class="py class">
<dt class="sig sig-object py" id="pomice.filters.Karaoke">
<em class="property"><span class="pre">class</span> </em><span class="sig-prename descclassname"><span class="pre">pomice.filters.</span></span><span class="sig-name descname"><span class="pre">Karaoke</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="o"><span class="pre">*</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">level</span></span><span class="p"><span class="pre">:</span></span> <span class="n"><span class="pre">float</span></span> <span class="o"><span class="pre">=</span></span> <span class="default_value"><span class="pre">1.0</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">mono_level</span></span><span class="p"><span class="pre">:</span></span> <span class="n"><span class="pre">float</span></span> <span class="o"><span class="pre">=</span></span> <span class="default_value"><span class="pre">1.0</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">filter_band</span></span><span class="p"><span class="pre">:</span></span> <span class="n"><span class="pre">float</span></span> <span class="o"><span class="pre">=</span></span> <span class="default_value"><span class="pre">220.0</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">filter_width</span></span><span class="p"><span class="pre">:</span></span> <span class="n"><span class="pre">float</span></span> <span class="o"><span class="pre">=</span></span> <span class="default_value"><span class="pre">100.0</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#pomice.filters.Karaoke" title="Permalink to this definition"></a></dt>
<dd><p>Bases: <a class="reference internal" href="#pomice.filters.Filter" title="pomice.filters.Filter"><code class="xref py py-class docutils literal notranslate"><span class="pre">pomice.filters.Filter</span></code></a></p>
<p>Filter which filters the vocal track from any song and leaves the instrumental.
Best for karaoke as the filter implies.</p>
</dd></dl>
<dl class="py class">
<dt class="sig sig-object py" id="pomice.filters.LowPass">
<em class="property"><span class="pre">class</span> </em><span class="sig-prename descclassname"><span class="pre">pomice.filters.</span></span><span class="sig-name descname"><span class="pre">LowPass</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="o"><span class="pre">*</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">smoothing</span></span><span class="p"><span class="pre">:</span></span> <span class="n"><span class="pre">float</span></span> <span class="o"><span class="pre">=</span></span> <span class="default_value"><span class="pre">20</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#pomice.filters.LowPass" title="Permalink to this definition"></a></dt>
<dd><p>Bases: <a class="reference internal" href="#pomice.filters.Filter" title="pomice.filters.Filter"><code class="xref py py-class docutils literal notranslate"><span class="pre">pomice.filters.Filter</span></code></a></p>
<p>Filter which supresses higher frequencies and allows lower frequencies to pass.
You can also do this with the Equalizer filter, but this is an easier way to do it.</p>
</dd></dl>
<dl class="py class">
<dt class="sig sig-object py" id="pomice.filters.Rotation">
<em class="property"><span class="pre">class</span> </em><span class="sig-prename descclassname"><span class="pre">pomice.filters.</span></span><span class="sig-name descname"><span class="pre">Rotation</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="o"><span class="pre">*</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">rotation_hertz</span></span><span class="p"><span class="pre">:</span></span> <span class="n"><span class="pre">float</span></span> <span class="o"><span class="pre">=</span></span> <span class="default_value"><span class="pre">5</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#pomice.filters.Rotation" title="Permalink to this definition"></a></dt>
<dd><p>Bases: <a class="reference internal" href="#pomice.filters.Filter" title="pomice.filters.Filter"><code class="xref py py-class docutils literal notranslate"><span class="pre">pomice.filters.Filter</span></code></a></p>
<p>Filter which produces a stereo-like panning effect, which sounds like
the audio is being rotated around the listeners head</p>
</dd></dl>
<dl class="py class">
<dt class="sig sig-object py" id="pomice.filters.Timescale">
<em class="property"><span class="pre">class</span> </em><span class="sig-prename descclassname"><span class="pre">pomice.filters.</span></span><span class="sig-name descname"><span class="pre">Timescale</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="o"><span class="pre">*</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">speed</span></span><span class="p"><span class="pre">:</span></span> <span class="n"><span class="pre">float</span></span> <span class="o"><span class="pre">=</span></span> <span class="default_value"><span class="pre">1.0</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">pitch</span></span><span class="p"><span class="pre">:</span></span> <span class="n"><span class="pre">float</span></span> <span class="o"><span class="pre">=</span></span> <span class="default_value"><span class="pre">1.0</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">rate</span></span><span class="p"><span class="pre">:</span></span> <span class="n"><span class="pre">float</span></span> <span class="o"><span class="pre">=</span></span> <span class="default_value"><span class="pre">1.0</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#pomice.filters.Timescale" title="Permalink to this definition"></a></dt>
<dd><p>Bases: <a class="reference internal" href="#pomice.filters.Filter" title="pomice.filters.Filter"><code class="xref py py-class docutils literal notranslate"><span class="pre">pomice.filters.Filter</span></code></a></p>
<p>Filter which changes the speed and pitch of a track.
Do be warned that this filter is bugged as of the lastest Lavalink dev version
due to the filter patch not corresponding with the track time.</p>
<p>In short this means that your track will either end prematurely or end later due to this.
This is not the librarys fault.</p>
</dd></dl>
<dl class="py class">
<dt class="sig sig-object py" id="pomice.filters.Tremolo">
<em class="property"><span class="pre">class</span> </em><span class="sig-prename descclassname"><span class="pre">pomice.filters.</span></span><span class="sig-name descname"><span class="pre">Tremolo</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="o"><span class="pre">*</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">frequency</span></span><span class="p"><span class="pre">:</span></span> <span class="n"><span class="pre">float</span></span> <span class="o"><span class="pre">=</span></span> <span class="default_value"><span class="pre">2.0</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">depth</span></span><span class="p"><span class="pre">:</span></span> <span class="n"><span class="pre">float</span></span> <span class="o"><span class="pre">=</span></span> <span class="default_value"><span class="pre">0.5</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#pomice.filters.Tremolo" title="Permalink to this definition"></a></dt>
<dd><p>Bases: <a class="reference internal" href="#pomice.filters.Filter" title="pomice.filters.Filter"><code class="xref py py-class docutils literal notranslate"><span class="pre">pomice.filters.Filter</span></code></a></p>
<p>Filter which produces a wavering tone in the music,
causing it to sound like the music is changing in volume rapidly.</p>
</dd></dl>
<dl class="py class">
<dt class="sig sig-object py" id="pomice.filters.Vibrato">
<em class="property"><span class="pre">class</span> </em><span class="sig-prename descclassname"><span class="pre">pomice.filters.</span></span><span class="sig-name descname"><span class="pre">Vibrato</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="o"><span class="pre">*</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">frequency</span></span><span class="p"><span class="pre">:</span></span> <span class="n"><span class="pre">float</span></span> <span class="o"><span class="pre">=</span></span> <span class="default_value"><span class="pre">2.0</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">depth</span></span><span class="p"><span class="pre">:</span></span> <span class="n"><span class="pre">float</span></span> <span class="o"><span class="pre">=</span></span> <span class="default_value"><span class="pre">0.5</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#pomice.filters.Vibrato" title="Permalink to this definition"></a></dt>
<dd><p>Bases: <a class="reference internal" href="#pomice.filters.Filter" title="pomice.filters.Filter"><code class="xref py py-class docutils literal notranslate"><span class="pre">pomice.filters.Filter</span></code></a></p>
<p>Filter which produces a wavering tone in the music, similar to the Tremolo filter,
but changes in pitch rather than volume.</p>
</dd></dl>
</section>
<section id="module-pomice.objects">
<span id="objects"></span><h2>Objects<a class="headerlink" href="#module-pomice.objects" title="Permalink to this headline"></a></h2>
<dl class="py class">
<dt class="sig sig-object py" id="pomice.objects.Playlist">
<em class="property"><span class="pre">class</span> </em><span class="sig-prename descclassname"><span class="pre">pomice.objects.</span></span><span class="sig-name descname"><span class="pre">Playlist</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="o"><span class="pre">*</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">playlist_info</span></span><span class="p"><span class="pre">:</span></span> <span class="n"><span class="pre">dict</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">tracks</span></span><span class="p"><span class="pre">:</span></span> <span class="n"><span class="pre">list</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">ctx</span></span><span class="p"><span class="pre">:</span></span> <span class="n"><span class="pre">Optional</span><span class="p"><span class="pre">[</span></span><span class="pre">discord.ext.commands.context.Context</span><span class="p"><span class="pre">]</span></span></span> <span class="o"><span class="pre">=</span></span> <span class="default_value"><span class="pre">None</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">spotify</span></span><span class="p"><span class="pre">:</span></span> <span class="n"><span class="pre">bool</span></span> <span class="o"><span class="pre">=</span></span> <span class="default_value"><span class="pre">False</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">thumbnail</span></span><span class="p"><span class="pre">:</span></span> <span class="n"><span class="pre">Optional</span><span class="p"><span class="pre">[</span></span><span class="pre">str</span><span class="p"><span class="pre">]</span></span></span> <span class="o"><span class="pre">=</span></span> <span class="default_value"><span class="pre">None</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">uri</span></span><span class="p"><span class="pre">:</span></span> <span class="n"><span class="pre">Optional</span><span class="p"><span class="pre">[</span></span><span class="pre">str</span><span class="p"><span class="pre">]</span></span></span> <span class="o"><span class="pre">=</span></span> <span class="default_value"><span class="pre">None</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#pomice.objects.Playlist" title="Permalink to this definition"></a></dt>
<dd><p>Bases: <code class="xref py py-class docutils literal notranslate"><span class="pre">object</span></code></p>
<p>The base playlist object.
Returns critical playlist information needed for parsing by Lavalink.
You can also pass in commands.Context to get a discord.py Context object in your tracks.</p>
<dl class="py property">
<dt class="sig sig-object py" id="pomice.objects.Playlist.thumbnail">
<em class="property"><span class="pre">property</span> </em><span class="sig-name descname"><span class="pre">thumbnail</span></span><em class="property"><span class="pre">:</span> <span class="pre">Optional</span><span class="p"><span class="pre">[</span></span><span class="pre">str</span><span class="p"><span class="pre">]</span></span></em><a class="headerlink" href="#pomice.objects.Playlist.thumbnail" title="Permalink to this definition"></a></dt>
<dd><p>Spotify album/playlist thumbnail, or None if not a Spotify object.</p>
</dd></dl>
<dl class="py property">
<dt class="sig sig-object py" id="pomice.objects.Playlist.uri">
<em class="property"><span class="pre">property</span> </em><span class="sig-name descname"><span class="pre">uri</span></span><em class="property"><span class="pre">:</span> <span class="pre">Optional</span><span class="p"><span class="pre">[</span></span><span class="pre">str</span><span class="p"><span class="pre">]</span></span></em><a class="headerlink" href="#pomice.objects.Playlist.uri" title="Permalink to this definition"></a></dt>
<dd><p>Spotify album/playlist URI, or None if not a Spotify object.</p>
</dd></dl>
</dd></dl>
<dl class="py class">
<dt class="sig sig-object py" id="pomice.objects.Track">
<em class="property"><span class="pre">class</span> </em><span class="sig-prename descclassname"><span class="pre">pomice.objects.</span></span><span class="sig-name descname"><span class="pre">Track</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="o"><span class="pre">*</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">track_id</span></span><span class="p"><span class="pre">:</span></span> <span class="n"><span class="pre">str</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">info</span></span><span class="p"><span class="pre">:</span></span> <span class="n"><span class="pre">dict</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">ctx</span></span><span class="p"><span class="pre">:</span></span> <span class="n"><span class="pre">Optional</span><span class="p"><span class="pre">[</span></span><span class="pre">discord.ext.commands.context.Context</span><span class="p"><span class="pre">]</span></span></span> <span class="o"><span class="pre">=</span></span> <span class="default_value"><span class="pre">None</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">spotify</span></span><span class="p"><span class="pre">:</span></span> <span class="n"><span class="pre">bool</span></span> <span class="o"><span class="pre">=</span></span> <span class="default_value"><span class="pre">False</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">search_type</span></span><span class="p"><span class="pre">:</span></span> <span class="n"><a class="reference internal" href="#pomice.enums.SearchType" title="pomice.enums.SearchType"><span class="pre">pomice.enums.SearchType</span></a></span> <span class="o"><span class="pre">=</span></span> <span class="default_value"><span class="pre">SearchType.ytsearch</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#pomice.objects.Track" title="Permalink to this definition"></a></dt>
<dd><p>Bases: <code class="xref py py-class docutils literal notranslate"><span class="pre">object</span></code></p>
<p>The base track object. Returns critical track information needed for parsing by Lavalink.
You can also pass in commands.Context to get a discord.py Context object in your track.</p>
</dd></dl>
</section>
<section id="module-pomice.player">
<span id="player"></span><h2>Player<a class="headerlink" href="#module-pomice.player" title="Permalink to this headline"></a></h2>
<dl class="py class">
<dt class="sig sig-object py" id="pomice.player.Player">
<em class="property"><span class="pre">class</span> </em><span class="sig-prename descclassname"><span class="pre">pomice.player.</span></span><span class="sig-name descname"><span class="pre">Player</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">client</span></span><span class="p"><span class="pre">:</span></span> <span class="n"><span class="pre">Optional</span><span class="p"><span class="pre">[</span></span><span class="pre">Union</span><span class="p"><span class="pre">[</span></span><span class="pre">discord.ext.commands.bot.AutoShardedBot</span><span class="p"><span class="pre">,</span> </span><span class="pre">discord.shard.AutoShardedClient</span><span class="p"><span class="pre">,</span> </span><span class="pre">discord.ext.commands.bot.Bot</span><span class="p"><span class="pre">,</span> </span><span class="pre">discord.client.Client</span><span class="p"><span class="pre">]</span></span><span class="p"><span class="pre">]</span></span></span> <span class="o"><span class="pre">=</span></span> <span class="default_value"><span class="pre">None</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">channel</span></span><span class="p"><span class="pre">:</span></span> <span class="n"><span class="pre">Optional</span><span class="p"><span class="pre">[</span></span><span class="pre">discord.channel.VoiceChannel</span><span class="p"><span class="pre">]</span></span></span> <span class="o"><span class="pre">=</span></span> <span class="default_value"><span class="pre">None</span></span></em>, <em class="sig-param"><span class="o"><span class="pre">**</span></span><span class="n"><span class="pre">kwargs</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#pomice.player.Player" title="Permalink to this definition"></a></dt>
<dd><p>Bases: <code class="xref py py-class docutils literal notranslate"><span class="pre">discord.voice_client.VoiceProtocol</span></code></p>
<p>The base player class for Pomice.
In order to initiate a player, you must pass it in as a cls when you connect to a channel.
i.e: <code class="docutils literal notranslate"><span class="pre">`py</span>
<span class="pre">await</span> <span class="pre">ctx.author.voice.channel.connect(cls=pomice.Player)</span>
<span class="pre">`</span></code></p>
<dl class="py property">
<dt class="sig sig-object py" id="pomice.player.Player.bot">
<em class="property"><span class="pre">property</span> </em><span class="sig-name descname"><span class="pre">bot</span></span><em class="property"><span class="pre">:</span> <span class="pre">Union</span><span class="p"><span class="pre">[</span></span><span class="pre">discord.ext.commands.bot.AutoShardedBot</span><span class="p"><span class="pre">,</span> </span><span class="pre">discord.shard.AutoShardedClient</span><span class="p"><span class="pre">,</span> </span><span class="pre">discord.ext.commands.bot.Bot</span><span class="p"><span class="pre">,</span> </span><span class="pre">discord.client.Client</span><span class="p"><span class="pre">]</span></span></em><a class="headerlink" href="#pomice.player.Player.bot" title="Permalink to this definition"></a></dt>
<dd><p>Property which returns the bot associated with this player instance</p>
</dd></dl>
<dl class="py method">
<dt class="sig sig-object py" id="pomice.player.Player.connect">
<em class="property"><span class="pre">async</span> </em><span class="sig-name descname"><span class="pre">connect</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="o"><span class="pre">*</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">timeout</span></span><span class="p"><span class="pre">:</span></span> <span class="n"><span class="pre">float</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">reconnect</span></span><span class="p"><span class="pre">:</span></span> <span class="n"><span class="pre">bool</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#pomice.player.Player.connect" title="Permalink to this definition"></a></dt>
<dd><p><a href="#id3"><span class="problematic" id="id4">|coro|</span></a></p>
<p>An abstract method called when the client initiates the connection request.</p>
<p>When a connection is requested initially, the library calls the constructor
under <code class="docutils literal notranslate"><span class="pre">__init__</span></code> and then calls <a class="reference internal" href="#pomice.player.Player.connect" title="pomice.player.Player.connect"><code class="xref py py-meth docutils literal notranslate"><span class="pre">connect()</span></code></a>. If <a class="reference internal" href="#pomice.player.Player.connect" title="pomice.player.Player.connect"><code class="xref py py-meth docutils literal notranslate"><span class="pre">connect()</span></code></a> fails at
some point then <a class="reference internal" href="#pomice.player.Player.disconnect" title="pomice.player.Player.disconnect"><code class="xref py py-meth docutils literal notranslate"><span class="pre">disconnect()</span></code></a> is called.</p>
<p>Within this method, to start the voice connection flow it is recommended to
use <code class="xref py py-meth docutils literal notranslate"><span class="pre">Guild.change_voice_state()</span></code> to start the flow. After which,
<a class="reference internal" href="#pomice.player.Player.on_voice_server_update" title="pomice.player.Player.on_voice_server_update"><code class="xref py py-meth docutils literal notranslate"><span class="pre">on_voice_server_update()</span></code></a> and <a class="reference internal" href="#pomice.player.Player.on_voice_state_update" title="pomice.player.Player.on_voice_state_update"><code class="xref py py-meth docutils literal notranslate"><span class="pre">on_voice_state_update()</span></code></a> will be called.
The order that these two are called is unspecified.</p>
<dl class="simple">
<dt>timeout: <code class="xref py py-class docutils literal notranslate"><span class="pre">float</span></code></dt><dd><p>The timeout for the connection.</p>
</dd>
<dt>reconnect: <code class="xref py py-class docutils literal notranslate"><span class="pre">bool</span></code></dt><dd><p>Whether reconnection is expected.</p>
</dd>
</dl>
</dd></dl>
<dl class="py property">
<dt class="sig sig-object py" id="pomice.player.Player.current">
<em class="property"><span class="pre">property</span> </em><span class="sig-name descname"><span class="pre">current</span></span><em class="property"><span class="pre">:</span> <a class="reference internal" href="#pomice.objects.Track" title="pomice.objects.Track"><span class="pre">pomice.objects.Track</span></a></em><a class="headerlink" href="#pomice.player.Player.current" title="Permalink to this definition"></a></dt>
<dd><p>Property which returns the currently playing track</p>
</dd></dl>
<dl class="py method">
<dt class="sig sig-object py" id="pomice.player.Player.destroy">
<em class="property"><span class="pre">async</span> </em><span class="sig-name descname"><span class="pre">destroy</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#pomice.player.Player.destroy" title="Permalink to this definition"></a></dt>
<dd><p>Disconnects and destroys the player, and runs internal cleanup.</p>
</dd></dl>
<dl class="py method">
<dt class="sig sig-object py" id="pomice.player.Player.disconnect">
<em class="property"><span class="pre">async</span> </em><span class="sig-name descname"><span class="pre">disconnect</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="o"><span class="pre">*</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">force</span></span><span class="p"><span class="pre">:</span></span> <span class="n"><span class="pre">bool</span></span> <span class="o"><span class="pre">=</span></span> <span class="default_value"><span class="pre">False</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#pomice.player.Player.disconnect" title="Permalink to this definition"></a></dt>
<dd><p>Disconnects the player from voice.</p>
</dd></dl>
<dl class="py property">
<dt class="sig sig-object py" id="pomice.player.Player.filter">
<em class="property"><span class="pre">property</span> </em><span class="sig-name descname"><span class="pre">filter</span></span><em class="property"><span class="pre">:</span> <a class="reference internal" href="#pomice.filters.Filter" title="pomice.filters.Filter"><span class="pre">pomice.filters.Filter</span></a></em><a class="headerlink" href="#pomice.player.Player.filter" title="Permalink to this definition"></a></dt>
<dd><p>Property which returns the currently applied filter, if one is applied</p>
</dd></dl>
<dl class="py method">
<dt class="sig sig-object py" id="pomice.player.Player.get_tracks">
<em class="property"><span class="pre">async</span> </em><span class="sig-name descname"><span class="pre">get_tracks</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">query</span></span><span class="p"><span class="pre">:</span></span> <span class="n"><span class="pre">str</span></span></em>, <em class="sig-param"><span class="o"><span class="pre">*</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">ctx</span></span><span class="p"><span class="pre">:</span></span> <span class="n"><span class="pre">Optional</span><span class="p"><span class="pre">[</span></span><span class="pre">discord.ext.commands.context.Context</span><span class="p"><span class="pre">]</span></span></span> <span class="o"><span class="pre">=</span></span> <span class="default_value"><span class="pre">None</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">search_type</span></span><span class="p"><span class="pre">:</span></span> <span class="n"><a class="reference internal" href="#pomice.enums.SearchType" title="pomice.enums.SearchType"><span class="pre">pomice.enums.SearchType</span></a></span> <span class="o"><span class="pre">=</span></span> <span class="default_value"><span class="pre">SearchType.ytsearch</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#pomice.player.Player.get_tracks" title="Permalink to this definition"></a></dt>
<dd><p>Fetches tracks from the nodes REST api to parse into Lavalink.</p>
<p>If you passed in Spotify API credentials when you created the node,
you can also pass in a Spotify URL of a playlist, album or track and it will be parsed
accordingly.</p>
<p>You can also pass in a discord.py Context object to get a
Context object on any track you search.</p>
</dd></dl>
<dl class="py property">
<dt class="sig sig-object py" id="pomice.player.Player.guild">
<em class="property"><span class="pre">property</span> </em><span class="sig-name descname"><span class="pre">guild</span></span><em class="property"><span class="pre">:</span> <span class="pre">discord.guild.Guild</span></em><a class="headerlink" href="#pomice.player.Player.guild" title="Permalink to this definition"></a></dt>
<dd><p>Property which returns the guild associated with the player</p>
</dd></dl>
<dl class="py property">
<dt class="sig sig-object py" id="pomice.player.Player.is_connected">
<em class="property"><span class="pre">property</span> </em><span class="sig-name descname"><span class="pre">is_connected</span></span><em class="property"><span class="pre">:</span> <span class="pre">bool</span></em><a class="headerlink" href="#pomice.player.Player.is_connected" title="Permalink to this definition"></a></dt>
<dd><p>Property which returns whether or not the player is connected</p>
</dd></dl>
<dl class="py property">
<dt class="sig sig-object py" id="pomice.player.Player.is_dead">
<em class="property"><span class="pre">property</span> </em><span class="sig-name descname"><span class="pre">is_dead</span></span><em class="property"><span class="pre">:</span> <span class="pre">bool</span></em><a class="headerlink" href="#pomice.player.Player.is_dead" title="Permalink to this definition"></a></dt>
<dd><p>Returns a bool representing whether the player is dead or not.
A player is considered dead if it has been destroyed and removed from stored players.</p>
</dd></dl>
<dl class="py property">
<dt class="sig sig-object py" id="pomice.player.Player.is_paused">
<em class="property"><span class="pre">property</span> </em><span class="sig-name descname"><span class="pre">is_paused</span></span><em class="property"><span class="pre">:</span> <span class="pre">bool</span></em><a class="headerlink" href="#pomice.player.Player.is_paused" title="Permalink to this definition"></a></dt>
<dd><p>Property which returns whether or not the player has a track which is paused or not.</p>
</dd></dl>
<dl class="py property">
<dt class="sig sig-object py" id="pomice.player.Player.is_playing">
<em class="property"><span class="pre">property</span> </em><span class="sig-name descname"><span class="pre">is_playing</span></span><em class="property"><span class="pre">:</span> <span class="pre">bool</span></em><a class="headerlink" href="#pomice.player.Player.is_playing" title="Permalink to this definition"></a></dt>
<dd><p>Property which returns whether or not the player is actively playing a track.</p>
</dd></dl>
<dl class="py property">
<dt class="sig sig-object py" id="pomice.player.Player.node">
<em class="property"><span class="pre">property</span> </em><span class="sig-name descname"><span class="pre">node</span></span><em class="property"><span class="pre">:</span> <a class="reference internal" href="#pomice.pool.Node" title="pomice.pool.Node"><span class="pre">pomice.pool.Node</span></a></em><a class="headerlink" href="#pomice.player.Player.node" title="Permalink to this definition"></a></dt>
<dd><p>Property which returns the node the player is connected to</p>
</dd></dl>
<dl class="py method">
<dt class="sig sig-object py" id="pomice.player.Player.on_voice_server_update">
<em class="property"><span class="pre">async</span> </em><span class="sig-name descname"><span class="pre">on_voice_server_update</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">data</span></span><span class="p"><span class="pre">:</span></span> <span class="n"><span class="pre">dict</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#pomice.player.Player.on_voice_server_update" title="Permalink to this definition"></a></dt>
<dd><p><a href="#id5"><span class="problematic" id="id6">|coro|</span></a></p>
<p>An abstract method that is called when initially connecting to voice.
This corresponds to <code class="docutils literal notranslate"><span class="pre">VOICE_SERVER_UPDATE</span></code>.</p>
<dl class="simple">
<dt>data: <code class="xref py py-class docutils literal notranslate"><span class="pre">dict</span></code></dt><dd><p>The raw <a class="reference external" href="https://discord.com/developers/docs/topics/gateway#voice-server-update-voice-server-update-event-fields">voice server update payload</a>.</p>
</dd>
</dl>
</dd></dl>
<dl class="py method">
<dt class="sig sig-object py" id="pomice.player.Player.on_voice_state_update">
<em class="property"><span class="pre">async</span> </em><span class="sig-name descname"><span class="pre">on_voice_state_update</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">data</span></span><span class="p"><span class="pre">:</span></span> <span class="n"><span class="pre">dict</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#pomice.player.Player.on_voice_state_update" title="Permalink to this definition"></a></dt>
<dd><p><a href="#id7"><span class="problematic" id="id8">|coro|</span></a></p>
<p>An abstract method that is called when the clients voice state
has changed. This corresponds to <code class="docutils literal notranslate"><span class="pre">VOICE_STATE_UPDATE</span></code>.</p>
<dl class="simple">
<dt>data: <code class="xref py py-class docutils literal notranslate"><span class="pre">dict</span></code></dt><dd><p>The raw <a class="reference external" href="https://discord.com/developers/docs/resources/voice#voice-state-object">voice state payload</a>.</p>
</dd>
</dl>
</dd></dl>
<dl class="py method">
<dt class="sig sig-object py" id="pomice.player.Player.play">
<em class="property"><span class="pre">async</span> </em><span class="sig-name descname"><span class="pre">play</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">track</span></span><span class="p"><span class="pre">:</span></span> <span class="n"><a class="reference internal" href="#pomice.objects.Track" title="pomice.objects.Track"><span class="pre">pomice.objects.Track</span></a></span></em>, <em class="sig-param"><span class="o"><span class="pre">*</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">start</span></span><span class="p"><span class="pre">:</span></span> <span class="n"><span class="pre">int</span></span> <span class="o"><span class="pre">=</span></span> <span class="default_value"><span class="pre">0</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">end</span></span><span class="p"><span class="pre">:</span></span> <span class="n"><span class="pre">int</span></span> <span class="o"><span class="pre">=</span></span> <span class="default_value"><span class="pre">0</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">ignore_if_playing</span></span><span class="p"><span class="pre">:</span></span> <span class="n"><span class="pre">bool</span></span> <span class="o"><span class="pre">=</span></span> <span class="default_value"><span class="pre">False</span></span></em><span class="sig-paren">)</span> <span class="sig-return"><span class="sig-return-icon">&#x2192;</span> <span class="sig-return-typehint"><a class="reference internal" href="#pomice.objects.Track" title="pomice.objects.Track"><span class="pre">pomice.objects.Track</span></a></span></span><a class="headerlink" href="#pomice.player.Player.play" title="Permalink to this definition"></a></dt>
<dd><p>Plays a track. If a Spotify track is passed in, it will be handled accordingly.</p>
</dd></dl>
<dl class="py property">
<dt class="sig sig-object py" id="pomice.player.Player.position">
<em class="property"><span class="pre">property</span> </em><span class="sig-name descname"><span class="pre">position</span></span><em class="property"><span class="pre">:</span> <span class="pre">float</span></em><a class="headerlink" href="#pomice.player.Player.position" title="Permalink to this definition"></a></dt>
<dd><p>Property which returns the players position in a track in milliseconds</p>
</dd></dl>
<dl class="py method">
<dt class="sig sig-object py" id="pomice.player.Player.seek">
<em class="property"><span class="pre">async</span> </em><span class="sig-name descname"><span class="pre">seek</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">position</span></span><span class="p"><span class="pre">:</span></span> <span class="n"><span class="pre">float</span></span></em><span class="sig-paren">)</span> <span class="sig-return"><span class="sig-return-icon">&#x2192;</span> <span class="sig-return-typehint"><span class="pre">float</span></span></span><a class="headerlink" href="#pomice.player.Player.seek" title="Permalink to this definition"></a></dt>
<dd><p>Seeks to a position in the currently playing track milliseconds</p>
</dd></dl>
<dl class="py method">
<dt class="sig sig-object py" id="pomice.player.Player.set_filter">
<em class="property"><span class="pre">async</span> </em><span class="sig-name descname"><span class="pre">set_filter</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">filter</span></span><span class="p"><span class="pre">:</span></span> <span class="n"><a class="reference internal" href="#pomice.filters.Filter" title="pomice.filters.Filter"><span class="pre">pomice.filters.Filter</span></a></span></em><span class="sig-paren">)</span> <span class="sig-return"><span class="sig-return-icon">&#x2192;</span> <span class="sig-return-typehint"><a class="reference internal" href="#pomice.filters.Filter" title="pomice.filters.Filter"><span class="pre">pomice.filters.Filter</span></a></span></span><a class="headerlink" href="#pomice.player.Player.set_filter" title="Permalink to this definition"></a></dt>
<dd><p>Sets a filter of the player. Takes a pomice.Filter object.
This will only work if you are using the development version of Lavalink.</p>
</dd></dl>
<dl class="py method">
<dt class="sig sig-object py" id="pomice.player.Player.set_pause">
<em class="property"><span class="pre">async</span> </em><span class="sig-name descname"><span class="pre">set_pause</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">pause</span></span><span class="p"><span class="pre">:</span></span> <span class="n"><span class="pre">bool</span></span></em><span class="sig-paren">)</span> <span class="sig-return"><span class="sig-return-icon">&#x2192;</span> <span class="sig-return-typehint"><span class="pre">bool</span></span></span><a class="headerlink" href="#pomice.player.Player.set_pause" title="Permalink to this definition"></a></dt>
<dd><p>Sets the pause state of the currently playing track.</p>
</dd></dl>
<dl class="py method">
<dt class="sig sig-object py" id="pomice.player.Player.set_volume">
<em class="property"><span class="pre">async</span> </em><span class="sig-name descname"><span class="pre">set_volume</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">volume</span></span><span class="p"><span class="pre">:</span></span> <span class="n"><span class="pre">int</span></span></em><span class="sig-paren">)</span> <span class="sig-return"><span class="sig-return-icon">&#x2192;</span> <span class="sig-return-typehint"><span class="pre">int</span></span></span><a class="headerlink" href="#pomice.player.Player.set_volume" title="Permalink to this definition"></a></dt>
<dd><p>Sets the volume of the player as an integer. Lavalink accepts values from 0 to 500.</p>
</dd></dl>
<dl class="py method">
<dt class="sig sig-object py" id="pomice.player.Player.stop">
<em class="property"><span class="pre">async</span> </em><span class="sig-name descname"><span class="pre">stop</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#pomice.player.Player.stop" title="Permalink to this definition"></a></dt>
<dd><p>Stops the currently playing track.</p>
</dd></dl>
<dl class="py property">
<dt class="sig sig-object py" id="pomice.player.Player.volume">
<em class="property"><span class="pre">property</span> </em><span class="sig-name descname"><span class="pre">volume</span></span><em class="property"><span class="pre">:</span> <span class="pre">int</span></em><a class="headerlink" href="#pomice.player.Player.volume" title="Permalink to this definition"></a></dt>
<dd><p>Property which returns the players current volume</p>
</dd></dl>
</dd></dl>
</section>
<section id="module-pomice.pool">
<span id="pool"></span><h2>Pool<a class="headerlink" href="#module-pomice.pool" title="Permalink to this headline"></a></h2>
<dl class="py class">
<dt class="sig sig-object py" id="pomice.pool.Node">
<em class="property"><span class="pre">class</span> </em><span class="sig-prename descclassname"><span class="pre">pomice.pool.</span></span><span class="sig-name descname"><span class="pre">Node</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="o"><span class="pre">*</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">pool</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">bot</span></span><span class="p"><span class="pre">:</span></span> <span class="n"><span class="pre">Union</span><span class="p"><span class="pre">[</span></span><span class="pre">discord.ext.commands.bot.AutoShardedBot</span><span class="p"><span class="pre">,</span> </span><span class="pre">discord.shard.AutoShardedClient</span><span class="p"><span class="pre">,</span> </span><span class="pre">discord.ext.commands.bot.Bot</span><span class="p"><span class="pre">,</span> </span><span class="pre">discord.client.Client</span><span class="p"><span class="pre">]</span></span></span></em>, <em class="sig-param"><span class="n"><span class="pre">host</span></span><span class="p"><span class="pre">:</span></span> <span class="n"><span class="pre">str</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">port</span></span><span class="p"><span class="pre">:</span></span> <span class="n"><span class="pre">int</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">password</span></span><span class="p"><span class="pre">:</span></span> <span class="n"><span class="pre">str</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">identifier</span></span><span class="p"><span class="pre">:</span></span> <span class="n"><span class="pre">str</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">session</span></span><span class="p"><span class="pre">:</span></span> <span class="n"><span class="pre">Optional</span><span class="p"><span class="pre">[</span></span><span class="pre">aiohttp.client.ClientSession</span><span class="p"><span class="pre">]</span></span></span></em>, <em class="sig-param"><span class="n"><span class="pre">spotify_client_id</span></span><span class="p"><span class="pre">:</span></span> <span class="n"><span class="pre">Optional</span><span class="p"><span class="pre">[</span></span><span class="pre">str</span><span class="p"><span class="pre">]</span></span></span></em>, <em class="sig-param"><span class="n"><span class="pre">spotify_client_secret</span></span><span class="p"><span class="pre">:</span></span> <span class="n"><span class="pre">Optional</span><span class="p"><span class="pre">[</span></span><span class="pre">str</span><span class="p"><span class="pre">]</span></span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#pomice.pool.Node" title="Permalink to this definition"></a></dt>
<dd><p>Bases: <code class="xref py py-class docutils literal notranslate"><span class="pre">object</span></code></p>
<p>The base class for a node.
This node object represents a Lavalink node.
To enable Spotify searching, pass in a proper Spotify Client ID and Spotify Client Secret</p>
<dl class="py property">
<dt class="sig sig-object py" id="pomice.pool.Node.bot">
<em class="property"><span class="pre">property</span> </em><span class="sig-name descname"><span class="pre">bot</span></span><em class="property"><span class="pre">:</span> <span class="pre">Union</span><span class="p"><span class="pre">[</span></span><span class="pre">discord.ext.commands.bot.AutoShardedBot</span><span class="p"><span class="pre">,</span> </span><span class="pre">discord.shard.AutoShardedClient</span><span class="p"><span class="pre">,</span> </span><span class="pre">discord.ext.commands.bot.Bot</span><span class="p"><span class="pre">,</span> </span><span class="pre">discord.client.Client</span><span class="p"><span class="pre">]</span></span></em><a class="headerlink" href="#pomice.pool.Node.bot" title="Permalink to this definition"></a></dt>
<dd><p>Property which returns the discord.py client linked to this node</p>
</dd></dl>
<dl class="py method">
<dt class="sig sig-object py" id="pomice.pool.Node.build_track">
<em class="property"><span class="pre">async</span> </em><span class="sig-name descname"><span class="pre">build_track</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">identifier</span></span><span class="p"><span class="pre">:</span></span> <span class="n"><span class="pre">str</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">ctx</span></span><span class="p"><span class="pre">:</span></span> <span class="n"><span class="pre">Optional</span><span class="p"><span class="pre">[</span></span><span class="pre">discord.ext.commands.context.Context</span><span class="p"><span class="pre">]</span></span></span> <span class="o"><span class="pre">=</span></span> <span class="default_value"><span class="pre">None</span></span></em><span class="sig-paren">)</span> <span class="sig-return"><span class="sig-return-icon">&#x2192;</span> <span class="sig-return-typehint"><a class="reference internal" href="#pomice.objects.Track" title="pomice.objects.Track"><span class="pre">pomice.objects.Track</span></a></span></span><a class="headerlink" href="#pomice.pool.Node.build_track" title="Permalink to this definition"></a></dt>
<dd><p>Builds a track using a valid track identifier</p>
<p>You can also pass in a discord.py Context object to get a
Context object on the track it builds.</p>
</dd></dl>
<dl class="py method">
<dt class="sig sig-object py" id="pomice.pool.Node.connect">
<em class="property"><span class="pre">async</span> </em><span class="sig-name descname"><span class="pre">connect</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#pomice.pool.Node.connect" title="Permalink to this definition"></a></dt>
<dd><p>Initiates a connection with a Lavalink node and adds it to the node pool.</p>
</dd></dl>
<dl class="py method">
<dt class="sig sig-object py" id="pomice.pool.Node.disconnect">
<em class="property"><span class="pre">async</span> </em><span class="sig-name descname"><span class="pre">disconnect</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#pomice.pool.Node.disconnect" title="Permalink to this definition"></a></dt>
<dd><p>Disconnects a connected Lavalink node and removes it from the node pool.
This also destroys any players connected to the node.</p>
</dd></dl>
<dl class="py method">
<dt class="sig sig-object py" id="pomice.pool.Node.get_player">
<span class="sig-name descname"><span class="pre">get_player</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">guild_id</span></span><span class="p"><span class="pre">:</span></span> <span class="n"><span class="pre">int</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#pomice.pool.Node.get_player" title="Permalink to this definition"></a></dt>
<dd><p>Takes a guild ID as a parameter. Returns a pomice Player object.</p>
</dd></dl>
<dl class="py method">
<dt class="sig sig-object py" id="pomice.pool.Node.get_tracks">
<em class="property"><span class="pre">async</span> </em><span class="sig-name descname"><span class="pre">get_tracks</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">query</span></span><span class="p"><span class="pre">:</span></span> <span class="n"><span class="pre">str</span></span></em>, <em class="sig-param"><span class="o"><span class="pre">*</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">ctx</span></span><span class="p"><span class="pre">:</span></span> <span class="n"><span class="pre">Optional</span><span class="p"><span class="pre">[</span></span><span class="pre">discord.ext.commands.context.Context</span><span class="p"><span class="pre">]</span></span></span> <span class="o"><span class="pre">=</span></span> <span class="default_value"><span class="pre">None</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">search_type</span></span><span class="p"><span class="pre">:</span></span> <span class="n"><a class="reference internal" href="#pomice.enums.SearchType" title="pomice.enums.SearchType"><span class="pre">pomice.enums.SearchType</span></a></span> <span class="o"><span class="pre">=</span></span> <span class="default_value"><span class="pre">SearchType.ytsearch</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#pomice.pool.Node.get_tracks" title="Permalink to this definition"></a></dt>
<dd><p>Fetches tracks from the nodes REST api to parse into Lavalink.</p>
<p>If you passed in Spotify API credentials, you can also pass in a
Spotify URL of a playlist, album or track and it will be parsed accordingly.</p>
<p>You can also pass in a discord.py Context object to get a
Context object on any track you search.</p>
</dd></dl>
<dl class="py property">
<dt class="sig sig-object py" id="pomice.pool.Node.is_connected">
<em class="property"><span class="pre">property</span> </em><span class="sig-name descname"><span class="pre">is_connected</span></span><em class="property"><span class="pre">:</span> <span class="pre">bool</span></em><a class="headerlink" href="#pomice.pool.Node.is_connected" title="Permalink to this definition"></a></dt>
<dd><p>“Property which returns whether this node is connected or not</p>
</dd></dl>
<dl class="py property">
<dt class="sig sig-object py" id="pomice.pool.Node.latency">
<em class="property"><span class="pre">property</span> </em><span class="sig-name descname"><span class="pre">latency</span></span><em class="property"><span class="pre">:</span> <span class="pre">int</span></em><a class="headerlink" href="#pomice.pool.Node.latency" title="Permalink to this definition"></a></dt>
<dd><p>Property which returns the latency of the node in milliseconds</p>
</dd></dl>
<dl class="py property">
<dt class="sig sig-object py" id="pomice.pool.Node.player_count">
<em class="property"><span class="pre">property</span> </em><span class="sig-name descname"><span class="pre">player_count</span></span><em class="property"><span class="pre">:</span> <span class="pre">int</span></em><a class="headerlink" href="#pomice.pool.Node.player_count" title="Permalink to this definition"></a></dt>
<dd><p>Property which returns how many players are connected to this node</p>
</dd></dl>
<dl class="py property">
<dt class="sig sig-object py" id="pomice.pool.Node.players">
<em class="property"><span class="pre">property</span> </em><span class="sig-name descname"><span class="pre">players</span></span><em class="property"><span class="pre">:</span> <span class="pre">Dict</span><span class="p"><span class="pre">[</span></span><span class="pre">int</span><span class="p"><span class="pre">,</span> </span><span class="pre">Player</span><span class="p"><span class="pre">]</span></span></em><a class="headerlink" href="#pomice.pool.Node.players" title="Permalink to this definition"></a></dt>
<dd><p>Property which returns a dict containing the guild ID and the player object.</p>
</dd></dl>
<dl class="py property">
<dt class="sig sig-object py" id="pomice.pool.Node.pool">
<em class="property"><span class="pre">property</span> </em><span class="sig-name descname"><span class="pre">pool</span></span><a class="headerlink" href="#pomice.pool.Node.pool" title="Permalink to this definition"></a></dt>
<dd><p>Property which returns the pool this node is apart of</p>
</dd></dl>
<dl class="py method">
<dt class="sig sig-object py" id="pomice.pool.Node.send">
<em class="property"><span class="pre">async</span> </em><span class="sig-name descname"><span class="pre">send</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="o"><span class="pre">**</span></span><span class="n"><span class="pre">data</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#pomice.pool.Node.send" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
<dl class="py property">
<dt class="sig sig-object py" id="pomice.pool.Node.stats">
<em class="property"><span class="pre">property</span> </em><span class="sig-name descname"><span class="pre">stats</span></span><em class="property"><span class="pre">:</span> <a class="reference internal" href="#pomice.utils.NodeStats" title="pomice.utils.NodeStats"><span class="pre">pomice.utils.NodeStats</span></a></em><a class="headerlink" href="#pomice.pool.Node.stats" title="Permalink to this definition"></a></dt>
<dd><p>Property which returns the node stats.</p>
</dd></dl>
</dd></dl>
<dl class="py class">
<dt class="sig sig-object py" id="pomice.pool.NodePool">
<em class="property"><span class="pre">class</span> </em><span class="sig-prename descclassname"><span class="pre">pomice.pool.</span></span><span class="sig-name descname"><span class="pre">NodePool</span></span><a class="headerlink" href="#pomice.pool.NodePool" title="Permalink to this definition"></a></dt>
<dd><p>Bases: <code class="xref py py-class docutils literal notranslate"><span class="pre">object</span></code></p>
<p>The base class for the node pool.
This holds all the nodes that are to be used by the bot.</p>
<dl class="py method">
<dt class="sig sig-object py" id="pomice.pool.NodePool.create_node">
<em class="property"><span class="pre">async</span> <span class="pre">classmethod</span> </em><span class="sig-name descname"><span class="pre">create_node</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="o"><span class="pre">*</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">bot</span></span><span class="p"><span class="pre">:</span></span> <span class="n"><span class="pre">Union</span><span class="p"><span class="pre">[</span></span><span class="pre">discord.ext.commands.bot.AutoShardedBot</span><span class="p"><span class="pre">,</span> </span><span class="pre">discord.shard.AutoShardedClient</span><span class="p"><span class="pre">,</span> </span><span class="pre">discord.ext.commands.bot.Bot</span><span class="p"><span class="pre">,</span> </span><span class="pre">discord.client.Client</span><span class="p"><span class="pre">]</span></span></span></em>, <em class="sig-param"><span class="n"><span class="pre">host</span></span><span class="p"><span class="pre">:</span></span> <span class="n"><span class="pre">str</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">port</span></span><span class="p"><span class="pre">:</span></span> <span class="n"><span class="pre">str</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">password</span></span><span class="p"><span class="pre">:</span></span> <span class="n"><span class="pre">str</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">identifier</span></span><span class="p"><span class="pre">:</span></span> <span class="n"><span class="pre">str</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">spotify_client_id</span></span><span class="p"><span class="pre">:</span></span> <span class="n"><span class="pre">Optional</span><span class="p"><span class="pre">[</span></span><span class="pre">str</span><span class="p"><span class="pre">]</span></span></span></em>, <em class="sig-param"><span class="n"><span class="pre">spotify_client_secret</span></span><span class="p"><span class="pre">:</span></span> <span class="n"><span class="pre">Optional</span><span class="p"><span class="pre">[</span></span><span class="pre">str</span><span class="p"><span class="pre">]</span></span></span></em>, <em class="sig-param"><span class="n"><span class="pre">session</span></span><span class="p"><span class="pre">:</span></span> <span class="n"><span class="pre">Optional</span><span class="p"><span class="pre">[</span></span><span class="pre">aiohttp.client.ClientSession</span><span class="p"><span class="pre">]</span></span></span> <span class="o"><span class="pre">=</span></span> <span class="default_value"><span class="pre">None</span></span></em><span class="sig-paren">)</span> <span class="sig-return"><span class="sig-return-icon">&#x2192;</span> <span class="sig-return-typehint"><a class="reference internal" href="#pomice.pool.Node" title="pomice.pool.Node"><span class="pre">pomice.pool.Node</span></a></span></span><a class="headerlink" href="#pomice.pool.NodePool.create_node" title="Permalink to this definition"></a></dt>
<dd><p>Creates a Node object to be then added into the node pool.
For Spotify searching capabilites, pass in valid Spotify API credentials.</p>
</dd></dl>
<dl class="py method">
<dt class="sig sig-object py" id="pomice.pool.NodePool.get_node">
<em class="property"><span class="pre">classmethod</span> </em><span class="sig-name descname"><span class="pre">get_node</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="o"><span class="pre">*</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">identifier</span></span><span class="p"><span class="pre">:</span></span> <span class="n"><span class="pre">Optional</span><span class="p"><span class="pre">[</span></span><span class="pre">str</span><span class="p"><span class="pre">]</span></span></span> <span class="o"><span class="pre">=</span></span> <span class="default_value"><span class="pre">None</span></span></em><span class="sig-paren">)</span> <span class="sig-return"><span class="sig-return-icon">&#x2192;</span> <span class="sig-return-typehint"><a class="reference internal" href="#pomice.pool.Node" title="pomice.pool.Node"><span class="pre">pomice.pool.Node</span></a></span></span><a class="headerlink" href="#pomice.pool.NodePool.get_node" title="Permalink to this definition"></a></dt>
<dd><p>Fetches a node from the node pool using its identifier.
If no identifier is provided, it will choose a node at random.</p>
</dd></dl>
<dl class="py property">
<dt class="sig sig-object py" id="pomice.pool.NodePool.node_count">
<em class="property"><span class="pre">property</span> </em><span class="sig-name descname"><span class="pre">node_count</span></span><a class="headerlink" href="#pomice.pool.NodePool.node_count" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
<dl class="py property">
<dt class="sig sig-object py" id="pomice.pool.NodePool.nodes">
<em class="property"><span class="pre">property</span> </em><span class="sig-name descname"><span class="pre">nodes</span></span><em class="property"><span class="pre">:</span> <span class="pre">Dict</span><span class="p"><span class="pre">[</span></span><span class="pre">str</span><span class="p"><span class="pre">,</span> </span><a class="reference internal" href="#pomice.pool.Node" title="pomice.pool.Node"><span class="pre">pomice.pool.Node</span></a><span class="p"><span class="pre">]</span></span></em><a class="headerlink" href="#pomice.pool.NodePool.nodes" title="Permalink to this definition"></a></dt>
<dd><p>Property which returns a dict with the node identifier and the Node object.</p>
</dd></dl>
</dd></dl>
</section>
<section id="module-pomice.utils">
<span id="utils"></span><h2>Utils<a class="headerlink" href="#module-pomice.utils" title="Permalink to this headline"></a></h2>
<p>The MIT License (MIT)
Copyright (c) 2015-present Rapptz
Permission is hereby granted, free of charge, to any person obtaining a
copy of this software and associated documentation files (the “Software”),
to deal in the Software without restriction, including without limitation
the rights to use, copy, modify, merge, publish, distribute, sublicense,
and/or sell copies of the Software, and to permit persons to whom the
Software is furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in
all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, EXPRESS
OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
DEALINGS IN THE SOFTWARE.</p>
<dl class="py class">
<dt class="sig sig-object py" id="pomice.utils.ExponentialBackoff">
<em class="property"><span class="pre">class</span> </em><span class="sig-prename descclassname"><span class="pre">pomice.utils.</span></span><span class="sig-name descname"><span class="pre">ExponentialBackoff</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">base</span></span><span class="p"><span class="pre">:</span></span> <span class="n"><span class="pre">int</span></span> <span class="o"><span class="pre">=</span></span> <span class="default_value"><span class="pre">1</span></span></em>, <em class="sig-param"><span class="o"><span class="pre">*</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">integral</span></span><span class="p"><span class="pre">:</span></span> <span class="n"><span class="pre">bool</span></span> <span class="o"><span class="pre">=</span></span> <span class="default_value"><span class="pre">False</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#pomice.utils.ExponentialBackoff" title="Permalink to this definition"></a></dt>
<dd><p>Bases: <code class="xref py py-class docutils literal notranslate"><span class="pre">object</span></code></p>
<dl class="py method">
<dt class="sig sig-object py" id="pomice.utils.ExponentialBackoff.delay">
<span class="sig-name descname"><span class="pre">delay</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span> <span class="sig-return"><span class="sig-return-icon">&#x2192;</span> <span class="sig-return-typehint"><span class="pre">float</span></span></span><a class="headerlink" href="#pomice.utils.ExponentialBackoff.delay" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
</dd></dl>
<dl class="py class">
<dt class="sig sig-object py" id="pomice.utils.NodeStats">
<em class="property"><span class="pre">class</span> </em><span class="sig-prename descclassname"><span class="pre">pomice.utils.</span></span><span class="sig-name descname"><span class="pre">NodeStats</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">data</span></span><span class="p"><span class="pre">:</span></span> <span class="n"><span class="pre">dict</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#pomice.utils.NodeStats" title="Permalink to this definition"></a></dt>
<dd><p>Bases: <code class="xref py py-class docutils literal notranslate"><span class="pre">object</span></code></p>
<p>The base class for the node stats object.
Gives critical information on the node, which is updated every minute.</p>
</dd></dl>
</section>
</section>
</div>
</div>
</div>
<div class="sphinxsidebar" role="navigation" aria-label="main navigation">
<div class="sphinxsidebarwrapper">
<h1 class="logo"><a href="index.html">Pomice</a></h1>
<h3>Navigation</h3>
<ul class="current">
<li class="toctree-l1 current"><a class="current reference internal" href="#">Pomice</a><ul>
<li class="toctree-l2"><a class="reference internal" href="pomice.spotify.html">Spotify</a></li>
<li class="toctree-l2"><a class="reference internal" href="#module-pomice.enums">Enums</a></li>
<li class="toctree-l2"><a class="reference internal" href="#module-pomice.events">Events</a></li>
<li class="toctree-l2"><a class="reference internal" href="#module-pomice.exceptions">Exceptions</a></li>
<li class="toctree-l2"><a class="reference internal" href="#module-pomice.filters">Filters</a></li>
<li class="toctree-l2"><a class="reference internal" href="#module-pomice.objects">Objects</a></li>
<li class="toctree-l2"><a class="reference internal" href="#module-pomice.player">Player</a></li>
<li class="toctree-l2"><a class="reference internal" href="#module-pomice.pool">Pool</a></li>
<li class="toctree-l2"><a class="reference internal" href="#module-pomice.utils">Utils</a></li>
</ul>
</li>
</ul>
<div class="relations">
<h3>Related Topics</h3>
<ul>
<li><a href="index.html">Documentation overview</a><ul>
<li><a href="modules.html">&lt;no title&gt;</a><ul>
<li>Previous: <a href="modules.html" title="previous chapter">&lt;no title&gt;</a></li>
<li>Next: <a href="pomice.spotify.html" title="next chapter">Spotify</a></li>
</ul></li>
</ul></li>
</ul>
</div>
<div id="searchbox" style="display: none" role="search">
<h3 id="searchlabel">Quick search</h3>
<div class="searchformwrapper">
<form class="search" action="search.html" method="get">
<input type="text" name="q" aria-labelledby="searchlabel" autocomplete="off" autocorrect="off" autocapitalize="off" spellcheck="false"/>
<input type="submit" value="Go" />
</form>
</div>
</div>
<script>$('#searchbox').show(0);</script>
</div>
</div>
<div class="clearer"></div>
</div>
<div class="footer">
&copy;2021, cloudwithax.
|
Powered by <a href="http://sphinx-doc.org/">Sphinx 4.2.0</a>
&amp; <a href="https://github.com/bitprophet/alabaster">Alabaster 0.7.12</a>
|
<a href="_sources/pomice.rst.txt"
rel="nofollow">Page source</a>
</div>
</body>
</html>

192
docs/_build/html/pomice.spotify.html vendored Normal file
View File

@ -0,0 +1,192 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" /><meta name="generator" content="Docutils 0.17.1: http://docutils.sourceforge.net/" />
<title>Spotify &#8212; Pomice 1.1.1 documentation</title>
<link rel="stylesheet" type="text/css" href="_static/pygments.css" />
<link rel="stylesheet" type="text/css" href="_static/alabaster.css" />
<script data-url_root="./" id="documentation_options" src="_static/documentation_options.js"></script>
<script src="_static/jquery.js"></script>
<script src="_static/underscore.js"></script>
<script src="_static/doctools.js"></script>
<link rel="index" title="Index" href="genindex.html" />
<link rel="search" title="Search" href="search.html" />
<link rel="prev" title="Pomice" href="pomice.html" />
<link rel="stylesheet" href="_static/custom.css" type="text/css" />
<meta name="viewport" content="width=device-width, initial-scale=0.9, maximum-scale=0.9" />
</head><body>
<div class="document">
<div class="documentwrapper">
<div class="bodywrapper">
<div class="body" role="main">
<section id="spotify">
<h1>Spotify<a class="headerlink" href="#spotify" title="Permalink to this headline"></a></h1>
<section id="module-pomice.spotify.album">
<span id="spotify-album"></span><h2>spotify.Album<a class="headerlink" href="#module-pomice.spotify.album" title="Permalink to this headline"></a></h2>
<dl class="py class">
<dt class="sig sig-object py" id="pomice.spotify.album.Album">
<em class="property"><span class="pre">class</span> </em><span class="sig-prename descclassname"><span class="pre">pomice.spotify.album.</span></span><span class="sig-name descname"><span class="pre">Album</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">data</span></span><span class="p"><span class="pre">:</span></span> <span class="n"><span class="pre">dict</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#pomice.spotify.album.Album" title="Permalink to this definition"></a></dt>
<dd><p>Bases: <code class="xref py py-class docutils literal notranslate"><span class="pre">object</span></code></p>
<p>The base class for a Spotify album</p>
</dd></dl>
</section>
<section id="module-pomice.spotify.client">
<span id="spotify-client"></span><h2>spotify.Client<a class="headerlink" href="#module-pomice.spotify.client" title="Permalink to this headline"></a></h2>
<dl class="py class">
<dt class="sig sig-object py" id="pomice.spotify.client.Client">
<em class="property"><span class="pre">class</span> </em><span class="sig-prename descclassname"><span class="pre">pomice.spotify.client.</span></span><span class="sig-name descname"><span class="pre">Client</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">client_id</span></span><span class="p"><span class="pre">:</span></span> <span class="n"><span class="pre">str</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">client_secret</span></span><span class="p"><span class="pre">:</span></span> <span class="n"><span class="pre">str</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#pomice.spotify.client.Client" title="Permalink to this definition"></a></dt>
<dd><p>Bases: <code class="xref py py-class docutils literal notranslate"><span class="pre">object</span></code></p>
<p>The base client for the Spotify module of Pomice.
This class will do all the heavy lifting of getting all the metadata
for any Spotify URL you throw at it.</p>
<dl class="py method">
<dt class="sig sig-object py" id="pomice.spotify.client.Client.search">
<em class="property"><span class="pre">async</span> </em><span class="sig-name descname"><span class="pre">search</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="o"><span class="pre">*</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">query</span></span><span class="p"><span class="pre">:</span></span> <span class="n"><span class="pre">str</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#pomice.spotify.client.Client.search" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
</dd></dl>
</section>
<section id="module-pomice.spotify.exceptions">
<span id="spotify-exceptions"></span><h2>spotify.Exceptions<a class="headerlink" href="#module-pomice.spotify.exceptions" title="Permalink to this headline"></a></h2>
<dl class="py exception">
<dt class="sig sig-object py" id="pomice.spotify.exceptions.InvalidSpotifyURL">
<em class="property"><span class="pre">exception</span> </em><span class="sig-prename descclassname"><span class="pre">pomice.spotify.exceptions.</span></span><span class="sig-name descname"><span class="pre">InvalidSpotifyURL</span></span><a class="headerlink" href="#pomice.spotify.exceptions.InvalidSpotifyURL" title="Permalink to this definition"></a></dt>
<dd><p>Bases: <code class="xref py py-class docutils literal notranslate"><span class="pre">Exception</span></code></p>
<p>An invalid Spotify URL was passed</p>
</dd></dl>
<dl class="py exception">
<dt class="sig sig-object py" id="pomice.spotify.exceptions.SpotifyRequestException">
<em class="property"><span class="pre">exception</span> </em><span class="sig-prename descclassname"><span class="pre">pomice.spotify.exceptions.</span></span><span class="sig-name descname"><span class="pre">SpotifyRequestException</span></span><a class="headerlink" href="#pomice.spotify.exceptions.SpotifyRequestException" title="Permalink to this definition"></a></dt>
<dd><p>Bases: <code class="xref py py-class docutils literal notranslate"><span class="pre">Exception</span></code></p>
<p>An error occurred when making a request to the Spotify API</p>
</dd></dl>
</section>
<section id="module-pomice.spotify.playlist">
<span id="spotify-playlist"></span><h2>spotify.Playlist<a class="headerlink" href="#module-pomice.spotify.playlist" title="Permalink to this headline"></a></h2>
<dl class="py class">
<dt class="sig sig-object py" id="pomice.spotify.playlist.Playlist">
<em class="property"><span class="pre">class</span> </em><span class="sig-prename descclassname"><span class="pre">pomice.spotify.playlist.</span></span><span class="sig-name descname"><span class="pre">Playlist</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">data</span></span><span class="p"><span class="pre">:</span></span> <span class="n"><span class="pre">dict</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">tracks</span></span><span class="p"><span class="pre">:</span></span> <span class="n"><span class="pre">List</span><span class="p"><span class="pre">[</span></span><a class="reference internal" href="#pomice.spotify.track.Track" title="pomice.spotify.track.Track"><span class="pre">pomice.spotify.track.Track</span></a><span class="p"><span class="pre">]</span></span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#pomice.spotify.playlist.Playlist" title="Permalink to this definition"></a></dt>
<dd><p>Bases: <code class="xref py py-class docutils literal notranslate"><span class="pre">object</span></code></p>
<p>The base class for a Spotify playlist</p>
</dd></dl>
</section>
<section id="module-pomice.spotify.track">
<span id="spotify-track"></span><h2>spotify.Track<a class="headerlink" href="#module-pomice.spotify.track" title="Permalink to this headline"></a></h2>
<dl class="py class">
<dt class="sig sig-object py" id="pomice.spotify.track.Track">
<em class="property"><span class="pre">class</span> </em><span class="sig-prename descclassname"><span class="pre">pomice.spotify.track.</span></span><span class="sig-name descname"><span class="pre">Track</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">data</span></span><span class="p"><span class="pre">:</span></span> <span class="n"><span class="pre">dict</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#pomice.spotify.track.Track" title="Permalink to this definition"></a></dt>
<dd><p>Bases: <code class="xref py py-class docutils literal notranslate"><span class="pre">object</span></code></p>
<p>The base class for a Spotify Track</p>
</dd></dl>
</section>
</section>
</div>
</div>
</div>
<div class="sphinxsidebar" role="navigation" aria-label="main navigation">
<div class="sphinxsidebarwrapper">
<h1 class="logo"><a href="index.html">Pomice</a></h1>
<h3>Navigation</h3>
<ul class="current">
<li class="toctree-l1 current"><a class="reference internal" href="pomice.html">Pomice</a><ul class="current">
<li class="toctree-l2 current"><a class="current reference internal" href="#">Spotify</a><ul>
<li class="toctree-l3"><a class="reference internal" href="#module-pomice.spotify.album">spotify.Album</a></li>
<li class="toctree-l3"><a class="reference internal" href="#module-pomice.spotify.client">spotify.Client</a></li>
<li class="toctree-l3"><a class="reference internal" href="#module-pomice.spotify.exceptions">spotify.Exceptions</a></li>
<li class="toctree-l3"><a class="reference internal" href="#module-pomice.spotify.playlist">spotify.Playlist</a></li>
<li class="toctree-l3"><a class="reference internal" href="#module-pomice.spotify.track">spotify.Track</a></li>
</ul>
</li>
<li class="toctree-l2"><a class="reference internal" href="pomice.html#module-pomice.enums">Enums</a></li>
<li class="toctree-l2"><a class="reference internal" href="pomice.html#module-pomice.events">Events</a></li>
<li class="toctree-l2"><a class="reference internal" href="pomice.html#module-pomice.exceptions">Exceptions</a></li>
<li class="toctree-l2"><a class="reference internal" href="pomice.html#module-pomice.filters">Filters</a></li>
<li class="toctree-l2"><a class="reference internal" href="pomice.html#module-pomice.objects">Objects</a></li>
<li class="toctree-l2"><a class="reference internal" href="pomice.html#module-pomice.player">Player</a></li>
<li class="toctree-l2"><a class="reference internal" href="pomice.html#module-pomice.pool">Pool</a></li>
<li class="toctree-l2"><a class="reference internal" href="pomice.html#module-pomice.utils">Utils</a></li>
</ul>
</li>
</ul>
<div class="relations">
<h3>Related Topics</h3>
<ul>
<li><a href="index.html">Documentation overview</a><ul>
<li><a href="modules.html">&lt;no title&gt;</a><ul>
<li><a href="pomice.html">Pomice</a><ul>
<li>Previous: <a href="pomice.html" title="previous chapter">Pomice</a></li>
</ul></li>
</ul></li>
</ul></li>
</ul>
</div>
<div id="searchbox" style="display: none" role="search">
<h3 id="searchlabel">Quick search</h3>
<div class="searchformwrapper">
<form class="search" action="search.html" method="get">
<input type="text" name="q" aria-labelledby="searchlabel" autocomplete="off" autocorrect="off" autocapitalize="off" spellcheck="false"/>
<input type="submit" value="Go" />
</form>
</div>
</div>
<script>$('#searchbox').show(0);</script>
</div>
</div>
<div class="clearer"></div>
</div>
<div class="footer">
&copy;2021, cloudwithax.
|
Powered by <a href="http://sphinx-doc.org/">Sphinx 4.2.0</a>
&amp; <a href="https://github.com/bitprophet/alabaster">Alabaster 0.7.12</a>
|
<a href="_sources/pomice.spotify.rst.txt"
rel="nofollow">Page source</a>
</div>
</body>
</html>

183
docs/_build/html/py-modindex.html vendored Normal file
View File

@ -0,0 +1,183 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Python Module Index &#8212; Pomice 1.1.1 documentation</title>
<link rel="stylesheet" type="text/css" href="_static/pygments.css" />
<link rel="stylesheet" type="text/css" href="_static/alabaster.css" />
<script data-url_root="./" id="documentation_options" src="_static/documentation_options.js"></script>
<script src="_static/jquery.js"></script>
<script src="_static/underscore.js"></script>
<script src="_static/doctools.js"></script>
<link rel="index" title="Index" href="genindex.html" />
<link rel="search" title="Search" href="search.html" />
<link rel="stylesheet" href="_static/custom.css" type="text/css" />
<meta name="viewport" content="width=device-width, initial-scale=0.9, maximum-scale=0.9" />
</head><body>
<div class="document">
<div class="documentwrapper">
<div class="bodywrapper">
<div class="body" role="main">
<h1>Python Module Index</h1>
<div class="modindex-jumpbox">
<a href="#cap-p"><strong>p</strong></a>
</div>
<table class="indextable modindextable">
<tr class="pcap"><td></td><td>&#160;</td><td></td></tr>
<tr class="cap" id="cap-p"><td></td><td>
<strong>p</strong></td><td></td></tr>
<tr>
<td><img src="_static/minus.png" class="toggler"
id="toggle-1" style="display: none" alt="-" /></td>
<td>
<code class="xref">pomice</code></td><td>
<em></em></td></tr>
<tr class="cg-1">
<td></td>
<td>&#160;&#160;&#160;
<a href="pomice.html#module-pomice.enums"><code class="xref">pomice.enums</code></a></td><td>
<em></em></td></tr>
<tr class="cg-1">
<td></td>
<td>&#160;&#160;&#160;
<a href="pomice.html#module-pomice.events"><code class="xref">pomice.events</code></a></td><td>
<em></em></td></tr>
<tr class="cg-1">
<td></td>
<td>&#160;&#160;&#160;
<a href="pomice.html#module-pomice.exceptions"><code class="xref">pomice.exceptions</code></a></td><td>
<em></em></td></tr>
<tr class="cg-1">
<td></td>
<td>&#160;&#160;&#160;
<a href="pomice.html#module-pomice.filters"><code class="xref">pomice.filters</code></a></td><td>
<em></em></td></tr>
<tr class="cg-1">
<td></td>
<td>&#160;&#160;&#160;
<a href="pomice.html#module-pomice.objects"><code class="xref">pomice.objects</code></a></td><td>
<em></em></td></tr>
<tr class="cg-1">
<td></td>
<td>&#160;&#160;&#160;
<a href="pomice.html#module-pomice.player"><code class="xref">pomice.player</code></a></td><td>
<em></em></td></tr>
<tr class="cg-1">
<td></td>
<td>&#160;&#160;&#160;
<a href="pomice.html#module-pomice.pool"><code class="xref">pomice.pool</code></a></td><td>
<em></em></td></tr>
<tr class="cg-1">
<td></td>
<td>&#160;&#160;&#160;
<a href="pomice.spotify.html#module-pomice.spotify.album"><code class="xref">pomice.spotify.album</code></a></td><td>
<em></em></td></tr>
<tr class="cg-1">
<td></td>
<td>&#160;&#160;&#160;
<a href="pomice.spotify.html#module-pomice.spotify.client"><code class="xref">pomice.spotify.client</code></a></td><td>
<em></em></td></tr>
<tr class="cg-1">
<td></td>
<td>&#160;&#160;&#160;
<a href="pomice.spotify.html#module-pomice.spotify.exceptions"><code class="xref">pomice.spotify.exceptions</code></a></td><td>
<em></em></td></tr>
<tr class="cg-1">
<td></td>
<td>&#160;&#160;&#160;
<a href="pomice.spotify.html#module-pomice.spotify.playlist"><code class="xref">pomice.spotify.playlist</code></a></td><td>
<em></em></td></tr>
<tr class="cg-1">
<td></td>
<td>&#160;&#160;&#160;
<a href="pomice.spotify.html#module-pomice.spotify.track"><code class="xref">pomice.spotify.track</code></a></td><td>
<em></em></td></tr>
<tr class="cg-1">
<td></td>
<td>&#160;&#160;&#160;
<a href="pomice.html#module-pomice.utils"><code class="xref">pomice.utils</code></a></td><td>
<em></em></td></tr>
</table>
</div>
</div>
</div>
<div class="sphinxsidebar" role="navigation" aria-label="main navigation">
<div class="sphinxsidebarwrapper">
<h1 class="logo"><a href="index.html">Pomice</a></h1>
<h3>Navigation</h3>
<ul>
<li class="toctree-l1"><a class="reference internal" href="pomice.html">Pomice</a></li>
</ul>
<div class="relations">
<h3>Related Topics</h3>
<ul>
<li><a href="index.html">Documentation overview</a><ul>
</ul></li>
</ul>
</div>
<div id="searchbox" style="display: none" role="search">
<h3 id="searchlabel">Quick search</h3>
<div class="searchformwrapper">
<form class="search" action="search.html" method="get">
<input type="text" name="q" aria-labelledby="searchlabel" autocomplete="off" autocorrect="off" autocapitalize="off" spellcheck="false"/>
<input type="submit" value="Go" />
</form>
</div>
</div>
<script>$('#searchbox').show(0);</script>
</div>
</div>
<div class="clearer"></div>
</div>
<div class="footer">
&copy;2021, cloudwithax.
|
Powered by <a href="http://sphinx-doc.org/">Sphinx 4.2.0</a>
&amp; <a href="https://github.com/bitprophet/alabaster">Alabaster 0.7.12</a>
</div>
</body>
</html>

122
docs/_build/html/search.html vendored Normal file
View File

@ -0,0 +1,122 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Search &#8212; Pomice 1.1.1 documentation</title>
<link rel="stylesheet" type="text/css" href="_static/pygments.css" />
<link rel="stylesheet" type="text/css" href="_static/alabaster.css" />
<script data-url_root="./" id="documentation_options" src="_static/documentation_options.js"></script>
<script src="_static/jquery.js"></script>
<script src="_static/underscore.js"></script>
<script src="_static/doctools.js"></script>
<script src="_static/searchtools.js"></script>
<script src="_static/language_data.js"></script>
<link rel="index" title="Index" href="genindex.html" />
<link rel="search" title="Search" href="#" />
<script src="searchindex.js" defer></script>
<link rel="stylesheet" href="_static/custom.css" type="text/css" />
<meta name="viewport" content="width=device-width, initial-scale=0.9, maximum-scale=0.9" />
</head><body>
<div class="document">
<div class="documentwrapper">
<div class="bodywrapper">
<div class="body" role="main">
<h1 id="search-documentation">Search</h1>
<noscript>
<div class="admonition warning">
<p>
Please activate JavaScript to enable the search
functionality.
</p>
</div>
</noscript>
<p>
Searching for multiple words only shows matches that contain
all words.
</p>
<form action="" method="get">
<input type="text" name="q" aria-labelledby="search-documentation" value="" autocomplete="off" autocorrect="off" autocapitalize="off" spellcheck="false"/>
<input type="submit" value="search" />
<span id="search-progress" style="padding-left: 10px"></span>
</form>
<div id="search-results">
</div>
</div>
</div>
</div>
<div class="sphinxsidebar" role="navigation" aria-label="main navigation">
<div class="sphinxsidebarwrapper">
<h1 class="logo"><a href="index.html">Pomice</a></h1>
<h3>Navigation</h3>
<ul>
<li class="toctree-l1"><a class="reference internal" href="pomice.html">Pomice</a></li>
</ul>
<div class="relations">
<h3>Related Topics</h3>
<ul>
<li><a href="index.html">Documentation overview</a><ul>
</ul></li>
</ul>
</div>
</div>
</div>
<div class="clearer"></div>
</div>
<div class="footer">
&copy;2021, cloudwithax.
|
Powered by <a href="http://sphinx-doc.org/">Sphinx 4.2.0</a>
&amp; <a href="https://github.com/bitprophet/alabaster">Alabaster 0.7.12</a>
</div>
</body>
</html>

1
docs/_build/html/searchindex.js vendored Normal file

File diff suppressed because one or more lines are too long

57
docs/conf.py Normal file
View File

@ -0,0 +1,57 @@
# Configuration file for the Sphinx documentation builder.
#
# This file only contains a selection of the most common options. For a full
# list see the documentation:
# https://www.sphinx-doc.org/en/master/usage/configuration.html
# -- Path setup --------------------------------------------------------------
# If extensions (or modules to document with autodoc) are in another directory,
# add these directories to sys.path here. If the directory is relative to the
# documentation root, use os.path.abspath to make it absolute, like shown here.
#
# import os
# import sys
# sys.path.insert(0, os.path.abspath('.'))
# -- Project information -----------------------------------------------------
project = 'Pomice'
copyright = '2021, cloudwithax'
author = 'cloudwithax'
# The full version, including alpha/beta/rc tags
release = '1.1.1'
# -- General configuration ---------------------------------------------------
# Add any Sphinx extension module names here, as strings. They can be
# extensions coming with Sphinx (named 'sphinx.ext.*') or your custom
# ones.
extensions = [
'sphinx.ext.autodoc',
'sphinx.ext.autosummary'
]
# Add any paths that contain templates here, relative to this directory.
templates_path = ['_templates']
# List of patterns, relative to source directory, that match files and
# directories to ignore when looking for source files.
# This pattern also affects html_static_path and html_extra_path.
exclude_patterns = ['_build', 'Thumbs.db', '.DS_Store']
# -- Options for HTML output -------------------------------------------------
# The theme to use for HTML and HTML Help pages. See the documentation for
# a list of builtin themes.
#
html_theme = 'alabaster'
# Add any paths that contain custom static files (such as style sheets) here,
# relative to this directory. They are copied after the builtin static files,
# so a file named "default.css" will overwrite the builtin "default.css".
html_static_path = ['_static']

112
docs/index.rst Normal file
View File

@ -0,0 +1,112 @@
.. pomice documentation master file, created by
sphinx-quickstart on Tue Nov 2 19:31:07 2021.
You can adapt this file completely to your liking, but it should at least
contain the root `toctree` directive.
Welcome to Pomice!
==================
.. image:: https://raw.githubusercontent.com/cloudwithax/pomice/main/banner.jpg
The modern `Lavalink <https://github.com/freyacodes/Lavalink>`_ wrapper designed for `discord.py <https://github.com/Rapptz/discord.py>`_
Contents
---------
.. toctree::
modules
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 <https://github.com/freyacodes/Lavalink/releases/latest>`_
Quick Jumpstart
----------------
If you want a quick example as to how to start with Pomice, look below:
.. code-block:: python3
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")

35
docs/make.bat Normal file
View File

@ -0,0 +1,35 @@
@ECHO OFF
pushd %~dp0
REM Command file for Sphinx documentation
if "%SPHINXBUILD%" == "" (
set SPHINXBUILD=sphinx-build
)
set SOURCEDIR=.
set BUILDDIR=_build
if "%1" == "" goto help
%SPHINXBUILD% >NUL 2>NUL
if errorlevel 9009 (
echo.
echo.The 'sphinx-build' command was not found. Make sure you have Sphinx
echo.installed, then set the SPHINXBUILD environment variable to point
echo.to the full path of the 'sphinx-build' executable. Alternatively you
echo.may add the Sphinx directory to PATH.
echo.
echo.If you don't have Sphinx installed, grab it from
echo.https://www.sphinx-doc.org/
exit /b 1
)
%SPHINXBUILD% -M %1 %SOURCEDIR% %BUILDDIR% %SPHINXOPTS% %O%
goto end
:help
%SPHINXBUILD% -M help %SOURCEDIR% %BUILDDIR% %SPHINXOPTS% %O%
:end
popd

4
docs/modules.rst Normal file
View File

@ -0,0 +1,4 @@
.. toctree::
:maxdepth: 4
pomice

74
docs/pomice.rst Normal file
View File

@ -0,0 +1,74 @@
Pomice
==============
.. toctree::
:maxdepth: 4
pomice.spotify
Enums
-------------------
.. automodule:: pomice.enums
:members:
:undoc-members:
:show-inheritance:
Events
--------------------
.. automodule:: pomice.events
:members:
:undoc-members:
:show-inheritance:
Exceptions
------------------------
.. automodule:: pomice.exceptions
:members:
:undoc-members:
:show-inheritance:
Filters
---------------------
.. automodule:: pomice.filters
:members:
:undoc-members:
:show-inheritance:
Objects
---------------------
.. automodule:: pomice.objects
:members:
:undoc-members:
:show-inheritance:
Player
--------------------
.. automodule:: pomice.player
:members:
:undoc-members:
:show-inheritance:
Pool
------------------
.. automodule:: pomice.pool
:members:
:undoc-members:
:show-inheritance:
Utils
-------------------
.. automodule:: pomice.utils
:members:
:undoc-members:
:show-inheritance:

43
docs/pomice.spotify.rst Normal file
View File

@ -0,0 +1,43 @@
Spotify
======================
spotify.Album
---------------------------
.. automodule:: pomice.spotify.album
:members:
:undoc-members:
:show-inheritance:
spotify.Client
----------------------------
.. automodule:: pomice.spotify.client
:members:
:undoc-members:
:show-inheritance:
spotify.Exceptions
--------------------------------
.. automodule:: pomice.spotify.exceptions
:members:
:undoc-members:
:show-inheritance:
spotify.Playlist
------------------------------
.. automodule:: pomice.spotify.playlist
:members:
:undoc-members:
:show-inheritance:
spotify.Track
---------------------------
.. automodule:: pomice.spotify.track
:members:
:undoc-members:
:show-inheritance: