mirror of
https://github.com/RYGhub/royalnet.git
synced 2024-11-23 19:44:20 +00:00
1439 lines
No EOL
108 KiB
HTML
1439 lines
No EOL
108 KiB
HTML
|
||
|
||
<!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 — 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> »</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> → 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> → 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> → 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> → 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> → 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> → 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> → 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 isn’t 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> → 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> → 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> → 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> → 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> → 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> → 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> → 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> → 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> → 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> → 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> → 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> → 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> → 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> → 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 bot’s 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> → 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> → 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> → 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> → 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> → 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">["e"]</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> → 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> → 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> → 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> → 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 I’m 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> → 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> → 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 doesn’t 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 don’t 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> → 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> → 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> → 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> → 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> → 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> → 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> → 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> → 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> → 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> → 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> → 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> → 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> → 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 can’t 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> → 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> → 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> → 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> → 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 can’t 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> → 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> → 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 it’s 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> → 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> → 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 it’s 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> → 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> → 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> → 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> → 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> → 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> → 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> → 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>
|
||
© 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> |