1
Fork 0
mirror of https://github.com/RYGhub/royalnet.git synced 2024-11-27 13:34:28 +00:00
royalnet/docs/html/apireference.html

1439 lines
No EOL
108 KiB
HTML
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<!DOCTYPE html>
<!--[if IE 8]><html class="no-js lt-ie9" lang="en" > <![endif]-->
<!--[if gt IE 8]><!--> <html class="no-js" lang="en" > <!--<![endif]-->
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>API Reference &mdash; Royalnet documentation</title>
<script type="text/javascript" src="_static/js/modernizr.min.js"></script>
<script type="text/javascript" id="documentation_options" data-url_root="./" src="_static/documentation_options.js"></script>
<script type="text/javascript" src="_static/jquery.js"></script>
<script type="text/javascript" src="_static/underscore.js"></script>
<script type="text/javascript" src="_static/doctools.js"></script>
<script type="text/javascript" src="_static/language_data.js"></script>
<script type="text/javascript" src="_static/js/theme.js"></script>
<link rel="stylesheet" href="_static/css/theme.css" type="text/css" />
<link rel="stylesheet" href="_static/pygments.css" type="text/css" />
<link rel="stylesheet" href="_static/rygdocs.css" type="text/css" />
<link rel="index" title="Index" href="genindex.html" />
<link rel="search" title="Search" href="search.html" />
<link rel="prev" title="Royalnet Commands" href="creatingacommand.html" />
</head>
<body class="wy-body-for-nav">
<div class="wy-grid-for-nav">
<nav data-toggle="wy-nav-shift" class="wy-nav-side">
<div class="wy-side-scroll">
<div class="wy-side-nav-search" >
<a href="index.html" class="icon icon-home"> Royalnet
</a>
<div role="search">
<form id="rtd-search-form" class="wy-form" action="search.html" method="get">
<input type="text" name="q" placeholder="Search docs" />
<input type="hidden" name="check_keywords" value="yes" />
<input type="hidden" name="area" value="default" />
</form>
</div>
</div>
<div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="main navigation">
<ul class="current">
<li class="toctree-l1"><a class="reference internal" href="runningroyalnet.html">Running Royalnet</a></li>
<li class="toctree-l1"><a class="reference internal" href="creatingacommand.html">Royalnet Commands</a></li>
<li class="toctree-l1 current"><a class="current reference internal" href="#">API Reference</a><ul>
<li class="toctree-l2"><a class="reference internal" href="#module-royalnet.audio">Audio</a></li>
<li class="toctree-l2"><a class="reference internal" href="#module-royalnet.bots">Bots</a></li>
<li class="toctree-l2"><a class="reference internal" href="#module-royalnet.commands">Commands</a></li>
<li class="toctree-l2"><a class="reference internal" href="#module-royalnet.database">Database</a></li>
<li class="toctree-l2"><a class="reference internal" href="#module-royalnet.network">Network</a></li>
<li class="toctree-l2"><a class="reference internal" href="#module-royalnet.utils">Utils</a></li>
<li class="toctree-l2"><a class="reference internal" href="#module-royalnet.web">Web</a></li>
<li class="toctree-l2"><a class="reference internal" href="#module-royalnet.error">Error</a></li>
</ul>
</li>
</ul>
</div>
</div>
</nav>
<section data-toggle="wy-nav-shift" class="wy-nav-content-wrap">
<nav class="wy-nav-top" aria-label="top navigation">
<i data-toggle="wy-nav-top" class="fa fa-bars"></i>
<a href="index.html">Royalnet</a>
</nav>
<div class="wy-nav-content">
<div class="rst-content">
<div role="navigation" aria-label="breadcrumbs navigation">
<ul class="wy-breadcrumbs">
<li><a href="index.html">Docs</a> &raquo;</li>
<li>API Reference</li>
<li class="wy-breadcrumbs-aside">
<a href="_sources/apireference.rst.txt" rel="nofollow"> View page source</a>
</li>
</ul>
<hr/>
</div>
<div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article">
<div itemprop="articleBody">
<div class="section" id="api-reference">
<h1>API Reference<a class="headerlink" href="#api-reference" title="Permalink to this headline"></a></h1>
<p>These pages were automatically generated from docstrings in code.</p>
<p>They might be outdated, or incomplete.</p>
<div class="section" id="module-royalnet.audio">
<span id="audio"></span><h2>Audio<a class="headerlink" href="#module-royalnet.audio" title="Permalink to this headline"></a></h2>
<p>Video and audio downloading related classes, mainly used for Discord voice bots.</p>
<dl class="class">
<dt id="royalnet.audio.YtdlInfo">
<em class="property">class </em><code class="sig-prename descclassname">royalnet.audio.</code><code class="sig-name descname">YtdlInfo</code><span class="sig-paren">(</span><em class="sig-param">info: Dict[str, Any]</em><span class="sig-paren">)</span><a class="headerlink" href="#royalnet.audio.YtdlInfo" title="Permalink to this definition"></a></dt>
<dd><p>A wrapper around youtube_dl extracted info.</p>
<dl class="method">
<dt id="royalnet.audio.YtdlInfo.__init__">
<code class="sig-name descname">__init__</code><span class="sig-paren">(</span><em class="sig-param">info: Dict[str, Any]</em><span class="sig-paren">)</span><a class="headerlink" href="#royalnet.audio.YtdlInfo.__init__" title="Permalink to this definition"></a></dt>
<dd><p>Create a YtdlInfo from the dict returned by the <code class="xref py py-func docutils literal notranslate"><span class="pre">youtube_dl.YoutubeDL.extract_info()</span></code> function.</p>
<div class="admonition warning">
<p class="admonition-title">Warning</p>
<p>Does not download the info, for that use <a class="reference internal" href="#royalnet.audio.YtdlInfo.retrieve_for_url" title="royalnet.audio.YtdlInfo.retrieve_for_url"><code class="xref py py-func docutils literal notranslate"><span class="pre">royalnet.audio.YtdlInfo.retrieve_for_url()</span></code></a>.</p>
</div>
</dd></dl>
<dl class="attribute">
<dt id="royalnet.audio.YtdlInfo._default_ytdl_args">
<code class="sig-name descname">_default_ytdl_args</code><em class="property"> = {'ignoreerrors': True, 'no_warnings': True, 'noplaylist': True, 'outtmpl': '%(title)s-%(id)s.%(ext)s', 'quiet': True}</em><a class="headerlink" href="#royalnet.audio.YtdlInfo._default_ytdl_args" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
<dl class="method">
<dt id="royalnet.audio.YtdlInfo.retrieve_for_url">
<em class="property">classmethod </em><code class="sig-name descname">retrieve_for_url</code><span class="sig-paren">(</span><em class="sig-param">url</em>, <em class="sig-param">**ytdl_args</em><span class="sig-paren">)</span> &#x2192; List[royalnet.audio.ytdlinfo.YtdlInfo]<a class="headerlink" href="#royalnet.audio.YtdlInfo.retrieve_for_url" title="Permalink to this definition"></a></dt>
<dd><p>Fetch the info for an url through YoutubeDL.</p>
<dl class="field-list simple">
<dt class="field-odd">Returns</dt>
<dd class="field-odd"><p>A <a class="reference external" href="https://docs.python.org/3.7/library/stdtypes.html#list" title="(in Python v3.7)"><code class="xref py py-class docutils literal notranslate"><span class="pre">list</span></code></a> containing the infos for the requested videos.</p>
</dd>
</dl>
</dd></dl>
<dl class="method">
<dt id="royalnet.audio.YtdlInfo.to_discord_embed">
<code class="sig-name descname">to_discord_embed</code><span class="sig-paren">(</span><span class="sig-paren">)</span> &#x2192; discord.embeds.Embed<a class="headerlink" href="#royalnet.audio.YtdlInfo.to_discord_embed" title="Permalink to this definition"></a></dt>
<dd><p>Return this info as a <a class="reference external" href="https://discordpy.readthedocs.io/en/latest/api.html#discord.Embed" title="(in discord.py v1.3.0a)"><code class="xref py py-class docutils literal notranslate"><span class="pre">discord.Embed</span></code></a>.</p>
</dd></dl>
</dd></dl>
<dl class="class">
<dt id="royalnet.audio.YtdlFile">
<em class="property">class </em><code class="sig-prename descclassname">royalnet.audio.</code><code class="sig-name descname">YtdlFile</code><span class="sig-paren">(</span><em class="sig-param">url: str</em>, <em class="sig-param">info: Optional[royalnet.audio.ytdlinfo.YtdlInfo] = None</em>, <em class="sig-param">filename: Optional[str] = None</em><span class="sig-paren">)</span><a class="headerlink" href="#royalnet.audio.YtdlFile" title="Permalink to this definition"></a></dt>
<dd><p>Information about a youtube-dl downloaded file.</p>
<dl class="attribute">
<dt id="royalnet.audio.YtdlFile._default_ytdl_args">
<code class="sig-name descname">_default_ytdl_args</code><em class="property"> = {'ignoreerrors': True, 'no_warnings': True, 'noplaylist': True, 'outtmpl': '%(epoch)s-%(title)s-%(id)s.%(ext)s', 'quiet': True}</em><a class="headerlink" href="#royalnet.audio.YtdlFile._default_ytdl_args" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
<dl class="method">
<dt id="royalnet.audio.YtdlFile.delete">
<code class="sig-name descname">delete</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#royalnet.audio.YtdlFile.delete" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
<dl class="method">
<dt id="royalnet.audio.YtdlFile.download_file">
<code class="sig-name descname">download_file</code><span class="sig-paren">(</span><em class="sig-param">**ytdl_args</em><span class="sig-paren">)</span> &#x2192; None<a class="headerlink" href="#royalnet.audio.YtdlFile.download_file" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
<dl class="method">
<dt id="royalnet.audio.YtdlFile.download_from_url">
<em class="property">classmethod </em><code class="sig-name descname">download_from_url</code><span class="sig-paren">(</span><em class="sig-param">url: str</em>, <em class="sig-param">**ytdl_args</em><span class="sig-paren">)</span> &#x2192; List[royalnet.audio.ytdlfile.YtdlFile]<a class="headerlink" href="#royalnet.audio.YtdlFile.download_from_url" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
<dl class="method">
<dt id="royalnet.audio.YtdlFile.has_info">
<code class="sig-name descname">has_info</code><span class="sig-paren">(</span><span class="sig-paren">)</span> &#x2192; bool<a class="headerlink" href="#royalnet.audio.YtdlFile.has_info" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
<dl class="method">
<dt id="royalnet.audio.YtdlFile.is_downloaded">
<code class="sig-name descname">is_downloaded</code><span class="sig-paren">(</span><span class="sig-paren">)</span> &#x2192; bool<a class="headerlink" href="#royalnet.audio.YtdlFile.is_downloaded" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
<dl class="method">
<dt id="royalnet.audio.YtdlFile.open">
<code class="sig-name descname">open</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#royalnet.audio.YtdlFile.open" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
<dl class="method">
<dt id="royalnet.audio.YtdlFile.update_info">
<code class="sig-name descname">update_info</code><span class="sig-paren">(</span><em class="sig-param">**ytdl_args</em><span class="sig-paren">)</span> &#x2192; None<a class="headerlink" href="#royalnet.audio.YtdlFile.update_info" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
</dd></dl>
<dl class="class">
<dt id="royalnet.audio.FileAudioSource">
<em class="property">class </em><code class="sig-prename descclassname">royalnet.audio.</code><code class="sig-name descname">FileAudioSource</code><span class="sig-paren">(</span><em class="sig-param">file</em><span class="sig-paren">)</span><a class="headerlink" href="#royalnet.audio.FileAudioSource" title="Permalink to this definition"></a></dt>
<dd><p>A <a class="reference external" href="https://discordpy.readthedocs.io/en/latest/api.html#discord.AudioSource" title="(in discord.py v1.3.0a)"><code class="xref py py-class docutils literal notranslate"><span class="pre">discord.AudioSource</span></code></a> that uses a <a class="reference external" href="https://docs.python.org/3.7/library/io.html#io.BufferedIOBase" title="(in Python v3.7)"><code class="xref py py-class docutils literal notranslate"><span class="pre">io.BufferedIOBase</span></code></a> as an input instead of memory.</p>
<p>The stream should be in the usual PCM encoding.</p>
<div class="admonition warning">
<p class="admonition-title">Warning</p>
<p>This AudioSource will consume (and close) the passed stream.</p>
</div>
<dl class="method">
<dt id="royalnet.audio.FileAudioSource.is_opus">
<code class="sig-name descname">is_opus</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#royalnet.audio.FileAudioSource.is_opus" title="Permalink to this definition"></a></dt>
<dd><p>This audio file isnt Opus-encoded, but PCM-encoded.</p>
<dl class="field-list simple">
<dt class="field-odd">Returns</dt>
<dd class="field-odd"><p><code class="docutils literal notranslate"><span class="pre">False</span></code>.</p>
</dd>
</dl>
</dd></dl>
<dl class="method">
<dt id="royalnet.audio.FileAudioSource.read">
<code class="sig-name descname">read</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#royalnet.audio.FileAudioSource.read" title="Permalink to this definition"></a></dt>
<dd><p>Reads 20ms worth of audio.</p>
<p>If the audio is complete, then returning an empty <a class="reference external" href="https://docs.python.org/3.7/library/stdtypes.html#bytes" title="(in Python v3.7)"><code class="xref py py-class docutils literal notranslate"><span class="pre">bytes</span></code></a>-like object to signal this is the way to do so.</p>
</dd></dl>
</dd></dl>
<dl class="class">
<dt id="royalnet.audio.YtdlDiscord">
<em class="property">class </em><code class="sig-prename descclassname">royalnet.audio.</code><code class="sig-name descname">YtdlDiscord</code><span class="sig-paren">(</span><em class="sig-param">ytdl_file: royalnet.audio.ytdlfile.YtdlFile</em><span class="sig-paren">)</span><a class="headerlink" href="#royalnet.audio.YtdlDiscord" title="Permalink to this definition"></a></dt>
<dd><dl class="method">
<dt id="royalnet.audio.YtdlDiscord.convert_to_pcm">
<code class="sig-name descname">convert_to_pcm</code><span class="sig-paren">(</span><span class="sig-paren">)</span> &#x2192; None<a class="headerlink" href="#royalnet.audio.YtdlDiscord.convert_to_pcm" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
<dl class="method">
<dt id="royalnet.audio.YtdlDiscord.create_from_url">
<em class="property">classmethod </em><code class="sig-name descname">create_from_url</code><span class="sig-paren">(</span><em class="sig-param">url</em>, <em class="sig-param">**ytdl_args</em><span class="sig-paren">)</span> &#x2192; List[royalnet.audio.ytdldiscord.YtdlDiscord]<a class="headerlink" href="#royalnet.audio.YtdlDiscord.create_from_url" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
<dl class="method">
<dt id="royalnet.audio.YtdlDiscord.delete">
<code class="sig-name descname">delete</code><span class="sig-paren">(</span><span class="sig-paren">)</span> &#x2192; None<a class="headerlink" href="#royalnet.audio.YtdlDiscord.delete" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
<dl class="method">
<dt id="royalnet.audio.YtdlDiscord.info">
<em class="property">property </em><code class="sig-name descname">info</code><a class="headerlink" href="#royalnet.audio.YtdlDiscord.info" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
<dl class="method">
<dt id="royalnet.audio.YtdlDiscord.pcm_available">
<code class="sig-name descname">pcm_available</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#royalnet.audio.YtdlDiscord.pcm_available" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
<dl class="method">
<dt id="royalnet.audio.YtdlDiscord.ready_up">
<code class="sig-name descname">ready_up</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#royalnet.audio.YtdlDiscord.ready_up" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
<dl class="method">
<dt id="royalnet.audio.YtdlDiscord.spawn_audiosource">
<code class="sig-name descname">spawn_audiosource</code><span class="sig-paren">(</span><span class="sig-paren">)</span> &#x2192; royalnet.audio.fileaudiosource.FileAudioSource<a class="headerlink" href="#royalnet.audio.YtdlDiscord.spawn_audiosource" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
</dd></dl>
<dl class="class">
<dt id="royalnet.audio.YtdlMp3">
<em class="property">class </em><code class="sig-prename descclassname">royalnet.audio.</code><code class="sig-name descname">YtdlMp3</code><span class="sig-paren">(</span><em class="sig-param">ytdl_file: royalnet.audio.ytdlfile.YtdlFile</em><span class="sig-paren">)</span><a class="headerlink" href="#royalnet.audio.YtdlMp3" title="Permalink to this definition"></a></dt>
<dd><dl class="method">
<dt id="royalnet.audio.YtdlMp3.convert_to_mp3">
<code class="sig-name descname">convert_to_mp3</code><span class="sig-paren">(</span><span class="sig-paren">)</span> &#x2192; None<a class="headerlink" href="#royalnet.audio.YtdlMp3.convert_to_mp3" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
<dl class="method">
<dt id="royalnet.audio.YtdlMp3.create_and_ready_from_url">
<em class="property">classmethod </em><code class="sig-name descname">create_and_ready_from_url</code><span class="sig-paren">(</span><em class="sig-param">url</em>, <em class="sig-param">**ytdl_args</em><span class="sig-paren">)</span> &#x2192; List[royalnet.audio.ytdlmp3.YtdlMp3]<a class="headerlink" href="#royalnet.audio.YtdlMp3.create_and_ready_from_url" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
<dl class="method">
<dt id="royalnet.audio.YtdlMp3.create_from_url">
<em class="property">classmethod </em><code class="sig-name descname">create_from_url</code><span class="sig-paren">(</span><em class="sig-param">url</em>, <em class="sig-param">**ytdl_args</em><span class="sig-paren">)</span> &#x2192; List[royalnet.audio.ytdlmp3.YtdlMp3]<a class="headerlink" href="#royalnet.audio.YtdlMp3.create_from_url" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
<dl class="method">
<dt id="royalnet.audio.YtdlMp3.delete">
<code class="sig-name descname">delete</code><span class="sig-paren">(</span><span class="sig-paren">)</span> &#x2192; None<a class="headerlink" href="#royalnet.audio.YtdlMp3.delete" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
<dl class="method">
<dt id="royalnet.audio.YtdlMp3.info">
<em class="property">property </em><code class="sig-name descname">info</code><a class="headerlink" href="#royalnet.audio.YtdlMp3.info" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
<dl class="method">
<dt id="royalnet.audio.YtdlMp3.pcm_available">
<code class="sig-name descname">pcm_available</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#royalnet.audio.YtdlMp3.pcm_available" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
<dl class="method">
<dt id="royalnet.audio.YtdlMp3.ready_up">
<code class="sig-name descname">ready_up</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#royalnet.audio.YtdlMp3.ready_up" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
</dd></dl>
</div>
<div class="section" id="module-royalnet.bots">
<span id="bots"></span><h2>Bots<a class="headerlink" href="#module-royalnet.bots" title="Permalink to this headline"></a></h2>
<p>Various bot interfaces, and a generic class to create new ones.</p>
<dl class="class">
<dt id="royalnet.bots.TelegramBot">
<em class="property">class </em><code class="sig-prename descclassname">royalnet.bots.</code><code class="sig-name descname">TelegramBot</code><span class="sig-paren">(</span><em class="sig-param">*</em>, <em class="sig-param">network_config: Optional[royalnet.network.networkconfig.NetworkConfig] = None</em>, <em class="sig-param">database_config: Optional[royalnet.database.databaseconfig.DatabaseConfig] = None</em>, <em class="sig-param">commands: List[Type[royalnet.commands.command.Command]] = None</em>, <em class="sig-param">sentry_dsn: Optional[str] = None</em>, <em class="sig-param">loop: asyncio.events.AbstractEventLoop = None</em>, <em class="sig-param">secrets_name: str = '__default__'</em><span class="sig-paren">)</span><a class="headerlink" href="#royalnet.bots.TelegramBot" title="Permalink to this definition"></a></dt>
<dd><p>A bot that connects to <a class="reference external" href="https://telegram.org/">Telegram</a>.</p>
<dl class="method">
<dt id="royalnet.bots.TelegramBot._data_factory">
<code class="sig-name descname">_data_factory</code><span class="sig-paren">(</span><span class="sig-paren">)</span> &#x2192; Type[royalnet.commands.commanddata.CommandData]<a class="headerlink" href="#royalnet.bots.TelegramBot._data_factory" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
<dl class="method">
<dt id="royalnet.bots.TelegramBot._handle_callback_query">
<em class="property">async </em><code class="sig-name descname">_handle_callback_query</code><span class="sig-paren">(</span><em class="sig-param">update: telegram.update.Update</em><span class="sig-paren">)</span><a class="headerlink" href="#royalnet.bots.TelegramBot._handle_callback_query" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
<dl class="method">
<dt id="royalnet.bots.TelegramBot._handle_message">
<em class="property">async </em><code class="sig-name descname">_handle_message</code><span class="sig-paren">(</span><em class="sig-param">update: telegram.update.Update</em><span class="sig-paren">)</span><a class="headerlink" href="#royalnet.bots.TelegramBot._handle_message" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
<dl class="method">
<dt id="royalnet.bots.TelegramBot._handle_update">
<em class="property">async </em><code class="sig-name descname">_handle_update</code><span class="sig-paren">(</span><em class="sig-param">update: telegram.update.Update</em><span class="sig-paren">)</span><a class="headerlink" href="#royalnet.bots.TelegramBot._handle_update" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
<dl class="method">
<dt id="royalnet.bots.TelegramBot._init_client">
<code class="sig-name descname">_init_client</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#royalnet.bots.TelegramBot._init_client" title="Permalink to this definition"></a></dt>
<dd><p>Create the <a class="reference external" href="https://python-telegram-bot.readthedocs.io/en/stable/telegram.bot.html#telegram.Bot" title="(in Python Telegram Bot v12.1)"><code class="xref py py-class docutils literal notranslate"><span class="pre">telegram.Bot</span></code></a>, and set the starting offset.</p>
</dd></dl>
<dl class="method">
<dt id="royalnet.bots.TelegramBot._initialize">
<code class="sig-name descname">_initialize</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#royalnet.bots.TelegramBot._initialize" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
<dl class="method">
<dt id="royalnet.bots.TelegramBot._interface_factory">
<code class="sig-name descname">_interface_factory</code><span class="sig-paren">(</span><span class="sig-paren">)</span> &#x2192; Type[royalnet.commands.commandinterface.CommandInterface]<a class="headerlink" href="#royalnet.bots.TelegramBot._interface_factory" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
<dl class="attribute">
<dt id="royalnet.bots.TelegramBot.interface_name">
<code class="sig-name descname">interface_name</code><em class="property"> = 'telegram'</em><a class="headerlink" href="#royalnet.bots.TelegramBot.interface_name" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
<dl class="method">
<dt id="royalnet.bots.TelegramBot.run">
<em class="property">async </em><code class="sig-name descname">run</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#royalnet.bots.TelegramBot.run" title="Permalink to this definition"></a></dt>
<dd><p>A blocking coroutine that should make the bot start listening to commands and requests.</p>
</dd></dl>
<dl class="method">
<dt id="royalnet.bots.TelegramBot.safe_api_call">
<em class="property">static </em><code class="sig-name descname">safe_api_call</code><span class="sig-paren">(</span><em class="sig-param">f: Callable</em>, <em class="sig-param">*args</em>, <em class="sig-param">**kwargs</em><span class="sig-paren">)</span> &#x2192; Optional<a class="headerlink" href="#royalnet.bots.TelegramBot.safe_api_call" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
</dd></dl>
<dl class="class">
<dt id="royalnet.bots.DiscordBot">
<em class="property">class </em><code class="sig-prename descclassname">royalnet.bots.</code><code class="sig-name descname">DiscordBot</code><span class="sig-paren">(</span><em class="sig-param">*</em>, <em class="sig-param">network_config: Optional[royalnet.network.networkconfig.NetworkConfig] = None</em>, <em class="sig-param">database_config: Optional[royalnet.database.databaseconfig.DatabaseConfig] = None</em>, <em class="sig-param">commands: List[Type[royalnet.commands.command.Command]] = None</em>, <em class="sig-param">sentry_dsn: Optional[str] = None</em>, <em class="sig-param">loop: asyncio.events.AbstractEventLoop = None</em>, <em class="sig-param">secrets_name: str = '__default__'</em><span class="sig-paren">)</span><a class="headerlink" href="#royalnet.bots.DiscordBot" title="Permalink to this definition"></a></dt>
<dd><p>A bot that connects to <a class="reference external" href="https://discordapp.com/">Discord</a>.</p>
<dl class="method">
<dt id="royalnet.bots.DiscordBot._bot_factory">
<code class="sig-name descname">_bot_factory</code><span class="sig-paren">(</span><span class="sig-paren">)</span> &#x2192; Type[discord.client.Client]<a class="headerlink" href="#royalnet.bots.DiscordBot._bot_factory" title="Permalink to this definition"></a></dt>
<dd><p>Create a custom DiscordClient class inheriting from <a class="reference external" href="https://discordpy.readthedocs.io/en/latest/api.html#discord.Client" title="(in discord.py v1.3.0a)"><code class="xref py py-class docutils literal notranslate"><span class="pre">discord.Client</span></code></a>.</p>
</dd></dl>
<dl class="method">
<dt id="royalnet.bots.DiscordBot._data_factory">
<code class="sig-name descname">_data_factory</code><span class="sig-paren">(</span><span class="sig-paren">)</span> &#x2192; Type[royalnet.commands.commanddata.CommandData]<a class="headerlink" href="#royalnet.bots.DiscordBot._data_factory" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
<dl class="method">
<dt id="royalnet.bots.DiscordBot._init_client">
<code class="sig-name descname">_init_client</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#royalnet.bots.DiscordBot._init_client" title="Permalink to this definition"></a></dt>
<dd><p>Create an instance of the DiscordClient class created in <a class="reference internal" href="#royalnet.bots.DiscordBot._bot_factory" title="royalnet.bots.DiscordBot._bot_factory"><code class="xref py py-func docutils literal notranslate"><span class="pre">royalnet.bots.DiscordBot._bot_factory()</span></code></a>.</p>
</dd></dl>
<dl class="method">
<dt id="royalnet.bots.DiscordBot._init_voice">
<code class="sig-name descname">_init_voice</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#royalnet.bots.DiscordBot._init_voice" title="Permalink to this definition"></a></dt>
<dd><p>Initialize the variables needed for the connection to voice chat.</p>
</dd></dl>
<dl class="method">
<dt id="royalnet.bots.DiscordBot._initialize">
<code class="sig-name descname">_initialize</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#royalnet.bots.DiscordBot._initialize" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
<dl class="method">
<dt id="royalnet.bots.DiscordBot._interface_factory">
<code class="sig-name descname">_interface_factory</code><span class="sig-paren">(</span><span class="sig-paren">)</span> &#x2192; Type[royalnet.commands.commandinterface.CommandInterface]<a class="headerlink" href="#royalnet.bots.DiscordBot._interface_factory" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
<dl class="method">
<dt id="royalnet.bots.DiscordBot.add_to_music_data">
<em class="property">async </em><code class="sig-name descname">add_to_music_data</code><span class="sig-paren">(</span><em class="sig-param">dfiles: List[royalnet.audio.ytdldiscord.YtdlDiscord], guild: discord.guild.Guild</em><span class="sig-paren">)</span><a class="headerlink" href="#royalnet.bots.DiscordBot.add_to_music_data" title="Permalink to this definition"></a></dt>
<dd><p>Add a list of <a class="reference internal" href="#royalnet.audio.YtdlDiscord" title="royalnet.audio.YtdlDiscord"><code class="xref py py-class docutils literal notranslate"><span class="pre">royalnet.audio.YtdlDiscord</span></code></a> to the corresponding music_data object.</p>
</dd></dl>
<dl class="method">
<dt id="royalnet.bots.DiscordBot.advance_music_data">
<em class="property">async </em><code class="sig-name descname">advance_music_data</code><span class="sig-paren">(</span><em class="sig-param">guild: discord.guild.Guild</em><span class="sig-paren">)</span><a class="headerlink" href="#royalnet.bots.DiscordBot.advance_music_data" title="Permalink to this definition"></a></dt>
<dd><p>Try to play the next song, while it exists. Otherwise, just return.</p>
</dd></dl>
<dl class="attribute">
<dt id="royalnet.bots.DiscordBot.interface_name">
<code class="sig-name descname">interface_name</code><em class="property"> = 'discord'</em><a class="headerlink" href="#royalnet.bots.DiscordBot.interface_name" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
<dl class="method">
<dt id="royalnet.bots.DiscordBot.run">
<em class="property">async </em><code class="sig-name descname">run</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#royalnet.bots.DiscordBot.run" title="Permalink to this definition"></a></dt>
<dd><p>Login to Discord, then run the bot.</p>
</dd></dl>
<dl class="method">
<dt id="royalnet.bots.DiscordBot.update_activity_with_source_title">
<em class="property">async </em><code class="sig-name descname">update_activity_with_source_title</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#royalnet.bots.DiscordBot.update_activity_with_source_title" title="Permalink to this definition"></a></dt>
<dd><p>Change the bots presence (using <code class="xref py py-func docutils literal notranslate"><span class="pre">discord.Client.change_presence()</span></code>) to match the current listening status.</p>
<p>If multiple guilds are using the bot, the bot will always have an empty presence.</p>
</dd></dl>
</dd></dl>
<dl class="class">
<dt id="royalnet.bots.GenericBot">
<em class="property">class </em><code class="sig-prename descclassname">royalnet.bots.</code><code class="sig-name descname">GenericBot</code><span class="sig-paren">(</span><em class="sig-param">*</em>, <em class="sig-param">network_config: Optional[royalnet.network.networkconfig.NetworkConfig] = None</em>, <em class="sig-param">database_config: Optional[royalnet.database.databaseconfig.DatabaseConfig] = None</em>, <em class="sig-param">commands: List[Type[royalnet.commands.command.Command]] = None</em>, <em class="sig-param">sentry_dsn: Optional[str] = None</em>, <em class="sig-param">loop: asyncio.events.AbstractEventLoop = None</em>, <em class="sig-param">secrets_name: str = '__default__'</em><span class="sig-paren">)</span><a class="headerlink" href="#royalnet.bots.GenericBot" title="Permalink to this definition"></a></dt>
<dd><p>A generic bot class, to be used as base for the other more specific classes, such as
<a class="reference internal" href="#royalnet.bots.TelegramBot" title="royalnet.bots.TelegramBot"><code class="xref py py-class docutils literal notranslate"><span class="pre">royalnet.bots.TelegramBot</span></code></a> and <a class="reference internal" href="#royalnet.bots.DiscordBot" title="royalnet.bots.DiscordBot"><code class="xref py py-class docutils literal notranslate"><span class="pre">royalnet.bots.DiscordBot</span></code></a>.</p>
<dl class="method">
<dt id="royalnet.bots.GenericBot._data_factory">
<code class="sig-name descname">_data_factory</code><span class="sig-paren">(</span><span class="sig-paren">)</span> &#x2192; Type[royalnet.commands.commanddata.CommandData]<a class="headerlink" href="#royalnet.bots.GenericBot._data_factory" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
<dl class="method">
<dt id="royalnet.bots.GenericBot._init_commands">
<code class="sig-name descname">_init_commands</code><span class="sig-paren">(</span><span class="sig-paren">)</span> &#x2192; None<a class="headerlink" href="#royalnet.bots.GenericBot._init_commands" title="Permalink to this definition"></a></dt>
<dd><p>Generate the <code class="docutils literal notranslate"><span class="pre">commands</span></code> dictionary required to handle incoming messages, and the <code class="docutils literal notranslate"><span class="pre">network_handlers</span></code>
dictionary required to handle incoming requests.</p>
</dd></dl>
<dl class="method">
<dt id="royalnet.bots.GenericBot._init_database">
<code class="sig-name descname">_init_database</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#royalnet.bots.GenericBot._init_database" title="Permalink to this definition"></a></dt>
<dd><p>Create an <a class="reference internal" href="#royalnet.database.Alchemy" title="royalnet.database.Alchemy"><code class="xref py py-class docutils literal notranslate"><span class="pre">royalnet.database.Alchemy</span></code></a> with the tables required by the commands. Then,
find the chain that links the <code class="docutils literal notranslate"><span class="pre">master_table</span></code> to the <code class="docutils literal notranslate"><span class="pre">identity_table</span></code>.</p>
</dd></dl>
<dl class="method">
<dt id="royalnet.bots.GenericBot._init_loop">
<code class="sig-name descname">_init_loop</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#royalnet.bots.GenericBot._init_loop" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
<dl class="method">
<dt id="royalnet.bots.GenericBot._init_network">
<code class="sig-name descname">_init_network</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#royalnet.bots.GenericBot._init_network" title="Permalink to this definition"></a></dt>
<dd><p>Create a <a class="reference internal" href="#royalnet.network.NetworkLink" title="royalnet.network.NetworkLink"><code class="xref py py-class docutils literal notranslate"><span class="pre">royalnet.network.NetworkLink</span></code></a>, and run it as a <a class="reference external" href="https://docs.python.org/3.7/library/asyncio-task.html#asyncio.Task" title="(in Python v3.7)"><code class="xref py py-class docutils literal notranslate"><span class="pre">asyncio.Task</span></code></a>.</p>
</dd></dl>
<dl class="method">
<dt id="royalnet.bots.GenericBot._init_sentry">
<code class="sig-name descname">_init_sentry</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#royalnet.bots.GenericBot._init_sentry" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
<dl class="method">
<dt id="royalnet.bots.GenericBot._initialize">
<code class="sig-name descname">_initialize</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#royalnet.bots.GenericBot._initialize" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
<dl class="method">
<dt id="royalnet.bots.GenericBot._interface_factory">
<code class="sig-name descname">_interface_factory</code><span class="sig-paren">(</span><span class="sig-paren">)</span> &#x2192; Type[royalnet.commands.commandinterface.CommandInterface]<a class="headerlink" href="#royalnet.bots.GenericBot._interface_factory" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
<dl class="method">
<dt id="royalnet.bots.GenericBot._network_handler">
<em class="property">async </em><code class="sig-name descname">_network_handler</code><span class="sig-paren">(</span><em class="sig-param">request_dict: dict</em><span class="sig-paren">)</span> &#x2192; dict<a class="headerlink" href="#royalnet.bots.GenericBot._network_handler" title="Permalink to this definition"></a></dt>
<dd><p>Handle a single <a class="reference external" href="https://docs.python.org/3.7/library/stdtypes.html#dict" title="(in Python v3.7)"><code class="xref py py-class docutils literal notranslate"><span class="pre">dict</span></code></a> received from the <a class="reference internal" href="#royalnet.network.NetworkLink" title="royalnet.network.NetworkLink"><code class="xref py py-class docutils literal notranslate"><span class="pre">royalnet.network.NetworkLink</span></code></a>.</p>
<dl class="field-list simple">
<dt class="field-odd">Returns</dt>
<dd class="field-odd"><p>Another <a class="reference external" href="https://docs.python.org/3.7/library/stdtypes.html#dict" title="(in Python v3.7)"><code class="xref py py-class docutils literal notranslate"><span class="pre">dict</span></code></a>, formatted as a <a class="reference internal" href="#royalnet.network.Response" title="royalnet.network.Response"><code class="xref py py-class docutils literal notranslate"><span class="pre">royalnet.network.Response</span></code></a>.</p>
</dd>
</dl>
</dd></dl>
<dl class="method">
<dt id="royalnet.bots.GenericBot.get_secret">
<code class="sig-name descname">get_secret</code><span class="sig-paren">(</span><em class="sig-param">username: str</em><span class="sig-paren">)</span><a class="headerlink" href="#royalnet.bots.GenericBot.get_secret" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
<dl class="attribute">
<dt id="royalnet.bots.GenericBot.interface_name">
<code class="sig-name descname">interface_name</code><em class="property"> = NotImplemented</em><a class="headerlink" href="#royalnet.bots.GenericBot.interface_name" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
<dl class="method">
<dt id="royalnet.bots.GenericBot.run">
<code class="sig-name descname">run</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#royalnet.bots.GenericBot.run" title="Permalink to this definition"></a></dt>
<dd><p>A blocking coroutine that should make the bot start listening to commands and requests.</p>
</dd></dl>
<dl class="method">
<dt id="royalnet.bots.GenericBot.run_blocking">
<code class="sig-name descname">run_blocking</code><span class="sig-paren">(</span><em class="sig-param">verbose=False</em><span class="sig-paren">)</span><a class="headerlink" href="#royalnet.bots.GenericBot.run_blocking" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
<dl class="method">
<dt id="royalnet.bots.GenericBot.set_secret">
<code class="sig-name descname">set_secret</code><span class="sig-paren">(</span><em class="sig-param">username: str</em>, <em class="sig-param">password: str</em><span class="sig-paren">)</span><a class="headerlink" href="#royalnet.bots.GenericBot.set_secret" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
</dd></dl>
</div>
<div class="section" id="module-royalnet.commands">
<span id="commands"></span><h2>Commands<a class="headerlink" href="#module-royalnet.commands" title="Permalink to this headline"></a></h2>
<dl class="class">
<dt id="royalnet.commands.CommandInterface">
<em class="property">class </em><code class="sig-prename descclassname">royalnet.commands.</code><code class="sig-name descname">CommandInterface</code><a class="headerlink" href="#royalnet.commands.CommandInterface" title="Permalink to this definition"></a></dt>
<dd><dl class="attribute">
<dt id="royalnet.commands.CommandInterface.alchemy">
<code class="sig-name descname">alchemy</code><em class="property"> = NotImplemented</em><a class="headerlink" href="#royalnet.commands.CommandInterface.alchemy" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
<dl class="attribute">
<dt id="royalnet.commands.CommandInterface.bot">
<code class="sig-name descname">bot</code><em class="property"> = NotImplemented</em><a class="headerlink" href="#royalnet.commands.CommandInterface.bot" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
<dl class="attribute">
<dt id="royalnet.commands.CommandInterface.loop">
<code class="sig-name descname">loop</code><em class="property"> = NotImplemented</em><a class="headerlink" href="#royalnet.commands.CommandInterface.loop" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
<dl class="attribute">
<dt id="royalnet.commands.CommandInterface.name">
<code class="sig-name descname">name</code><em class="property"> = NotImplemented</em><a class="headerlink" href="#royalnet.commands.CommandInterface.name" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
<dl class="method">
<dt id="royalnet.commands.CommandInterface.net_request">
<em class="property">async </em><code class="sig-name descname">net_request</code><span class="sig-paren">(</span><em class="sig-param">message</em>, <em class="sig-param">destination: str</em><span class="sig-paren">)</span> &#x2192; dict<a class="headerlink" href="#royalnet.commands.CommandInterface.net_request" title="Permalink to this definition"></a></dt>
<dd><p>Send data through a <a class="reference internal" href="#royalnet.network.NetworkLink" title="royalnet.network.NetworkLink"><code class="xref py py-class docutils literal notranslate"><span class="pre">royalnet.network.NetworkLink</span></code></a> and wait for a
<code class="xref py py-class docutils literal notranslate"><span class="pre">royalnet.network.Reply</span></code>.</p>
<dl class="field-list simple">
<dt class="field-odd">Parameters</dt>
<dd class="field-odd"><ul class="simple">
<li><p><strong>message</strong> The data to be sent. Must be <a class="reference external" href="https://docs.python.org/3.7/library/pickle.html#module-pickle" title="(in Python v3.7)"><code class="xref py py-mod docutils literal notranslate"><span class="pre">pickle</span></code></a>-able.</p></li>
<li><p><strong>destination</strong> The destination of the request, either in UUID format or node name.</p></li>
</ul>
</dd>
</dl>
</dd></dl>
<dl class="attribute">
<dt id="royalnet.commands.CommandInterface.prefix">
<code class="sig-name descname">prefix</code><em class="property"> = NotImplemented</em><a class="headerlink" href="#royalnet.commands.CommandInterface.prefix" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
<dl class="method">
<dt id="royalnet.commands.CommandInterface.register_keyboard_key">
<code class="sig-name descname">register_keyboard_key</code><span class="sig-paren">(</span><em class="sig-param">key_name: str</em>, <em class="sig-param">callback: Callable</em><span class="sig-paren">)</span><a class="headerlink" href="#royalnet.commands.CommandInterface.register_keyboard_key" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
<dl class="method">
<dt id="royalnet.commands.CommandInterface.register_net_handler">
<code class="sig-name descname">register_net_handler</code><span class="sig-paren">(</span><em class="sig-param">message_type: str</em>, <em class="sig-param">network_handler: Callable</em><span class="sig-paren">)</span><a class="headerlink" href="#royalnet.commands.CommandInterface.register_net_handler" title="Permalink to this definition"></a></dt>
<dd><p>Register a new handler for messages received through Royalnet.</p>
</dd></dl>
<dl class="method">
<dt id="royalnet.commands.CommandInterface.unregister_keyboard_key">
<code class="sig-name descname">unregister_keyboard_key</code><span class="sig-paren">(</span><em class="sig-param">key_name: str</em><span class="sig-paren">)</span><a class="headerlink" href="#royalnet.commands.CommandInterface.unregister_keyboard_key" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
<dl class="method">
<dt id="royalnet.commands.CommandInterface.unregister_net_handler">
<code class="sig-name descname">unregister_net_handler</code><span class="sig-paren">(</span><em class="sig-param">message_type: str</em><span class="sig-paren">)</span><a class="headerlink" href="#royalnet.commands.CommandInterface.unregister_net_handler" title="Permalink to this definition"></a></dt>
<dd><p>Remove a Royalnet handler.</p>
</dd></dl>
</dd></dl>
<dl class="class">
<dt id="royalnet.commands.Command">
<em class="property">class </em><code class="sig-prename descclassname">royalnet.commands.</code><code class="sig-name descname">Command</code><span class="sig-paren">(</span><em class="sig-param">interface: royalnet.commands.commandinterface.CommandInterface</em><span class="sig-paren">)</span><a class="headerlink" href="#royalnet.commands.Command" title="Permalink to this definition"></a></dt>
<dd><dl class="attribute">
<dt id="royalnet.commands.Command.aliases">
<code class="sig-name descname">aliases</code><em class="property"> = NotImplemented</em><a class="headerlink" href="#royalnet.commands.Command.aliases" title="Permalink to this definition"></a></dt>
<dd><p>A list of possible aliases for a command.
To have <code class="docutils literal notranslate"><span class="pre">/e</span></code> as alias for <code class="docutils literal notranslate"><span class="pre">/example</span></code>, one should set aliases to <code class="docutils literal notranslate"><span class="pre">[&quot;e&quot;]</span></code>.</p>
</dd></dl>
<dl class="attribute">
<dt id="royalnet.commands.Command.description">
<code class="sig-name descname">description</code><em class="property"> = NotImplemented</em><a class="headerlink" href="#royalnet.commands.Command.description" title="Permalink to this definition"></a></dt>
<dd><p>A small description of the command, to be displayed when the command is being autocompleted.</p>
</dd></dl>
<dl class="attribute">
<dt id="royalnet.commands.Command.name">
<code class="sig-name descname">name</code><em class="property"> = NotImplemented</em><a class="headerlink" href="#royalnet.commands.Command.name" title="Permalink to this definition"></a></dt>
<dd><p>The main name of the command.
To have <code class="docutils literal notranslate"><span class="pre">/example</span></code> on Telegram, the name should be <code class="docutils literal notranslate"><span class="pre">example</span></code>.</p>
</dd></dl>
<dl class="attribute">
<dt id="royalnet.commands.Command.require_alchemy_tables">
<code class="sig-name descname">require_alchemy_tables</code><em class="property"> = {}</em><a class="headerlink" href="#royalnet.commands.Command.require_alchemy_tables" title="Permalink to this definition"></a></dt>
<dd><p>A set of <a class="reference internal" href="#module-royalnet.database" title="royalnet.database"><code class="xref py py-class docutils literal notranslate"><span class="pre">royalnet.database</span></code></a> tables that must exist for this command to work.</p>
</dd></dl>
<dl class="method">
<dt id="royalnet.commands.Command.run">
<em class="property">async </em><code class="sig-name descname">run</code><span class="sig-paren">(</span><em class="sig-param">args: royalnet.commands.commandargs.CommandArgs</em>, <em class="sig-param">data: royalnet.commands.commanddata.CommandData</em><span class="sig-paren">)</span> &#x2192; None<a class="headerlink" href="#royalnet.commands.Command.run" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
<dl class="attribute">
<dt id="royalnet.commands.Command.syntax">
<code class="sig-name descname">syntax</code><em class="property"> = ''</em><a class="headerlink" href="#royalnet.commands.Command.syntax" title="Permalink to this definition"></a></dt>
<dd><p>The syntax of the command, to be displayed when a <code class="xref py py-exc docutils literal notranslate"><span class="pre">royalnet.error.InvalidInputError</span></code> is raised,
in the format <code class="docutils literal notranslate"><span class="pre">(required_arg)</span> <span class="pre">[optional_arg]</span></code>.</p>
</dd></dl>
</dd></dl>
<dl class="class">
<dt id="royalnet.commands.CommandData">
<em class="property">class </em><code class="sig-prename descclassname">royalnet.commands.</code><code class="sig-name descname">CommandData</code><a class="headerlink" href="#royalnet.commands.CommandData" title="Permalink to this definition"></a></dt>
<dd><dl class="method">
<dt id="royalnet.commands.CommandData.delete_invoking">
<em class="property">async </em><code class="sig-name descname">delete_invoking</code><span class="sig-paren">(</span><em class="sig-param">error_if_unavailable=False</em><span class="sig-paren">)</span> &#x2192; None<a class="headerlink" href="#royalnet.commands.CommandData.delete_invoking" title="Permalink to this definition"></a></dt>
<dd><p>Delete the invoking message, if supported by the interface.</p>
<p>The invoking message is the message send by the user that contains the command.</p>
<dl class="field-list simple">
<dt class="field-odd">Parameters</dt>
<dd class="field-odd"><p><strong>error_if_unavailable</strong> if True, raise an exception if the message cannot been deleted.</p>
</dd>
</dl>
</dd></dl>
<dl class="method">
<dt id="royalnet.commands.CommandData.get_author">
<em class="property">async </em><code class="sig-name descname">get_author</code><span class="sig-paren">(</span><em class="sig-param">error_if_none: bool = False</em><span class="sig-paren">)</span><a class="headerlink" href="#royalnet.commands.CommandData.get_author" title="Permalink to this definition"></a></dt>
<dd><p>Try to find the identifier of the user that sent the message.
That probably means, the database row identifying the user.</p>
<dl class="field-list simple">
<dt class="field-odd">Parameters</dt>
<dd class="field-odd"><p><strong>error_if_none</strong> Raise an exception if this is True and the call has no author.</p>
</dd>
</dl>
</dd></dl>
<dl class="method">
<dt id="royalnet.commands.CommandData.keyboard">
<em class="property">async </em><code class="sig-name descname">keyboard</code><span class="sig-paren">(</span><em class="sig-param">text: str, keyboard: Dict[str, Callable]</em><span class="sig-paren">)</span> &#x2192; None<a class="headerlink" href="#royalnet.commands.CommandData.keyboard" title="Permalink to this definition"></a></dt>
<dd><p>Send a keyboard having the keys of the dict as keys and calling the correspondent values on a press.</p>
<p>The function should be passed the <a class="reference internal" href="#royalnet.commands.CommandData" title="royalnet.commands.CommandData"><code class="xref py py-class docutils literal notranslate"><span class="pre">CommandData</span></code></a> instance as a argument.</p>
</dd></dl>
<dl class="method">
<dt id="royalnet.commands.CommandData.reply">
<em class="property">async </em><code class="sig-name descname">reply</code><span class="sig-paren">(</span><em class="sig-param">text: str</em><span class="sig-paren">)</span> &#x2192; None<a class="headerlink" href="#royalnet.commands.CommandData.reply" title="Permalink to this definition"></a></dt>
<dd><p>Send a text message to the channel where the call was made.</p>
<dl class="field-list simple">
<dt class="field-odd">Parameters</dt>
<dd class="field-odd"><p><strong>text</strong> The text to be sent, possibly formatted in the weird undescribed markup that Im using.</p>
</dd>
</dl>
</dd></dl>
</dd></dl>
<dl class="class">
<dt id="royalnet.commands.CommandArgs">
<em class="property">class </em><code class="sig-prename descclassname">royalnet.commands.</code><code class="sig-name descname">CommandArgs</code><a class="headerlink" href="#royalnet.commands.CommandArgs" title="Permalink to this definition"></a></dt>
<dd><p>An interface to access the arguments of a command with ease.</p>
<dl class="method">
<dt id="royalnet.commands.CommandArgs.__getitem__">
<code class="sig-name descname">__getitem__</code><span class="sig-paren">(</span><em class="sig-param">item</em><span class="sig-paren">)</span><a class="headerlink" href="#royalnet.commands.CommandArgs.__getitem__" title="Permalink to this definition"></a></dt>
<dd><p>Arguments can be accessed with an array notation, such as <code class="docutils literal notranslate"><span class="pre">args[0]</span></code>.</p>
<dl class="field-list simple">
<dt class="field-odd">Raises</dt>
<dd class="field-odd"><p><strong>royalnet.error.InvalidInputError</strong> if the requested argument does not exist.</p>
</dd>
</dl>
</dd></dl>
<dl class="method">
<dt id="royalnet.commands.CommandArgs.joined">
<code class="sig-name descname">joined</code><span class="sig-paren">(</span><em class="sig-param">*</em>, <em class="sig-param">require_at_least=0</em><span class="sig-paren">)</span> &#x2192; str<a class="headerlink" href="#royalnet.commands.CommandArgs.joined" title="Permalink to this definition"></a></dt>
<dd><p>Get the arguments as a space-joined string.</p>
<dl class="field-list simple">
<dt class="field-odd">Parameters</dt>
<dd class="field-odd"><p><strong>require_at_least</strong> the minimum amount of arguments required, will raise <code class="xref py py-exc docutils literal notranslate"><span class="pre">royalnet.error.InvalidInputError</span></code> if the requirement is not fullfilled.</p>
</dd>
<dt class="field-even">Raises</dt>
<dd class="field-even"><p><strong>royalnet.error.InvalidInputError</strong> if there are less than <code class="docutils literal notranslate"><span class="pre">require_at_least</span></code> arguments.</p>
</dd>
<dt class="field-odd">Returns</dt>
<dd class="field-odd"><p>The space-joined string.</p>
</dd>
</dl>
</dd></dl>
<dl class="method">
<dt id="royalnet.commands.CommandArgs.match">
<code class="sig-name descname">match</code><span class="sig-paren">(</span><em class="sig-param">pattern: Union[str, Pattern], *flags</em><span class="sig-paren">)</span> &#x2192; Sequence[AnyStr]<a class="headerlink" href="#royalnet.commands.CommandArgs.match" title="Permalink to this definition"></a></dt>
<dd><p>Match the <code class="xref py py-func docutils literal notranslate"><span class="pre">royalnet.utils.commandargs.joined()</span></code> to a regex pattern.</p>
<dl class="field-list simple">
<dt class="field-odd">Parameters</dt>
<dd class="field-odd"><p><strong>pattern</strong> The regex pattern to be passed to <a class="reference external" href="https://docs.python.org/3.7/library/re.html#re.match" title="(in Python v3.7)"><code class="xref py py-func docutils literal notranslate"><span class="pre">re.match()</span></code></a>.</p>
</dd>
<dt class="field-even">Raises</dt>
<dd class="field-even"><p><strong>royalnet.error.InvalidInputError</strong> if the pattern doesnt match.</p>
</dd>
<dt class="field-odd">Returns</dt>
<dd class="field-odd"><p>The matched groups, as returned by <code class="xref py py-func docutils literal notranslate"><span class="pre">re.Match.groups()</span></code>.</p>
</dd>
</dl>
</dd></dl>
<dl class="method">
<dt id="royalnet.commands.CommandArgs.optional">
<code class="sig-name descname">optional</code><span class="sig-paren">(</span><em class="sig-param">index: int</em>, <em class="sig-param">default=None</em><span class="sig-paren">)</span><a class="headerlink" href="#royalnet.commands.CommandArgs.optional" title="Permalink to this definition"></a></dt>
<dd><p>Get the argument at a specific index, but dont raise an error if nothing is found, instead returning the <code class="docutils literal notranslate"><span class="pre">default</span></code> value.</p>
<dl class="field-list simple">
<dt class="field-odd">Parameters</dt>
<dd class="field-odd"><ul class="simple">
<li><p><strong>index</strong> The index of the argument you want to retrieve.</p></li>
<li><p><strong>default</strong> The value returned if the argument is missing.</p></li>
</ul>
</dd>
<dt class="field-even">Returns</dt>
<dd class="field-even"><p>Either the argument or the <code class="docutils literal notranslate"><span class="pre">default</span></code> value, defaulting to <code class="docutils literal notranslate"><span class="pre">None</span></code>.</p>
</dd>
</dl>
</dd></dl>
</dd></dl>
<dl class="exception">
<dt id="royalnet.commands.CommandError">
<em class="property">exception </em><code class="sig-prename descclassname">royalnet.commands.</code><code class="sig-name descname">CommandError</code><span class="sig-paren">(</span><em class="sig-param">message=''</em><span class="sig-paren">)</span><a class="headerlink" href="#royalnet.commands.CommandError" title="Permalink to this definition"></a></dt>
<dd><p>Something went wrong during the execution of this command.</p>
<p>Display an error message to the user, explaining what went wrong.</p>
</dd></dl>
<dl class="exception">
<dt id="royalnet.commands.InvalidInputError">
<em class="property">exception </em><code class="sig-prename descclassname">royalnet.commands.</code><code class="sig-name descname">InvalidInputError</code><span class="sig-paren">(</span><em class="sig-param">message=''</em><span class="sig-paren">)</span><a class="headerlink" href="#royalnet.commands.InvalidInputError" title="Permalink to this definition"></a></dt>
<dd><p>The command has received invalid input and cannot complete.</p>
<p>Display an error message to the user, along with the correct syntax for the command.</p>
</dd></dl>
<dl class="exception">
<dt id="royalnet.commands.UnsupportedError">
<em class="property">exception </em><code class="sig-prename descclassname">royalnet.commands.</code><code class="sig-name descname">UnsupportedError</code><span class="sig-paren">(</span><em class="sig-param">message=''</em><span class="sig-paren">)</span><a class="headerlink" href="#royalnet.commands.UnsupportedError" title="Permalink to this definition"></a></dt>
<dd><p>A requested feature is not available on this interface.</p>
<p>Display an error message to the user, telling them to use another interface.</p>
</dd></dl>
<dl class="exception">
<dt id="royalnet.commands.KeyboardExpiredError">
<em class="property">exception </em><code class="sig-prename descclassname">royalnet.commands.</code><code class="sig-name descname">KeyboardExpiredError</code><span class="sig-paren">(</span><em class="sig-param">message=''</em><span class="sig-paren">)</span><a class="headerlink" href="#royalnet.commands.KeyboardExpiredError" title="Permalink to this definition"></a></dt>
<dd><p>A special type of exception that can be raised in keyboard handlers to mark a specific keyboard as expired.</p>
</dd></dl>
</div>
<div class="section" id="module-royalnet.database">
<span id="database"></span><h2>Database<a class="headerlink" href="#module-royalnet.database" title="Permalink to this headline"></a></h2>
<p>Relational database classes and methods.</p>
<dl class="class">
<dt id="royalnet.database.Alchemy">
<em class="property">class </em><code class="sig-prename descclassname">royalnet.database.</code><code class="sig-name descname">Alchemy</code><span class="sig-paren">(</span><em class="sig-param">database_uri: str</em>, <em class="sig-param">tables: Set</em><span class="sig-paren">)</span><a class="headerlink" href="#royalnet.database.Alchemy" title="Permalink to this definition"></a></dt>
<dd><p>A wrapper around SQLAlchemy declarative that allows to use multiple databases at once while maintaining a single table-class for both of them.</p>
<dl class="method">
<dt id="royalnet.database.Alchemy.__init__">
<code class="sig-name descname">__init__</code><span class="sig-paren">(</span><em class="sig-param">database_uri: str</em>, <em class="sig-param">tables: Set</em><span class="sig-paren">)</span><a class="headerlink" href="#royalnet.database.Alchemy.__init__" title="Permalink to this definition"></a></dt>
<dd><p>Create a new Alchemy object.</p>
<dl class="field-list simple">
<dt class="field-odd">Parameters</dt>
<dd class="field-odd"><ul class="simple">
<li><p><strong>database_uri</strong> The uri of the database, as described at <a class="reference external" href="https://docs.sqlalchemy.org/en/13/core/engines.html">https://docs.sqlalchemy.org/en/13/core/engines.html</a> .</p></li>
<li><p><strong>tables</strong> The set of tables to be created and used in the selected database. Check the tables submodule for more details.</p></li>
</ul>
</dd>
</dl>
</dd></dl>
<dl class="method">
<dt id="royalnet.database.Alchemy._create_tables">
<code class="sig-name descname">_create_tables</code><span class="sig-paren">(</span><em class="sig-param">tables: Set</em><span class="sig-paren">)</span><a class="headerlink" href="#royalnet.database.Alchemy._create_tables" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
<dl class="method">
<dt id="royalnet.database.Alchemy.session_acm">
<code class="sig-name descname">session_acm</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#royalnet.database.Alchemy.session_acm" title="Permalink to this definition"></a></dt>
<dd><p>Use Alchemy as a asyncronous context manager (to be used in async with statements).</p>
</dd></dl>
<dl class="method">
<dt id="royalnet.database.Alchemy.session_cm">
<code class="sig-name descname">session_cm</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#royalnet.database.Alchemy.session_cm" title="Permalink to this definition"></a></dt>
<dd><p>Use Alchemy as a context manager (to be used in with statements).</p>
</dd></dl>
</dd></dl>
<dl class="function">
<dt id="royalnet.database.relationshiplinkchain">
<code class="sig-prename descclassname">royalnet.database.</code><code class="sig-name descname">relationshiplinkchain</code><span class="sig-paren">(</span><em class="sig-param">starting_class</em>, <em class="sig-param">ending_class</em><span class="sig-paren">)</span> &#x2192; Optional[tuple]<a class="headerlink" href="#royalnet.database.relationshiplinkchain" title="Permalink to this definition"></a></dt>
<dd><p>Find the path to follow to get from the starting table to the ending table.</p>
</dd></dl>
<dl class="class">
<dt id="royalnet.database.DatabaseConfig">
<em class="property">class </em><code class="sig-prename descclassname">royalnet.database.</code><code class="sig-name descname">DatabaseConfig</code><span class="sig-paren">(</span><em class="sig-param">database_uri: str</em>, <em class="sig-param">master_table: Type</em>, <em class="sig-param">identity_table: Type</em>, <em class="sig-param">identity_column_name: str</em><span class="sig-paren">)</span><a class="headerlink" href="#royalnet.database.DatabaseConfig" title="Permalink to this definition"></a></dt>
<dd><p>The configuration to be used for the <a class="reference internal" href="#royalnet.database.Alchemy" title="royalnet.database.Alchemy"><code class="xref py py-class docutils literal notranslate"><span class="pre">royalnet.database.Alchemy</span></code></a> component of <a class="reference internal" href="#royalnet.bots.GenericBot" title="royalnet.bots.GenericBot"><code class="xref py py-class docutils literal notranslate"><span class="pre">royalnet.bots.GenericBot</span></code></a>.</p>
</dd></dl>
</div>
<div class="section" id="module-royalnet.network">
<span id="network"></span><h2>Network<a class="headerlink" href="#module-royalnet.network" title="Permalink to this headline"></a></h2>
<p>Royalnet (websocket) related classes.</p>
<dl class="class">
<dt id="royalnet.network.NetworkLink">
<em class="property">class </em><code class="sig-prename descclassname">royalnet.network.</code><code class="sig-name descname">NetworkLink</code><span class="sig-paren">(</span><em class="sig-param">master_uri: str</em>, <em class="sig-param">secret: str</em>, <em class="sig-param">link_type: str</em>, <em class="sig-param">request_handler</em>, <em class="sig-param">*</em>, <em class="sig-param">loop: asyncio.events.AbstractEventLoop = None</em><span class="sig-paren">)</span><a class="headerlink" href="#royalnet.network.NetworkLink" title="Permalink to this definition"></a></dt>
<dd><dl class="method">
<dt id="royalnet.network.NetworkLink.connect">
<em class="property">async </em><code class="sig-name descname">connect</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#royalnet.network.NetworkLink.connect" title="Permalink to this definition"></a></dt>
<dd><p>Connect to the <a class="reference internal" href="#royalnet.network.NetworkServer" title="royalnet.network.NetworkServer"><code class="xref py py-class docutils literal notranslate"><span class="pre">royalnet.network.NetworkServer</span></code></a> at <code class="docutils literal notranslate"><span class="pre">self.master_uri</span></code>.</p>
</dd></dl>
<dl class="method">
<dt id="royalnet.network.NetworkLink.identify">
<em class="property">async </em><code class="sig-name descname">identify</code><span class="sig-paren">(</span><span class="sig-paren">)</span> &#x2192; None<a class="headerlink" href="#royalnet.network.NetworkLink.identify" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
<dl class="method">
<dt id="royalnet.network.NetworkLink.receive">
<em class="property">async </em><code class="sig-name descname">receive</code><span class="sig-paren">(</span><span class="sig-paren">)</span> &#x2192; royalnet.network.package.Package<a class="headerlink" href="#royalnet.network.NetworkLink.receive" title="Permalink to this definition"></a></dt>
<dd><p>Recieve a <a class="reference internal" href="#royalnet.network.Package" title="royalnet.network.Package"><code class="xref py py-class docutils literal notranslate"><span class="pre">Package</span></code></a> from the <a class="reference internal" href="#royalnet.network.NetworkServer" title="royalnet.network.NetworkServer"><code class="xref py py-class docutils literal notranslate"><span class="pre">royalnet.network.NetworkServer</span></code></a>.</p>
<dl class="field-list simple">
<dt class="field-odd">Raises</dt>
<dd class="field-odd"><p><strong>royalnet.network.royalnetlink.ConnectionClosedError</strong> </p>
</dd>
</dl>
</dd></dl>
<dl class="method">
<dt id="royalnet.network.NetworkLink.request">
<em class="property">async </em><code class="sig-name descname">request</code><span class="sig-paren">(</span><em class="sig-param">message</em>, <em class="sig-param">destination</em><span class="sig-paren">)</span><a class="headerlink" href="#royalnet.network.NetworkLink.request" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
<dl class="method">
<dt id="royalnet.network.NetworkLink.run">
<em class="property">async </em><code class="sig-name descname">run</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#royalnet.network.NetworkLink.run" title="Permalink to this definition"></a></dt>
<dd><p>Blockingly run the Link.</p>
</dd></dl>
<dl class="method">
<dt id="royalnet.network.NetworkLink.send">
<em class="property">async </em><code class="sig-name descname">send</code><span class="sig-paren">(</span><em class="sig-param">package: royalnet.network.package.Package</em><span class="sig-paren">)</span><a class="headerlink" href="#royalnet.network.NetworkLink.send" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
</dd></dl>
<dl class="exception">
<dt id="royalnet.network.NetworkError">
<em class="property">exception </em><code class="sig-prename descclassname">royalnet.network.</code><code class="sig-name descname">NetworkError</code><span class="sig-paren">(</span><em class="sig-param">error_data: dict</em>, <em class="sig-param">*args</em><span class="sig-paren">)</span><a class="headerlink" href="#royalnet.network.NetworkError" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
<dl class="exception">
<dt id="royalnet.network.NotConnectedError">
<em class="property">exception </em><code class="sig-prename descclassname">royalnet.network.</code><code class="sig-name descname">NotConnectedError</code><a class="headerlink" href="#royalnet.network.NotConnectedError" title="Permalink to this definition"></a></dt>
<dd><p>The <a class="reference internal" href="#royalnet.network.NetworkLink" title="royalnet.network.NetworkLink"><code class="xref py py-class docutils literal notranslate"><span class="pre">royalnet.network.NetworkLink</span></code></a> is not connected to a <a class="reference internal" href="#royalnet.network.NetworkServer" title="royalnet.network.NetworkServer"><code class="xref py py-class docutils literal notranslate"><span class="pre">royalnet.network.NetworkServer</span></code></a>.</p>
</dd></dl>
<dl class="exception">
<dt id="royalnet.network.NotIdentifiedError">
<em class="property">exception </em><code class="sig-prename descclassname">royalnet.network.</code><code class="sig-name descname">NotIdentifiedError</code><a class="headerlink" href="#royalnet.network.NotIdentifiedError" title="Permalink to this definition"></a></dt>
<dd><p>The <a class="reference internal" href="#royalnet.network.NetworkLink" title="royalnet.network.NetworkLink"><code class="xref py py-class docutils literal notranslate"><span class="pre">royalnet.network.NetworkLink</span></code></a> has not identified yet to a <a class="reference internal" href="#royalnet.network.NetworkServer" title="royalnet.network.NetworkServer"><code class="xref py py-class docutils literal notranslate"><span class="pre">royalnet.network.NetworkServer</span></code></a>.</p>
</dd></dl>
<dl class="class">
<dt id="royalnet.network.Package">
<em class="property">class </em><code class="sig-prename descclassname">royalnet.network.</code><code class="sig-name descname">Package</code><span class="sig-paren">(</span><em class="sig-param">data: dict</em>, <em class="sig-param">*</em>, <em class="sig-param">source: str</em>, <em class="sig-param">destination: str</em>, <em class="sig-param">source_conv_id: Optional[str] = None</em>, <em class="sig-param">destination_conv_id: Optional[str] = None</em><span class="sig-paren">)</span><a class="headerlink" href="#royalnet.network.Package" title="Permalink to this definition"></a></dt>
<dd><p>A Royalnet package, the data type with which a <a class="reference internal" href="#royalnet.network.NetworkLink" title="royalnet.network.NetworkLink"><code class="xref py py-class docutils literal notranslate"><span class="pre">royalnet.network.NetworkLink</span></code></a> communicates with a <a class="reference internal" href="#royalnet.network.NetworkServer" title="royalnet.network.NetworkServer"><code class="xref py py-class docutils literal notranslate"><span class="pre">royalnet.network.NetworkServer</span></code></a> or another link.
Contains info about the source and the destination.</p>
<dl class="method">
<dt id="royalnet.network.Package.__init__">
<code class="sig-name descname">__init__</code><span class="sig-paren">(</span><em class="sig-param">data: dict</em>, <em class="sig-param">*</em>, <em class="sig-param">source: str</em>, <em class="sig-param">destination: str</em>, <em class="sig-param">source_conv_id: Optional[str] = None</em>, <em class="sig-param">destination_conv_id: Optional[str] = None</em><span class="sig-paren">)</span><a class="headerlink" href="#royalnet.network.Package.__init__" title="Permalink to this definition"></a></dt>
<dd><p>Create a Package.</p>
<dl class="field-list simple">
<dt class="field-odd">Parameters</dt>
<dd class="field-odd"><ul class="simple">
<li><p><strong>data</strong> The data that should be sent. Usually a <code class="xref py py-class docutils literal notranslate"><span class="pre">royalnet.network.Message</span></code>.</p></li>
<li><p><strong>source</strong> The <code class="docutils literal notranslate"><span class="pre">nid</span></code> of the node that created this Package.</p></li>
<li><p><strong>destination</strong> The <code class="docutils literal notranslate"><span class="pre">link_type</span></code> of the destination node, or alternatively, the <code class="docutils literal notranslate"><span class="pre">nid</span></code> of the node. Can also be the <code class="docutils literal notranslate"><span class="pre">NULL</span></code> value to send the message to nobody.</p></li>
<li><p><strong>source_conv_id</strong> The conversation id of the node that created this package. Akin to the sequence number on IP packets.</p></li>
<li><p><strong>destination_conv_id</strong> The conversation id of the node that this Package is a reply to.</p></li>
</ul>
</dd>
</dl>
</dd></dl>
<dl class="method">
<dt id="royalnet.network.Package.from_dict">
<em class="property">static </em><code class="sig-name descname">from_dict</code><span class="sig-paren">(</span><em class="sig-param">d</em><span class="sig-paren">)</span> &#x2192; royalnet.network.package.Package<a class="headerlink" href="#royalnet.network.Package.from_dict" title="Permalink to this definition"></a></dt>
<dd><p>Create a Package from a dictionary.</p>
</dd></dl>
<dl class="method">
<dt id="royalnet.network.Package.from_json_bytes">
<em class="property">static </em><code class="sig-name descname">from_json_bytes</code><span class="sig-paren">(</span><em class="sig-param">b: bytes</em><span class="sig-paren">)</span> &#x2192; royalnet.network.package.Package<a class="headerlink" href="#royalnet.network.Package.from_json_bytes" title="Permalink to this definition"></a></dt>
<dd><p>Create a Package from UTF8-encoded JSON bytes.</p>
</dd></dl>
<dl class="method">
<dt id="royalnet.network.Package.from_json_string">
<em class="property">static </em><code class="sig-name descname">from_json_string</code><span class="sig-paren">(</span><em class="sig-param">string: str</em><span class="sig-paren">)</span> &#x2192; royalnet.network.package.Package<a class="headerlink" href="#royalnet.network.Package.from_json_string" title="Permalink to this definition"></a></dt>
<dd><p>Create a Package from a JSON string.</p>
</dd></dl>
<dl class="method">
<dt id="royalnet.network.Package.reply">
<code class="sig-name descname">reply</code><span class="sig-paren">(</span><em class="sig-param">data</em><span class="sig-paren">)</span> &#x2192; royalnet.network.package.Package<a class="headerlink" href="#royalnet.network.Package.reply" title="Permalink to this definition"></a></dt>
<dd><p>Reply to this Package with another Package.</p>
<dl class="field-list simple">
<dt class="field-odd">Parameters</dt>
<dd class="field-odd"><p><strong>data</strong> The data that should be sent. Usually a <code class="xref py py-class docutils literal notranslate"><span class="pre">royalnet.network.Message</span></code>.</p>
</dd>
<dt class="field-even">Returns</dt>
<dd class="field-even"><p>The reply Package.</p>
</dd>
</dl>
</dd></dl>
<dl class="method">
<dt id="royalnet.network.Package.to_dict">
<code class="sig-name descname">to_dict</code><span class="sig-paren">(</span><span class="sig-paren">)</span> &#x2192; dict<a class="headerlink" href="#royalnet.network.Package.to_dict" title="Permalink to this definition"></a></dt>
<dd><p>Convert the Package into a dictionary.</p>
</dd></dl>
<dl class="method">
<dt id="royalnet.network.Package.to_json_bytes">
<code class="sig-name descname">to_json_bytes</code><span class="sig-paren">(</span><span class="sig-paren">)</span> &#x2192; bytes<a class="headerlink" href="#royalnet.network.Package.to_json_bytes" title="Permalink to this definition"></a></dt>
<dd><p>Convert the Package into UTF8-encoded JSON bytes.</p>
</dd></dl>
<dl class="method">
<dt id="royalnet.network.Package.to_json_string">
<code class="sig-name descname">to_json_string</code><span class="sig-paren">(</span><span class="sig-paren">)</span> &#x2192; str<a class="headerlink" href="#royalnet.network.Package.to_json_string" title="Permalink to this definition"></a></dt>
<dd><p>Convert the Package into a JSON string.</p>
</dd></dl>
</dd></dl>
<dl class="class">
<dt id="royalnet.network.NetworkServer">
<em class="property">class </em><code class="sig-prename descclassname">royalnet.network.</code><code class="sig-name descname">NetworkServer</code><span class="sig-paren">(</span><em class="sig-param">address: str</em>, <em class="sig-param">port: int</em>, <em class="sig-param">required_secret: str</em>, <em class="sig-param">*</em>, <em class="sig-param">loop: asyncio.events.AbstractEventLoop = None</em><span class="sig-paren">)</span><a class="headerlink" href="#royalnet.network.NetworkServer" title="Permalink to this definition"></a></dt>
<dd><dl class="method">
<dt id="royalnet.network.NetworkServer.find_client">
<code class="sig-name descname">find_client</code><span class="sig-paren">(</span><em class="sig-param">*</em>, <em class="sig-param">nid: str = None</em>, <em class="sig-param">link_type: str = None</em><span class="sig-paren">)</span> &#x2192; List[royalnet.network.networkserver.ConnectedClient]<a class="headerlink" href="#royalnet.network.NetworkServer.find_client" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
<dl class="method">
<dt id="royalnet.network.NetworkServer.find_destination">
<code class="sig-name descname">find_destination</code><span class="sig-paren">(</span><em class="sig-param">package: royalnet.network.package.Package</em><span class="sig-paren">)</span> &#x2192; List[royalnet.network.networkserver.ConnectedClient]<a class="headerlink" href="#royalnet.network.NetworkServer.find_destination" title="Permalink to this definition"></a></dt>
<dd><p>Find a list of destinations for the package.</p>
<dl class="field-list simple">
<dt class="field-odd">Parameters</dt>
<dd class="field-odd"><p><strong>package</strong> The package to find the destination of.</p>
</dd>
<dt class="field-even">Returns</dt>
<dd class="field-even"><p>A <a class="reference external" href="https://docs.python.org/3.7/library/stdtypes.html#list" title="(in Python v3.7)"><code class="xref py py-class docutils literal notranslate"><span class="pre">list</span></code></a> of <code class="xref py py-class docutils literal notranslate"><span class="pre">ConnectedClients</span></code> to send the package to.</p>
</dd>
</dl>
</dd></dl>
<dl class="method">
<dt id="royalnet.network.NetworkServer.listener">
<em class="property">async </em><code class="sig-name descname">listener</code><span class="sig-paren">(</span><em class="sig-param">websocket: websockets.server.WebSocketServerProtocol</em>, <em class="sig-param">path</em><span class="sig-paren">)</span><a class="headerlink" href="#royalnet.network.NetworkServer.listener" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
<dl class="method">
<dt id="royalnet.network.NetworkServer.route_package">
<em class="property">async </em><code class="sig-name descname">route_package</code><span class="sig-paren">(</span><em class="sig-param">package: royalnet.network.package.Package</em><span class="sig-paren">)</span> &#x2192; None<a class="headerlink" href="#royalnet.network.NetworkServer.route_package" title="Permalink to this definition"></a></dt>
<dd><p>Executed every time a package is received and must be routed somewhere.</p>
</dd></dl>
<dl class="method">
<dt id="royalnet.network.NetworkServer.run_blocking">
<code class="sig-name descname">run_blocking</code><span class="sig-paren">(</span><em class="sig-param">verbose=False</em><span class="sig-paren">)</span><a class="headerlink" href="#royalnet.network.NetworkServer.run_blocking" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
<dl class="method">
<dt id="royalnet.network.NetworkServer.serve">
<code class="sig-name descname">serve</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#royalnet.network.NetworkServer.serve" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
</dd></dl>
<dl class="class">
<dt id="royalnet.network.NetworkConfig">
<em class="property">class </em><code class="sig-prename descclassname">royalnet.network.</code><code class="sig-name descname">NetworkConfig</code><span class="sig-paren">(</span><em class="sig-param">master_uri: str</em>, <em class="sig-param">master_secret: str</em><span class="sig-paren">)</span><a class="headerlink" href="#royalnet.network.NetworkConfig" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
<dl class="exception">
<dt id="royalnet.network.ConnectionClosedError">
<em class="property">exception </em><code class="sig-prename descclassname">royalnet.network.</code><code class="sig-name descname">ConnectionClosedError</code><a class="headerlink" href="#royalnet.network.ConnectionClosedError" title="Permalink to this definition"></a></dt>
<dd><p>The <a class="reference internal" href="#royalnet.network.NetworkLink" title="royalnet.network.NetworkLink"><code class="xref py py-class docutils literal notranslate"><span class="pre">royalnet.network.NetworkLink</span></code></a>s connection was closed unexpectedly. The link cant be used anymore.</p>
</dd></dl>
<dl class="class">
<dt id="royalnet.network.Request">
<em class="property">class </em><code class="sig-prename descclassname">royalnet.network.</code><code class="sig-name descname">Request</code><span class="sig-paren">(</span><em class="sig-param">handler: str</em>, <em class="sig-param">data: dict</em><span class="sig-paren">)</span><a class="headerlink" href="#royalnet.network.Request" title="Permalink to this definition"></a></dt>
<dd><p>A request sent from a <a class="reference internal" href="#royalnet.network.NetworkLink" title="royalnet.network.NetworkLink"><code class="xref py py-class docutils literal notranslate"><span class="pre">royalnet.network.NetworkLink</span></code></a> to another.</p>
<p>It contains the name of the requested handler, in addition to the data.</p>
<dl class="method">
<dt id="royalnet.network.Request.from_dict">
<em class="property">static </em><code class="sig-name descname">from_dict</code><span class="sig-paren">(</span><em class="sig-param">d: dict</em><span class="sig-paren">)</span><a class="headerlink" href="#royalnet.network.Request.from_dict" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
<dl class="method">
<dt id="royalnet.network.Request.to_dict">
<code class="sig-name descname">to_dict</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#royalnet.network.Request.to_dict" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
</dd></dl>
<dl class="class">
<dt id="royalnet.network.Response">
<em class="property">class </em><code class="sig-prename descclassname">royalnet.network.</code><code class="sig-name descname">Response</code><a class="headerlink" href="#royalnet.network.Response" title="Permalink to this definition"></a></dt>
<dd><p>A base class to be inherited by all other response types.</p>
<dl class="method">
<dt id="royalnet.network.Response.from_dict">
<em class="property">classmethod </em><code class="sig-name descname">from_dict</code><span class="sig-paren">(</span><em class="sig-param">d: dict</em><span class="sig-paren">)</span> &#x2192; royalnet.network.response.Response<a class="headerlink" href="#royalnet.network.Response.from_dict" title="Permalink to this definition"></a></dt>
<dd><p>Recreate the response from a received <a class="reference external" href="https://docs.python.org/3.7/library/stdtypes.html#dict" title="(in Python v3.7)"><code class="xref py py-class docutils literal notranslate"><span class="pre">dict</span></code></a>.</p>
</dd></dl>
<dl class="method">
<dt id="royalnet.network.Response.raise_on_error">
<code class="sig-name descname">raise_on_error</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#royalnet.network.Response.raise_on_error" title="Permalink to this definition"></a></dt>
<dd><p>Raise an <a class="reference external" href="https://docs.python.org/3.7/library/exceptions.html#Exception" title="(in Python v3.7)"><code class="xref py py-class docutils literal notranslate"><span class="pre">Exception</span></code></a> if the Response is an error, do nothing otherwise.</p>
</dd></dl>
<dl class="method">
<dt id="royalnet.network.Response.to_dict">
<code class="sig-name descname">to_dict</code><span class="sig-paren">(</span><span class="sig-paren">)</span> &#x2192; dict<a class="headerlink" href="#royalnet.network.Response.to_dict" title="Permalink to this definition"></a></dt>
<dd><p>Prepare the Response to be sent by converting it to a JSONable <a class="reference external" href="https://docs.python.org/3.7/library/stdtypes.html#dict" title="(in Python v3.7)"><code class="xref py py-class docutils literal notranslate"><span class="pre">dict</span></code></a>.</p>
</dd></dl>
</dd></dl>
<dl class="class">
<dt id="royalnet.network.ResponseSuccess">
<em class="property">class </em><code class="sig-prename descclassname">royalnet.network.</code><code class="sig-name descname">ResponseSuccess</code><span class="sig-paren">(</span><em class="sig-param">data: Optional[dict] = None</em><span class="sig-paren">)</span><a class="headerlink" href="#royalnet.network.ResponseSuccess" title="Permalink to this definition"></a></dt>
<dd><p>A response to a successful <a class="reference internal" href="#royalnet.network.Request" title="royalnet.network.Request"><code class="xref py py-class docutils literal notranslate"><span class="pre">royalnet.network.Request</span></code></a>.</p>
<dl class="method">
<dt id="royalnet.network.ResponseSuccess.raise_on_error">
<code class="sig-name descname">raise_on_error</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#royalnet.network.ResponseSuccess.raise_on_error" title="Permalink to this definition"></a></dt>
<dd><p>Raise an <a class="reference external" href="https://docs.python.org/3.7/library/exceptions.html#Exception" title="(in Python v3.7)"><code class="xref py py-class docutils literal notranslate"><span class="pre">Exception</span></code></a> if the Response is an error, do nothing otherwise.</p>
</dd></dl>
</dd></dl>
<dl class="class">
<dt id="royalnet.network.ResponseError">
<em class="property">class </em><code class="sig-prename descclassname">royalnet.network.</code><code class="sig-name descname">ResponseError</code><span class="sig-paren">(</span><em class="sig-param">name: str</em>, <em class="sig-param">description: str</em>, <em class="sig-param">extra_info: Optional[dict] = None</em><span class="sig-paren">)</span><a class="headerlink" href="#royalnet.network.ResponseError" title="Permalink to this definition"></a></dt>
<dd><p>A response to a invalid <a class="reference internal" href="#royalnet.network.Request" title="royalnet.network.Request"><code class="xref py py-class docutils literal notranslate"><span class="pre">royalnet.network.Request</span></code></a>.</p>
<dl class="method">
<dt id="royalnet.network.ResponseError.raise_on_error">
<code class="sig-name descname">raise_on_error</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#royalnet.network.ResponseError.raise_on_error" title="Permalink to this definition"></a></dt>
<dd><p>Raise an <a class="reference external" href="https://docs.python.org/3.7/library/exceptions.html#Exception" title="(in Python v3.7)"><code class="xref py py-class docutils literal notranslate"><span class="pre">Exception</span></code></a> if the Response is an error, do nothing otherwise.</p>
</dd></dl>
</dd></dl>
</div>
<div class="section" id="module-royalnet.utils">
<span id="utils"></span><h2>Utils<a class="headerlink" href="#module-royalnet.utils" title="Permalink to this headline"></a></h2>
<p>Miscellaneous useful functions and classes.</p>
<dl class="function">
<dt id="royalnet.utils.asyncify">
<em class="property">async </em><code class="sig-prename descclassname">royalnet.utils.</code><code class="sig-name descname">asyncify</code><span class="sig-paren">(</span><em class="sig-param">function: Callable</em>, <em class="sig-param">*args</em>, <em class="sig-param">**kwargs</em><span class="sig-paren">)</span><a class="headerlink" href="#royalnet.utils.asyncify" title="Permalink to this definition"></a></dt>
<dd><p>Convert a function into a coroutine.</p>
<div class="admonition warning">
<p class="admonition-title">Warning</p>
<p>The coroutine cannot be cancelled, and any attempts to do so will result in unexpected outputs.</p>
</div>
</dd></dl>
<dl class="function">
<dt id="royalnet.utils.safeformat">
<code class="sig-prename descclassname">royalnet.utils.</code><code class="sig-name descname">safeformat</code><span class="sig-paren">(</span><em class="sig-param">string: str</em>, <em class="sig-param">**words: str</em><span class="sig-paren">)</span> &#x2192; str<a class="headerlink" href="#royalnet.utils.safeformat" title="Permalink to this definition"></a></dt>
<dd><p><code class="xref py py-func docutils literal notranslate"><span class="pre">str.format()</span></code> something, but ignore missing keys instead of raising an error.</p>
<dl class="field-list simple">
<dt class="field-odd">Parameters</dt>
<dd class="field-odd"><ul class="simple">
<li><p><strong>string</strong> The base string to be formatted.</p></li>
<li><p><strong>words</strong> The words to format the string with.</p></li>
</ul>
</dd>
<dt class="field-even">Returns</dt>
<dd class="field-even"><p>The formatted string.</p>
</dd>
</dl>
</dd></dl>
<dl class="function">
<dt id="royalnet.utils.cdj">
<code class="sig-prename descclassname">royalnet.utils.</code><code class="sig-name descname">cdj</code><span class="sig-paren">(</span><em class="sig-param">class_: Any</em><span class="sig-paren">)</span> &#x2192; dict<a class="headerlink" href="#royalnet.utils.cdj" title="Permalink to this definition"></a></dt>
<dd><p>Return a dict of the class attributes without the <code class="docutils literal notranslate"><span class="pre">__module__</span></code>, <code class="docutils literal notranslate"><span class="pre">__dict__</span></code>, <code class="docutils literal notranslate"><span class="pre">__weakref__</span></code> and <code class="docutils literal notranslate"><span class="pre">__doc__</span></code> keys, to be used while generating dynamically SQLAlchemy declarative table classes.</p>
<dl class="field-list simple">
<dt class="field-odd">Parameters</dt>
<dd class="field-odd"><p><strong>class_</strong> The object that you want to dict-ify.</p>
</dd>
<dt class="field-even">Returns</dt>
<dd class="field-even"><p>The class dict.</p>
</dd>
</dl>
<div class="admonition warning">
<p class="admonition-title">Warning</p>
<p>You cant dict-ify classes with <code class="docutils literal notranslate"><span class="pre">__slots__</span></code>!</p>
</div>
</dd></dl>
<dl class="function">
<dt id="royalnet.utils.sleep_until">
<em class="property">async </em><code class="sig-prename descclassname">royalnet.utils.</code><code class="sig-name descname">sleep_until</code><span class="sig-paren">(</span><em class="sig-param">dt: datetime.datetime</em><span class="sig-paren">)</span> &#x2192; None<a class="headerlink" href="#royalnet.utils.sleep_until" title="Permalink to this definition"></a></dt>
<dd><p>Block the call until the specified datetime.</p>
<div class="admonition warning">
<p class="admonition-title">Warning</p>
<p>Accurate only to seconds.</p>
</div>
</dd></dl>
<dl class="function">
<dt id="royalnet.utils.plusformat">
<code class="sig-prename descclassname">royalnet.utils.</code><code class="sig-name descname">plusformat</code><span class="sig-paren">(</span><em class="sig-param">i: int</em><span class="sig-paren">)</span> &#x2192; str<a class="headerlink" href="#royalnet.utils.plusformat" title="Permalink to this definition"></a></dt>
<dd><p>Convert an <a class="reference external" href="https://docs.python.org/3.7/library/functions.html#int" title="(in Python v3.7)"><code class="xref py py-class docutils literal notranslate"><span class="pre">int</span></code></a> to a <a class="reference external" href="https://docs.python.org/3.7/library/stdtypes.html#str" title="(in Python v3.7)"><code class="xref py py-class docutils literal notranslate"><span class="pre">str</span></code></a>, prepending a <code class="docutils literal notranslate"><span class="pre">+</span></code> if its greater than 0.</p>
<dl class="field-list simple">
<dt class="field-odd">Parameters</dt>
<dd class="field-odd"><p><strong>i</strong> the <a class="reference external" href="https://docs.python.org/3.7/library/functions.html#int" title="(in Python v3.7)"><code class="xref py py-class docutils literal notranslate"><span class="pre">int</span></code></a> to convert.</p>
</dd>
<dt class="field-even">Returns</dt>
<dd class="field-even"><p>The resulting <a class="reference external" href="https://docs.python.org/3.7/library/stdtypes.html#str" title="(in Python v3.7)"><code class="xref py py-class docutils literal notranslate"><span class="pre">str</span></code></a>.</p>
</dd>
</dl>
</dd></dl>
<dl class="class">
<dt id="royalnet.utils.NetworkHandler">
<em class="property">class </em><code class="sig-prename descclassname">royalnet.utils.</code><code class="sig-name descname">NetworkHandler</code><a class="headerlink" href="#royalnet.utils.NetworkHandler" title="Permalink to this definition"></a></dt>
<dd><p>The NetworkHandler functions are called when a specific Message type is received.</p>
<dl class="attribute">
<dt id="royalnet.utils.NetworkHandler.message_type">
<code class="sig-name descname">message_type</code><em class="property"> = NotImplemented</em><a class="headerlink" href="#royalnet.utils.NetworkHandler.message_type" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
</dd></dl>
<dl class="function">
<dt id="royalnet.utils.andformat">
<code class="sig-prename descclassname">royalnet.utils.</code><code class="sig-name descname">andformat</code><span class="sig-paren">(</span><em class="sig-param">l: List[str], middle=', ', final=' and '</em><span class="sig-paren">)</span> &#x2192; str<a class="headerlink" href="#royalnet.utils.andformat" title="Permalink to this definition"></a></dt>
<dd><p>Convert a <a class="reference external" href="https://docs.python.org/3.7/library/stdtypes.html#list" title="(in Python v3.7)"><code class="xref py py-class docutils literal notranslate"><span class="pre">list</span></code></a> to a <a class="reference external" href="https://docs.python.org/3.7/library/stdtypes.html#str" title="(in Python v3.7)"><code class="xref py py-class docutils literal notranslate"><span class="pre">str</span></code></a> by adding <code class="docutils literal notranslate"><span class="pre">final</span></code> between the last two elements and <code class="docutils literal notranslate"><span class="pre">middle</span></code> between the others.</p>
<dl class="field-list simple">
<dt class="field-odd">Parameters</dt>
<dd class="field-odd"><ul class="simple">
<li><p><strong>l</strong> the input <a class="reference external" href="https://docs.python.org/3.7/library/stdtypes.html#list" title="(in Python v3.7)"><code class="xref py py-class docutils literal notranslate"><span class="pre">list</span></code></a>.</p></li>
<li><p><strong>middle</strong> the <a class="reference external" href="https://docs.python.org/3.7/library/stdtypes.html#str" title="(in Python v3.7)"><code class="xref py py-class docutils literal notranslate"><span class="pre">str</span></code></a> to be added between the middle elements.</p></li>
<li><p><strong>final</strong> the <a class="reference external" href="https://docs.python.org/3.7/library/stdtypes.html#str" title="(in Python v3.7)"><code class="xref py py-class docutils literal notranslate"><span class="pre">str</span></code></a> to be added between the last two elements.</p></li>
</ul>
</dd>
<dt class="field-even">Returns</dt>
<dd class="field-even"><p>The resulting <a class="reference external" href="https://docs.python.org/3.7/library/stdtypes.html#str" title="(in Python v3.7)"><code class="xref py py-class docutils literal notranslate"><span class="pre">str</span></code></a>.</p>
</dd>
</dl>
</dd></dl>
<dl class="function">
<dt>
<code class="sig-prename descclassname">royalnet.utils.</code><code class="sig-name descname">plusformat</code><span class="sig-paren">(</span><em class="sig-param">i: int</em><span class="sig-paren">)</span> &#x2192; str</dt>
<dd><p>Convert an <a class="reference external" href="https://docs.python.org/3.7/library/functions.html#int" title="(in Python v3.7)"><code class="xref py py-class docutils literal notranslate"><span class="pre">int</span></code></a> to a <a class="reference external" href="https://docs.python.org/3.7/library/stdtypes.html#str" title="(in Python v3.7)"><code class="xref py py-class docutils literal notranslate"><span class="pre">str</span></code></a>, prepending a <code class="docutils literal notranslate"><span class="pre">+</span></code> if its greater than 0.</p>
<dl class="field-list simple">
<dt class="field-odd">Parameters</dt>
<dd class="field-odd"><p><strong>i</strong> the <a class="reference external" href="https://docs.python.org/3.7/library/functions.html#int" title="(in Python v3.7)"><code class="xref py py-class docutils literal notranslate"><span class="pre">int</span></code></a> to convert.</p>
</dd>
<dt class="field-even">Returns</dt>
<dd class="field-even"><p>The resulting <a class="reference external" href="https://docs.python.org/3.7/library/stdtypes.html#str" title="(in Python v3.7)"><code class="xref py py-class docutils literal notranslate"><span class="pre">str</span></code></a>.</p>
</dd>
</dl>
</dd></dl>
<dl class="function">
<dt id="royalnet.utils.fileformat">
<code class="sig-prename descclassname">royalnet.utils.</code><code class="sig-name descname">fileformat</code><span class="sig-paren">(</span><em class="sig-param">string: str</em><span class="sig-paren">)</span> &#x2192; str<a class="headerlink" href="#royalnet.utils.fileformat" title="Permalink to this definition"></a></dt>
<dd><p>Ensure a string can be used as a filename by replacing all non-word characters with underscores.</p>
<dl class="field-list simple">
<dt class="field-odd">Parameters</dt>
<dd class="field-odd"><p><strong>string</strong> the input string.</p>
</dd>
<dt class="field-even">Returns</dt>
<dd class="field-even"><p>A valid filename string.</p>
</dd>
</dl>
</dd></dl>
<dl class="function">
<dt id="royalnet.utils.ytdldateformat">
<code class="sig-prename descclassname">royalnet.utils.</code><code class="sig-name descname">ytdldateformat</code><span class="sig-paren">(</span><em class="sig-param">string: Optional[str], separator: str = '-'</em><span class="sig-paren">)</span> &#x2192; str<a class="headerlink" href="#royalnet.utils.ytdldateformat" title="Permalink to this definition"></a></dt>
<dd><p>Convert the weird date string returned by <code class="docutils literal notranslate"><span class="pre">youtube-dl</span></code> into the <code class="docutils literal notranslate"><span class="pre">YYYY-MM-DD</span></code> format.</p>
<dl class="field-list simple">
<dt class="field-odd">Parameters</dt>
<dd class="field-odd"><ul class="simple">
<li><p><strong>string</strong> the input string, in the <code class="docutils literal notranslate"><span class="pre">YYYYMMDD</span></code> format.</p></li>
<li><p><strong>separator</strong> the string to add between the years, the months and the days. Defaults to <code class="docutils literal notranslate"><span class="pre">-</span></code>.</p></li>
</ul>
</dd>
<dt class="field-even">Returns</dt>
<dd class="field-even"><p>The resulting string, in the format <code class="docutils literal notranslate"><span class="pre">YYYY-MM-DD</span></code> format.</p>
</dd>
</dl>
</dd></dl>
<dl class="function">
<dt id="royalnet.utils.numberemojiformat">
<code class="sig-prename descclassname">royalnet.utils.</code><code class="sig-name descname">numberemojiformat</code><span class="sig-paren">(</span><em class="sig-param">l: List[str]</em><span class="sig-paren">)</span> &#x2192; str<a class="headerlink" href="#royalnet.utils.numberemojiformat" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
<dl class="function">
<dt id="royalnet.utils.telegram_escape">
<code class="sig-prename descclassname">royalnet.utils.</code><code class="sig-name descname">telegram_escape</code><span class="sig-paren">(</span><em class="sig-param">string: str</em><span class="sig-paren">)</span> &#x2192; str<a class="headerlink" href="#royalnet.utils.telegram_escape" title="Permalink to this definition"></a></dt>
<dd><p>Escape a string to be sent through Telegram, and format it using RoyalCode.</p>
<div class="admonition warning">
<p class="admonition-title">Warning</p>
<p>Currently escapes everything, even items in code blocks.</p>
</div>
</dd></dl>
<dl class="function">
<dt id="royalnet.utils.discord_escape">
<code class="sig-prename descclassname">royalnet.utils.</code><code class="sig-name descname">discord_escape</code><span class="sig-paren">(</span><em class="sig-param">string: str</em><span class="sig-paren">)</span> &#x2192; str<a class="headerlink" href="#royalnet.utils.discord_escape" title="Permalink to this definition"></a></dt>
<dd><p>Escape a string to be sent through Discord, and format it using RoyalCode.</p>
<div class="admonition warning">
<p class="admonition-title">Warning</p>
<p>Currently escapes everything, even items in code blocks.</p>
</div>
</dd></dl>
<dl class="function">
<dt id="royalnet.utils.splitstring">
<code class="sig-prename descclassname">royalnet.utils.</code><code class="sig-name descname">splitstring</code><span class="sig-paren">(</span><em class="sig-param">s: str</em>, <em class="sig-param">max: int</em><span class="sig-paren">)</span> &#x2192; List[str]<a class="headerlink" href="#royalnet.utils.splitstring" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
<dl class="function">
<dt id="royalnet.utils.parse_5etools_entry">
<code class="sig-prename descclassname">royalnet.utils.</code><code class="sig-name descname">parse_5etools_entry</code><span class="sig-paren">(</span><em class="sig-param">entry</em><span class="sig-paren">)</span> &#x2192; str<a class="headerlink" href="#royalnet.utils.parse_5etools_entry" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
<dl class="function">
<dt id="royalnet.utils.ordinalformat">
<code class="sig-prename descclassname">royalnet.utils.</code><code class="sig-name descname">ordinalformat</code><span class="sig-paren">(</span><em class="sig-param">number: int</em><span class="sig-paren">)</span><a class="headerlink" href="#royalnet.utils.ordinalformat" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
</div>
<div class="section" id="module-royalnet.web">
<span id="web"></span><h2>Web<a class="headerlink" href="#module-royalnet.web" title="Permalink to this headline"></a></h2>
<dl class="function">
<dt id="royalnet.web.create_app">
<code class="sig-prename descclassname">royalnet.web.</code><code class="sig-name descname">create_app</code><span class="sig-paren">(</span><em class="sig-param">config_obj: Type, blueprints: List[royalnet.web.royalprint.Royalprint]</em><span class="sig-paren">)</span><a class="headerlink" href="#royalnet.web.create_app" title="Permalink to this definition"></a></dt>
<dd><p>Create a <code class="xref py py-class docutils literal notranslate"><span class="pre">flask.Flask</span></code> application object.</p>
<p>Gets the <code class="docutils literal notranslate"><span class="pre">app.secret_key</span></code> from the <code class="docutils literal notranslate"><span class="pre">SECRET_KEY</span></code> envvar.</p>
<p>Also requires a <code class="docutils literal notranslate"><span class="pre">DB_PATH</span></code> key in <code class="docutils literal notranslate"><span class="pre">config_obj</span></code> to initialize the database connection.</p>
<div class="admonition warning">
<p class="admonition-title">Warning</p>
<p>The code for this class was written at 1 AM, and I have no clue of how and why it works or even if it really does work.
Use with caution?</p>
</div>
<dl class="field-list simple">
<dt class="field-odd">Parameters</dt>
<dd class="field-odd"><ul class="simple">
<li><p><strong>config_obj</strong> The object to be passed to <code class="xref py py-meth docutils literal notranslate"><span class="pre">flask.Flask.config.from_object()</span></code>.</p></li>
<li><p><strong>blueprints</strong> A list of blueprints to be registered to the application.</p></li>
</ul>
</dd>
<dt class="field-even">Returns</dt>
<dd class="field-even"><p>The created <code class="xref py py-class docutils literal notranslate"><span class="pre">flask.Flask</span></code>.</p>
</dd>
</dl>
</dd></dl>
<dl class="class">
<dt id="royalnet.web.Royalprint">
<em class="property">class </em><code class="sig-prename descclassname">royalnet.web.</code><code class="sig-name descname">Royalprint</code><span class="sig-paren">(</span><em class="sig-param">name</em>, <em class="sig-param">import_name</em>, <em class="sig-param">static_folder=None</em>, <em class="sig-param">static_url_path=None</em>, <em class="sig-param">template_folder=None</em>, <em class="sig-param">url_prefix=None</em>, <em class="sig-param">subdomain=None</em>, <em class="sig-param">url_defaults=None</em>, <em class="sig-param">root_path=None</em>, <em class="sig-param">required_tables: Optional[set] = None</em><span class="sig-paren">)</span><a class="headerlink" href="#royalnet.web.Royalprint" title="Permalink to this definition"></a></dt>
<dd><p>An edited <code class="xref py py-class docutils literal notranslate"><span class="pre">flask.Blueprint</span></code> containing an additional <code class="docutils literal notranslate"><span class="pre">required_tables</span></code> parameter.</p>
</dd></dl>
</div>
<div class="section" id="module-royalnet.error">
<span id="error"></span><h2>Error<a class="headerlink" href="#module-royalnet.error" title="Permalink to this headline"></a></h2>
<dl class="exception">
<dt id="royalnet.error.RoyalnetRequestError">
<em class="property">exception </em><code class="sig-prename descclassname">royalnet.error.</code><code class="sig-name descname">RoyalnetRequestError</code><span class="sig-paren">(</span><em class="sig-param">error: ResponseError</em><span class="sig-paren">)</span><a class="headerlink" href="#royalnet.error.RoyalnetRequestError" title="Permalink to this definition"></a></dt>
<dd><p>An error was raised while handling the Royalnet request.</p>
<p>This exception contains the <a class="reference internal" href="#royalnet.network.ResponseError" title="royalnet.network.ResponseError"><code class="xref py py-class docutils literal notranslate"><span class="pre">royalnet.network.ResponseError</span></code></a> that was returned by the other Link.</p>
<dl class="method">
<dt id="royalnet.error.RoyalnetRequestError.args">
<em class="property">property </em><code class="sig-name descname">args</code><a class="headerlink" href="#royalnet.error.RoyalnetRequestError.args" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
</dd></dl>
<dl class="exception">
<dt id="royalnet.error.RoyalnetResponseError">
<em class="property">exception </em><code class="sig-prename descclassname">royalnet.error.</code><code class="sig-name descname">RoyalnetResponseError</code><a class="headerlink" href="#royalnet.error.RoyalnetResponseError" title="Permalink to this definition"></a></dt>
<dd><p>The <a class="reference internal" href="#royalnet.network.Response" title="royalnet.network.Response"><code class="xref py py-class docutils literal notranslate"><span class="pre">royalnet.network.Response</span></code></a> that was received is invalid.</p>
</dd></dl>
</div>
</div>
</div>
</div>
<footer>
<div class="rst-footer-buttons" role="navigation" aria-label="footer navigation">
<a href="creatingacommand.html" class="btn btn-neutral float-left" title="Royalnet Commands" accesskey="p" rel="prev"><span class="fa fa-arrow-circle-left"></span> Previous</a>
</div>
<hr/>
<div role="contentinfo">
<p>
&copy; Copyright 2019, Stefano Pigozzi
</p>
</div>
Built with <a href="http://sphinx-doc.org/">Sphinx</a> using a <a href="https://github.com/rtfd/sphinx_rtd_theme">theme</a> provided by <a href="https://readthedocs.org">Read the Docs</a>.
</footer>
</div>
</div>
</section>
</div>
<script type="text/javascript">
jQuery(function () {
SphinxRtdTheme.Navigation.enable(true);
});
</script>
</body>
</html>