Updated HTML docs.

This commit is contained in:
Evennia docbuilder action 2022-11-30 23:26:44 +00:00
parent 95fc796b1e
commit e64a9c5a4f
55 changed files with 1432 additions and 162 deletions

View file

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

View file

@ -383,6 +383,7 @@ the given left indent but crops/fills to the width. Used in EvCells.</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">EvTable</span></code> now supports passing <code class="docutils literal notranslate"><span class="pre">EvColumn</span></code>s as a list directly, (<code class="docutils literal notranslate"><span class="pre">EvTable(table=[colA,colB])</span></code>)</p></li>
<li><p>Add <code class="docutils literal notranslate"><span class="pre">tags=</span></code> search criterion to <code class="docutils literal notranslate"><span class="pre">DefaultObject.search</span></code>.</p></li>
<li><p>Add <code class="docutils literal notranslate"><span class="pre">AT_EXIT_TRAVERSE</span></code> signal, firing when an exit is traversed.</p></li>
<li><p>Add integration between Evennia and Discord channels (PR by Inspector Cararacal)</p></li>
</ul>
</section>
<section id="evennia-0-9-5">

View file

@ -16,7 +16,9 @@
<script src="../_static/language_data.js"></script>
<link rel="shortcut icon" href="../_static/favicon.ico"/>
<link rel="index" title="Index" href="../genindex.html" />
<link rel="search" title="Search" href="../search.html" />
<link rel="search" title="Search" href="../search.html" />
<link rel="next" title="Connect Evennia channels to Grapevine" href="Channels-to-Grapevine.html" />
<link rel="prev" title="Choosing a database" href="Choosing-a-Database.html" />
</head><body>
<div class="related" role="navigation" aria-label="related navigation">
<h3>Navigation</h3>
@ -27,7 +29,14 @@
<li class="right" >
<a href="../py-modindex.html" title="Python Module Index"
>modules</a> |</li>
<li class="right" >
<a href="Channels-to-Grapevine.html" title="Connect Evennia channels to Grapevine"
accesskey="N">next</a> |</li>
<li class="right" >
<a href="Choosing-a-Database.html" title="Choosing a database"
accesskey="P">previous</a> |</li>
<li class="nav-item nav-item-0"><a href="../index.html">Evennia 1.0-dev</a> &#187;</li>
<li class="nav-item nav-item-1"><a href="Setup-Overview.html" accesskey="U">Server Setup and Life</a> &#187;</li>
<li class="nav-item nav-item-this"><a href="">Connect Evennia channels to Discord</a></li>
</ul>
<div class="develop">develop branch</div>
@ -67,6 +76,12 @@
</li>
</ul>
<h4>Previous topic</h4>
<p class="topless"><a href="Choosing-a-Database.html"
title="previous chapter">Choosing a database</a></p>
<h4>Next topic</h4>
<p class="topless"><a href="Channels-to-Grapevine.html"
title="next chapter">Connect Evennia channels to Grapevine</a></p>
<div role="note" aria-label="source link">
<!--h3>This Page</h3-->
<ul class="this-page-menu">
@ -269,7 +284,14 @@ and does not document the full range of possible Discord events.</p>
<li class="right" >
<a href="../py-modindex.html" title="Python Module Index"
>modules</a> |</li>
<li class="right" >
<a href="Channels-to-Grapevine.html" title="Connect Evennia channels to Grapevine"
>next</a> |</li>
<li class="right" >
<a href="Choosing-a-Database.html" title="Choosing a database"
>previous</a> |</li>
<li class="nav-item nav-item-0"><a href="../index.html">Evennia 1.0-dev</a> &#187;</li>
<li class="nav-item nav-item-1"><a href="Setup-Overview.html" >Server Setup and Life</a> &#187;</li>
<li class="nav-item nav-item-this"><a href="">Connect Evennia channels to Discord</a></li>
</ul>
<div class="develop">develop branch</div>

View file

@ -17,8 +17,8 @@
<link rel="shortcut icon" href="../_static/favicon.ico"/>
<link rel="index" title="Index" href="../genindex.html" />
<link rel="search" title="Search" href="../search.html" />
<link rel="next" title="Connect Evennia channels to RSS" href="Channels-to-RSS.html" />
<link rel="prev" title="Connect Evennia channels to IRC" href="Channels-to-IRC.html" />
<link rel="next" title="Connect Evennia channels to IRC" href="Channels-to-IRC.html" />
<link rel="prev" title="Connect Evennia channels to Discord" href="Channels-to-Discord.html" />
</head><body>
<div class="related" role="navigation" aria-label="related navigation">
<h3>Navigation</h3>
@ -30,10 +30,10 @@
<a href="../py-modindex.html" title="Python Module Index"
>modules</a> |</li>
<li class="right" >
<a href="Channels-to-RSS.html" title="Connect Evennia channels to RSS"
<a href="Channels-to-IRC.html" title="Connect Evennia channels to IRC"
accesskey="N">next</a> |</li>
<li class="right" >
<a href="Channels-to-IRC.html" title="Connect Evennia channels to IRC"
<a href="Channels-to-Discord.html" title="Connect Evennia channels to Discord"
accesskey="P">previous</a> |</li>
<li class="nav-item nav-item-0"><a href="../index.html">Evennia 1.0-dev</a> &#187;</li>
<li class="nav-item nav-item-1"><a href="Setup-Overview.html" accesskey="U">Server Setup and Life</a> &#187;</li>
@ -70,11 +70,11 @@
</ul>
<h4>Previous topic</h4>
<p class="topless"><a href="Channels-to-IRC.html"
title="previous chapter">Connect Evennia channels to IRC</a></p>
<p class="topless"><a href="Channels-to-Discord.html"
title="previous chapter">Connect Evennia channels to Discord</a></p>
<h4>Next topic</h4>
<p class="topless"><a href="Channels-to-RSS.html"
title="next chapter">Connect Evennia channels to RSS</a></p>
<p class="topless"><a href="Channels-to-IRC.html"
title="next chapter">Connect Evennia channels to IRC</a></p>
<div role="note" aria-label="source link">
<!--h3>This Page</h3-->
<ul class="this-page-menu">
@ -184,10 +184,10 @@ it to your channel in-game.</p>
<a href="../py-modindex.html" title="Python Module Index"
>modules</a> |</li>
<li class="right" >
<a href="Channels-to-RSS.html" title="Connect Evennia channels to RSS"
<a href="Channels-to-IRC.html" title="Connect Evennia channels to IRC"
>next</a> |</li>
<li class="right" >
<a href="Channels-to-IRC.html" title="Connect Evennia channels to IRC"
<a href="Channels-to-Discord.html" title="Connect Evennia channels to Discord"
>previous</a> |</li>
<li class="nav-item nav-item-0"><a href="../index.html">Evennia 1.0-dev</a> &#187;</li>
<li class="nav-item nav-item-1"><a href="Setup-Overview.html" >Server Setup and Life</a> &#187;</li>

View file

@ -17,8 +17,8 @@
<link rel="shortcut icon" href="../_static/favicon.ico"/>
<link rel="index" title="Index" href="../genindex.html" />
<link rel="search" title="Search" href="../search.html" />
<link rel="next" title="Connect Evennia channels to Grapevine" href="Channels-to-Grapevine.html" />
<link rel="prev" title="Choosing a database" href="Choosing-a-Database.html" />
<link rel="next" title="Connect Evennia channels to RSS" href="Channels-to-RSS.html" />
<link rel="prev" title="Connect Evennia channels to Grapevine" href="Channels-to-Grapevine.html" />
</head><body>
<div class="related" role="navigation" aria-label="related navigation">
<h3>Navigation</h3>
@ -30,10 +30,10 @@
<a href="../py-modindex.html" title="Python Module Index"
>modules</a> |</li>
<li class="right" >
<a href="Channels-to-Grapevine.html" title="Connect Evennia channels to Grapevine"
<a href="Channels-to-RSS.html" title="Connect Evennia channels to RSS"
accesskey="N">next</a> |</li>
<li class="right" >
<a href="Choosing-a-Database.html" title="Choosing a database"
<a href="Channels-to-Grapevine.html" title="Connect Evennia channels to Grapevine"
accesskey="P">previous</a> |</li>
<li class="nav-item nav-item-0"><a href="../index.html">Evennia 1.0-dev</a> &#187;</li>
<li class="nav-item nav-item-1"><a href="Setup-Overview.html" accesskey="U">Server Setup and Life</a> &#187;</li>
@ -70,11 +70,11 @@
</ul>
<h4>Previous topic</h4>
<p class="topless"><a href="Choosing-a-Database.html"
title="previous chapter">Choosing a database</a></p>
<h4>Next topic</h4>
<p class="topless"><a href="Channels-to-Grapevine.html"
title="next chapter">Connect Evennia channels to Grapevine</a></p>
title="previous chapter">Connect Evennia channels to Grapevine</a></p>
<h4>Next topic</h4>
<p class="topless"><a href="Channels-to-RSS.html"
title="next chapter">Connect Evennia channels to RSS</a></p>
<div role="note" aria-label="source link">
<!--h3>This Page</h3-->
<ul class="this-page-menu">
@ -200,10 +200,10 @@ name of the IRC channel you used (#evennia here).</p>
<a href="../py-modindex.html" title="Python Module Index"
>modules</a> |</li>
<li class="right" >
<a href="Channels-to-Grapevine.html" title="Connect Evennia channels to Grapevine"
<a href="Channels-to-RSS.html" title="Connect Evennia channels to RSS"
>next</a> |</li>
<li class="right" >
<a href="Choosing-a-Database.html" title="Choosing a database"
<a href="Channels-to-Grapevine.html" title="Connect Evennia channels to Grapevine"
>previous</a> |</li>
<li class="nav-item nav-item-0"><a href="../index.html">Evennia 1.0-dev</a> &#187;</li>
<li class="nav-item nav-item-1"><a href="Setup-Overview.html" >Server Setup and Life</a> &#187;</li>

View file

@ -18,7 +18,7 @@
<link rel="index" title="Index" href="../genindex.html" />
<link rel="search" title="Search" href="../search.html" />
<link rel="next" title="Connect Evennia to Twitter" href="Channels-to-Twitter.html" />
<link rel="prev" title="Connect Evennia channels to Grapevine" href="Channels-to-Grapevine.html" />
<link rel="prev" title="Connect Evennia channels to IRC" href="Channels-to-IRC.html" />
</head><body>
<div class="related" role="navigation" aria-label="related navigation">
<h3>Navigation</h3>
@ -33,7 +33,7 @@
<a href="Channels-to-Twitter.html" title="Connect Evennia to Twitter"
accesskey="N">next</a> |</li>
<li class="right" >
<a href="Channels-to-Grapevine.html" title="Connect Evennia channels to Grapevine"
<a href="Channels-to-IRC.html" title="Connect Evennia channels to IRC"
accesskey="P">previous</a> |</li>
<li class="nav-item nav-item-0"><a href="../index.html">Evennia 1.0-dev</a> &#187;</li>
<li class="nav-item nav-item-1"><a href="Setup-Overview.html" accesskey="U">Server Setup and Life</a> &#187;</li>
@ -70,8 +70,8 @@
</ul>
<h4>Previous topic</h4>
<p class="topless"><a href="Channels-to-Grapevine.html"
title="previous chapter">Connect Evennia channels to Grapevine</a></p>
<p class="topless"><a href="Channels-to-IRC.html"
title="previous chapter">Connect Evennia channels to IRC</a></p>
<h4>Next topic</h4>
<p class="topless"><a href="Channels-to-Twitter.html"
title="next chapter">Connect Evennia to Twitter</a></p>
@ -171,7 +171,7 @@ same channels as <a class="reference internal" href="Channels-to-IRC.html"><span
<a href="Channels-to-Twitter.html" title="Connect Evennia to Twitter"
>next</a> |</li>
<li class="right" >
<a href="Channels-to-Grapevine.html" title="Connect Evennia channels to Grapevine"
<a href="Channels-to-IRC.html" title="Connect Evennia channels to IRC"
>previous</a> |</li>
<li class="nav-item nav-item-0"><a href="../index.html">Evennia 1.0-dev</a> &#187;</li>
<li class="nav-item nav-item-1"><a href="Setup-Overview.html" >Server Setup and Life</a> &#187;</li>

View file

@ -17,7 +17,7 @@
<link rel="shortcut icon" href="../_static/favicon.ico"/>
<link rel="index" title="Index" href="../genindex.html" />
<link rel="search" title="Search" href="../search.html" />
<link rel="next" title="Connect Evennia channels to IRC" href="Channels-to-IRC.html" />
<link rel="next" title="Connect Evennia channels to Discord" href="Channels-to-Discord.html" />
<link rel="prev" title="Evennia Default settings file" href="Settings-Default.html" />
</head><body>
<div class="related" role="navigation" aria-label="related navigation">
@ -30,7 +30,7 @@
<a href="../py-modindex.html" title="Python Module Index"
>modules</a> |</li>
<li class="right" >
<a href="Channels-to-IRC.html" title="Connect Evennia channels to IRC"
<a href="Channels-to-Discord.html" title="Connect Evennia channels to Discord"
accesskey="N">next</a> |</li>
<li class="right" >
<a href="Settings-Default.html" title="Evennia Default settings file"
@ -90,8 +90,8 @@
<p class="topless"><a href="Settings-Default.html"
title="previous chapter">Evennia Default settings file</a></p>
<h4>Next topic</h4>
<p class="topless"><a href="Channels-to-IRC.html"
title="next chapter">Connect Evennia channels to IRC</a></p>
<p class="topless"><a href="Channels-to-Discord.html"
title="next chapter">Connect Evennia channels to Discord</a></p>
<div role="note" aria-label="source link">
<!--h3>This Page</h3-->
<ul class="this-page-menu">
@ -387,7 +387,7 @@ server).</p>
<a href="../py-modindex.html" title="Python Module Index"
>modules</a> |</li>
<li class="right" >
<a href="Channels-to-IRC.html" title="Connect Evennia channels to IRC"
<a href="Channels-to-Discord.html" title="Connect Evennia channels to Discord"
>next</a> |</li>
<li class="right" >
<a href="Settings-Default.html" title="Evennia Default settings file"

View file

@ -202,9 +202,9 @@
<li class="toctree-l2"><a class="reference internal" href="Choosing-a-Database.html#other-databases">Other databases</a></li>
</ul>
</li>
<li class="toctree-l1"><a class="reference internal" href="Channels-to-IRC.html">Connect Evennia channels to IRC</a><ul>
<li class="toctree-l2"><a class="reference internal" href="Channels-to-IRC.html#configuring-irc">Configuring IRC</a></li>
<li class="toctree-l2"><a class="reference internal" href="Channels-to-IRC.html#setting-up-irc-step-by-step">Setting up IRC, step by step</a></li>
<li class="toctree-l1"><a class="reference internal" href="Channels-to-Discord.html">Connect Evennia channels to Discord</a><ul>
<li class="toctree-l2"><a class="reference internal" href="Channels-to-Discord.html#configuring-discord">Configuring Discord</a></li>
<li class="toctree-l2"><a class="reference internal" href="Channels-to-Discord.html#step-by-step-discord-setup">Step-By-Step Discord Setup</a></li>
</ul>
</li>
<li class="toctree-l1"><a class="reference internal" href="Channels-to-Grapevine.html">Connect Evennia channels to Grapevine</a><ul>
@ -212,6 +212,11 @@
<li class="toctree-l2"><a class="reference internal" href="Channels-to-Grapevine.html#setting-up-grapevine-step-by-step">Setting up Grapevine, step by step</a></li>
</ul>
</li>
<li class="toctree-l1"><a class="reference internal" href="Channels-to-IRC.html">Connect Evennia channels to IRC</a><ul>
<li class="toctree-l2"><a class="reference internal" href="Channels-to-IRC.html#configuring-irc">Configuring IRC</a></li>
<li class="toctree-l2"><a class="reference internal" href="Channels-to-IRC.html#setting-up-irc-step-by-step">Setting up IRC, step by step</a></li>
</ul>
</li>
<li class="toctree-l1"><a class="reference internal" href="Channels-to-RSS.html">Connect Evennia channels to RSS</a><ul>
<li class="toctree-l2"><a class="reference internal" href="Channels-to-RSS.html#configuring-rss">Configuring RSS</a></li>
<li class="toctree-l2"><a class="reference internal" href="Channels-to-RSS.html#setting-up-rss-step-by-step">Setting up RSS, step by step</a></li>

View file

@ -86,7 +86,6 @@
<span class="kn">from</span> <span class="nn">django.conf</span> <span class="kn">import</span> <span class="n">settings</span>
<span class="kn">from</span> <span class="nn">django.utils.translation</span> <span class="kn">import</span> <span class="n">gettext</span> <span class="k">as</span> <span class="n">_</span>
<span class="kn">from</span> <span class="nn">evennia.accounts.accounts</span> <span class="kn">import</span> <span class="n">DefaultAccount</span>
<span class="kn">from</span> <span class="nn">evennia.scripts.scripts</span> <span class="kn">import</span> <span class="n">DefaultScript</span>
<span class="kn">from</span> <span class="nn">evennia.utils</span> <span class="kn">import</span> <span class="n">logger</span><span class="p">,</span> <span class="n">search</span><span class="p">,</span> <span class="n">utils</span>
@ -644,8 +643,9 @@
<div class="viewcode-block" id="DiscordBot"><a class="viewcode-back" href="../../../api/evennia.accounts.bots.html#evennia.accounts.bots.DiscordBot">[docs]</a><span class="k">class</span> <span class="nc">DiscordBot</span><span class="p">(</span><span class="n">Bot</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> Discord bot relay. You will need to set up your own bot (https://discord.com/developers/applications)</span>
<span class="sd"> and add the bot token as `DISCORD_BOT_TOKEN` to `secret_settings.py` to use</span>
<span class="sd"> Discord bot relay. You will need to set up your own bot</span>
<span class="sd"> (https://discord.com/developers/applications) and add the bot token as `DISCORD_BOT_TOKEN` to</span>
<span class="sd"> `secret_settings.py` to use</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="n">factory_path</span> <span class="o">=</span> <span class="s2">&quot;evennia.server.portal.discord.DiscordWebsocketServerFactory&quot;</span>
@ -653,9 +653,11 @@
<div class="viewcode-block" id="DiscordBot.at_init"><a class="viewcode-back" href="../../../api/evennia.accounts.bots.html#evennia.accounts.bots.DiscordBot.at_init">[docs]</a> <span class="k">def</span> <span class="nf">at_init</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> Load required channels back into memory</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="k">if</span> <span class="n">channel_links</span> <span class="o">:=</span> <span class="bp">self</span><span class="o">.</span><span class="n">db</span><span class="o">.</span><span class="n">channels</span><span class="p">:</span>
<span class="c1"># this attribute contains a list of evennia&lt;-&gt;discord links in the form of (&quot;evennia_channel&quot;, &quot;discord_chan_id&quot;)</span>
<span class="c1"># this attribute contains a list of evennia&lt;-&gt;discord links in the form</span>
<span class="c1"># of (&quot;evennia_channel&quot;, &quot;discord_chan_id&quot;)</span>
<span class="c1"># grab Evennia channels, cache and connect</span>
<span class="n">channel_set</span> <span class="o">=</span> <span class="p">{</span><span class="n">evchan</span> <span class="k">for</span> <span class="n">evchan</span><span class="p">,</span> <span class="n">dcid</span> <span class="ow">in</span> <span class="n">channel_links</span><span class="p">}</span>
<span class="bp">self</span><span class="o">.</span><span class="n">ndb</span><span class="o">.</span><span class="n">ev_channels</span> <span class="o">=</span> <span class="p">{}</span>
@ -680,7 +682,8 @@
<span class="n">channel</span><span class="o">.</span><span class="n">connect</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span>
<span class="k">elif</span> <span class="n">channel_links</span> <span class="o">:=</span> <span class="bp">self</span><span class="o">.</span><span class="n">db</span><span class="o">.</span><span class="n">channels</span><span class="p">:</span>
<span class="c1"># this attribute contains a list of evennia&lt;-&gt;discord links in the form of (&quot;evennia_channel&quot;, &quot;discord_chan_id&quot;)</span>
<span class="c1"># this attribute contains a list of evennia&lt;-&gt;discord links in the form</span>
<span class="c1"># of (&quot;evennia_channel&quot;, &quot;discord_chan_id&quot;)</span>
<span class="c1"># grab Evennia channels, cache and connect</span>
<span class="n">channel_set</span> <span class="o">=</span> <span class="p">{</span><span class="n">evchan</span> <span class="k">for</span> <span class="n">evchan</span><span class="p">,</span> <span class="n">dcid</span> <span class="ow">in</span> <span class="n">channel_links</span><span class="p">}</span>
<span class="bp">self</span><span class="o">.</span><span class="n">ndb</span><span class="o">.</span><span class="n">ev_channels</span> <span class="o">=</span> <span class="p">{}</span>
@ -705,6 +708,7 @@
<span class="sd"> Called by the Channel just before passing a message into `channel_msg`.</span>
<span class="sd"> We overload this to set the channel tag prefix.</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="n">kwargs</span><span class="p">[</span><span class="s2">&quot;no_prefix&quot;</span><span class="p">]</span> <span class="o">=</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">db</span><span class="o">.</span><span class="n">tag_channel</span>
<span class="k">return</span> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">at_pre_channel_msg</span><span class="p">(</span><span class="n">message</span><span class="p">,</span> <span class="n">channel</span><span class="p">,</span> <span class="n">senders</span><span class="o">=</span><span class="n">senders</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">)</span></div>
@ -741,7 +745,7 @@
<span class="sd"> sender (tuple) - The Discord info for the sender in the form (id, nickname)</span>
<span class="sd"> Keyword args:</span>
<span class="sd"> kwargs (optional) - Unused by default, but can carry additional data from the protocol.</span>
<span class="sd"> **kwargs (optional) - Unused by default, but can carry additional data from the protocol.</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="k">pass</span></div>
@ -750,17 +754,20 @@
<span class="bp">self</span><span class="p">,</span> <span class="n">message</span><span class="p">,</span> <span class="n">to_channel</span><span class="p">,</span> <span class="n">sender</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">from_channel</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">from_server</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span>
<span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> Formats and sends a Discord -&gt; Evennia message. Called when the Discord bot receives a channel message on Discord.</span>
<span class="sd"> Formats and sends a Discord -&gt; Evennia message. Called when the Discord bot receives a</span>
<span class="sd"> channel message on Discord.</span>
<span class="sd"> Args:</span>
<span class="sd"> message (str) - Incoming text from Discord.</span>
<span class="sd"> to_channel (Channel) - The Evennia channel receiving the message</span>
<span class="sd"> Keyword args:</span>
<span class="sd"> sender (tuple) - The Discord info for the sender in the form (id, nickname)</span>
<span class="sd"> sender (tuple) - The Discord info for the sender in the form `(id, nickname)`</span>
<span class="sd"> from_channel (str) - The Discord channel name</span>
<span class="sd"> from_server (str) - The Discord server name</span>
<span class="sd"> kwargs - Any additional keywords. Unused by default, but available for adding additional flags or parameters.</span>
<span class="sd"> kwargs - Any additional keywords. Unused by default, but available for adding additional</span>
<span class="sd"> flags or parameters.</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="n">tag_str</span> <span class="o">=</span> <span class="s2">&quot;&quot;</span>

View file

@ -84,6 +84,7 @@
<span class="kn">from</span> <span class="nn">django.conf</span> <span class="kn">import</span> <span class="n">settings</span>
<span class="kn">from</span> <span class="nn">django.core.paginator</span> <span class="kn">import</span> <span class="n">Paginator</span>
<span class="kn">from</span> <span class="nn">django.db.models</span> <span class="kn">import</span> <span class="n">Max</span><span class="p">,</span> <span class="n">Min</span><span class="p">,</span> <span class="n">Q</span>
<span class="kn">from</span> <span class="nn">evennia</span> <span class="kn">import</span> <span class="n">InterruptCommand</span>
<span class="kn">from</span> <span class="nn">evennia.commands.cmdhandler</span> <span class="kn">import</span> <span class="n">get_and_merge_cmdsets</span>
<span class="kn">from</span> <span class="nn">evennia.locks.lockhandler</span> <span class="kn">import</span> <span class="n">LockException</span>

View file

@ -84,6 +84,7 @@
<span class="kn">from</span> <span class="nn">django.conf</span> <span class="kn">import</span> <span class="n">settings</span>
<span class="kn">from</span> <span class="nn">django.db.models</span> <span class="kn">import</span> <span class="n">Q</span>
<span class="kn">from</span> <span class="nn">django.db.models.fields</span> <span class="kn">import</span> <span class="n">exceptions</span>
<span class="kn">from</span> <span class="nn">evennia.server</span> <span class="kn">import</span> <span class="n">signals</span>
<span class="kn">from</span> <span class="nn">evennia.typeclasses.managers</span> <span class="kn">import</span> <span class="n">TypeclassManager</span><span class="p">,</span> <span class="n">TypedObjectManager</span>
<span class="kn">from</span> <span class="nn">evennia.utils.utils</span> <span class="kn">import</span> <span class="p">(</span>

View file

@ -91,6 +91,7 @@
<span class="kn">import</span> <span class="nn">inflect</span>
<span class="kn">from</span> <span class="nn">django.conf</span> <span class="kn">import</span> <span class="n">settings</span>
<span class="kn">from</span> <span class="nn">django.utils.translation</span> <span class="kn">import</span> <span class="n">gettext</span> <span class="k">as</span> <span class="n">_</span>
<span class="kn">from</span> <span class="nn">evennia.commands</span> <span class="kn">import</span> <span class="n">cmdset</span>
<span class="kn">from</span> <span class="nn">evennia.commands.cmdsethandler</span> <span class="kn">import</span> <span class="n">CmdSetHandler</span>
<span class="kn">from</span> <span class="nn">evennia.objects.manager</span> <span class="kn">import</span> <span class="n">ObjectManager</span>

View file

@ -0,0 +1,667 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>evennia.server.portal.discord &#8212; Evennia 1.0-dev documentation</title>
<link rel="stylesheet" href="../../../../_static/nature.css" type="text/css" />
<link rel="stylesheet" href="../../../../_static/pygments.css" type="text/css" />
<script id="documentation_options" data-url_root="../../../../" src="../../../../_static/documentation_options.js"></script>
<script src="../../../../_static/jquery.js"></script>
<script src="../../../../_static/underscore.js"></script>
<script src="../../../../_static/doctools.js"></script>
<script src="../../../../_static/language_data.js"></script>
<link rel="shortcut icon" href="../../../../_static/favicon.ico"/>
<link rel="index" title="Index" href="../../../../genindex.html" />
<link rel="search" title="Search" href="../../../../search.html" />
</head><body>
<div class="related" role="navigation" aria-label="related navigation">
<h3>Navigation</h3>
<ul>
<li class="right" style="margin-right: 10px">
<a href="../../../../genindex.html" title="General Index"
accesskey="I">index</a></li>
<li class="right" >
<a href="../../../../py-modindex.html" title="Python Module Index"
>modules</a> |</li>
<li class="nav-item nav-item-0"><a href="../../../../index.html">Evennia 1.0-dev</a> &#187;</li>
<li class="nav-item nav-item-1"><a href="../../../index.html" >Module code</a> &#187;</li>
<li class="nav-item nav-item-2"><a href="../../../evennia.html" accesskey="U">evennia</a> &#187;</li>
<li class="nav-item nav-item-this"><a href="">evennia.server.portal.discord</a></li>
</ul>
<div class="develop">develop branch</div>
</div>
<div class="document">
<div class="documentwrapper">
<div class="sphinxsidebar" role="navigation" aria-label="main navigation">
<div class="sphinxsidebarwrapper">
<p class="logo"><a href="../../../../index.html">
<img class="logo" src="../../../../_static/evennia_logo.png" alt="Logo"/>
</a></p>
<div id="searchbox" style="display: none" role="search">
<h3 id="searchlabel">Quick search</h3>
<div class="searchformwrapper">
<form class="search" action="../../../../search.html" method="get">
<input type="text" name="q" aria-labelledby="searchlabel" />
<input type="submit" value="Go" />
</form>
</div>
</div>
<script>$('#searchbox').show(0);</script><h3>Links</h3>
<ul>
<li><a href="https://www.evennia.com">Home page</a> </li>
<li><a href="https://github.com/evennia/evennia">Evennia Github</a> </li>
<li><a href="http://games.evennia.com">Game Index</a> </li>
<li>
<a href="https://discord.gg/AJJpcRUhtF">Discord</a> -
<a href="https://github.com/evennia/evennia/discussions">Discussions</a> -
<a href="https://evennia.blogspot.com/">Blog</a>
</li>
</ul>
<h3>Versions</h3>
<ul>
<li><a href="discord.html">1.0-dev (develop branch)</a></li>
<ul>
<li><a href="../0.9.5/index.html">0.9.5 (v0.9.5 branch)</a></li>
</ul>
</div>
</div>
<div class="bodywrapper">
<div class="body" role="main">
<h1>Source code for evennia.server.portal.discord</h1><div class="highlight"><pre>
<span></span><span class="sd">&quot;&quot;&quot;</span>
<span class="sd">Implements Discord chat channel integration.</span>
<span class="sd">The Discord API uses a mix of websockets and REST API endpoints.</span>
<span class="sd">In order for this integration to work, you need to have your own</span>
<span class="sd">discord bot set up via https://discord.com/developers/applications</span>
<span class="sd">with the MESSAGE CONTENT toggle switched on, and your bot token</span>
<span class="sd">added to `server/conf/secret_settings.py` as your DISCORD_BOT_TOKEN</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="kn">import</span> <span class="nn">json</span>
<span class="kn">import</span> <span class="nn">os</span>
<span class="kn">from</span> <span class="nn">io</span> <span class="kn">import</span> <span class="n">BytesIO</span>
<span class="kn">from</span> <span class="nn">random</span> <span class="kn">import</span> <span class="n">random</span>
<span class="kn">from</span> <span class="nn">autobahn.twisted.websocket</span> <span class="kn">import</span> <span class="p">(</span>
<span class="n">WebSocketClientFactory</span><span class="p">,</span>
<span class="n">WebSocketClientProtocol</span><span class="p">,</span>
<span class="n">connectWS</span><span class="p">,</span>
<span class="p">)</span>
<span class="kn">from</span> <span class="nn">django.conf</span> <span class="kn">import</span> <span class="n">settings</span>
<span class="kn">from</span> <span class="nn">twisted.internet</span> <span class="kn">import</span> <span class="n">protocol</span><span class="p">,</span> <span class="n">reactor</span><span class="p">,</span> <span class="n">ssl</span><span class="p">,</span> <span class="n">task</span>
<span class="kn">from</span> <span class="nn">twisted.web.client</span> <span class="kn">import</span> <span class="n">Agent</span><span class="p">,</span> <span class="n">FileBodyProducer</span><span class="p">,</span> <span class="n">readBody</span>
<span class="kn">from</span> <span class="nn">twisted.web.http_headers</span> <span class="kn">import</span> <span class="n">Headers</span>
<span class="kn">from</span> <span class="nn">evennia.server.session</span> <span class="kn">import</span> <span class="n">Session</span>
<span class="kn">from</span> <span class="nn">evennia.utils</span> <span class="kn">import</span> <span class="n">class_from_module</span><span class="p">,</span> <span class="n">get_evennia_version</span><span class="p">,</span> <span class="n">logger</span>
<span class="kn">from</span> <span class="nn">evennia.utils.utils</span> <span class="kn">import</span> <span class="n">delay</span>
<span class="n">_AGENT</span> <span class="o">=</span> <span class="n">Agent</span><span class="p">(</span><span class="n">reactor</span><span class="p">)</span>
<span class="n">_BASE_SESSION_CLASS</span> <span class="o">=</span> <span class="n">class_from_module</span><span class="p">(</span><span class="n">settings</span><span class="o">.</span><span class="n">BASE_SESSION_CLASS</span><span class="p">)</span>
<span class="n">DISCORD_API_VERSION</span> <span class="o">=</span> <span class="mi">10</span>
<span class="c1"># include version number to prevent automatically updating to breaking changes</span>
<span class="n">DISCORD_API_BASE_URL</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;https://discord.com/api/v</span><span class="si">{</span><span class="n">DISCORD_API_VERSION</span><span class="si">}</span><span class="s2">&quot;</span>
<span class="n">DISCORD_USER_AGENT</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;Evennia (https://www.evennia.com, </span><span class="si">{</span><span class="n">get_evennia_version</span><span class="p">(</span><span class="n">mode</span><span class="o">=</span><span class="s1">&#39;short&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">)&quot;</span>
<span class="n">DISCORD_BOT_TOKEN</span> <span class="o">=</span> <span class="n">settings</span><span class="o">.</span><span class="n">DISCORD_BOT_TOKEN</span>
<span class="n">DISCORD_BOT_INTENTS</span> <span class="o">=</span> <span class="n">settings</span><span class="o">.</span><span class="n">DISCORD_BOT_INTENTS</span>
<span class="c1"># Discord OP codes, alphabetic</span>
<span class="n">OP_DISPATCH</span> <span class="o">=</span> <span class="mi">0</span>
<span class="n">OP_HEARTBEAT</span> <span class="o">=</span> <span class="mi">1</span>
<span class="n">OP_HEARTBEAT_ACK</span> <span class="o">=</span> <span class="mi">11</span>
<span class="n">OP_HELLO</span> <span class="o">=</span> <span class="mi">10</span>
<span class="n">OP_IDENTIFY</span> <span class="o">=</span> <span class="mi">2</span>
<span class="n">OP_INVALID_SESSION</span> <span class="o">=</span> <span class="mi">9</span>
<span class="n">OP_RECONNECT</span> <span class="o">=</span> <span class="mi">7</span>
<span class="n">OP_RESUME</span> <span class="o">=</span> <span class="mi">6</span>
<div class="viewcode-block" id="should_retry"><a class="viewcode-back" href="../../../../api/evennia.server.portal.discord.html#evennia.server.portal.discord.should_retry">[docs]</a><span class="k">def</span> <span class="nf">should_retry</span><span class="p">(</span><span class="n">status_code</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> Helper function to check if the request should be retried later.</span>
<span class="sd"> Args:</span>
<span class="sd"> status_code (int) - The HTTP status code</span>
<span class="sd"> Returns:</span>
<span class="sd"> retry (bool) - True if request should be retried False otherwise</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="k">if</span> <span class="n">status_code</span> <span class="o">&gt;=</span> <span class="mi">500</span> <span class="ow">and</span> <span class="n">status_code</span> <span class="o">&lt;=</span> <span class="mi">504</span><span class="p">:</span>
<span class="c1"># these are common server error codes when the server is temporarily malfunctioning</span>
<span class="c1"># in these cases, we should retry</span>
<span class="k">return</span> <span class="kc">True</span>
<span class="k">else</span><span class="p">:</span>
<span class="c1"># handle all other cases; this can be expanded later if needed for special cases</span>
<span class="k">return</span> <span class="kc">False</span></div>
<div class="viewcode-block" id="DiscordWebsocketServerFactory"><a class="viewcode-back" href="../../../../api/evennia.server.portal.discord.html#evennia.server.portal.discord.DiscordWebsocketServerFactory">[docs]</a><span class="k">class</span> <span class="nc">DiscordWebsocketServerFactory</span><span class="p">(</span><span class="n">WebSocketClientFactory</span><span class="p">,</span> <span class="n">protocol</span><span class="o">.</span><span class="n">ReconnectingClientFactory</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> A variant of the websocket-factory that auto-reconnects.</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="n">initialDelay</span> <span class="o">=</span> <span class="mi">1</span>
<span class="n">factor</span> <span class="o">=</span> <span class="mf">1.5</span>
<span class="n">maxDelay</span> <span class="o">=</span> <span class="mi">60</span>
<span class="n">gateway</span> <span class="o">=</span> <span class="kc">None</span>
<span class="n">resume_url</span> <span class="o">=</span> <span class="kc">None</span>
<div class="viewcode-block" id="DiscordWebsocketServerFactory.__init__"><a class="viewcode-back" href="../../../../api/evennia.server.portal.discord.html#evennia.server.portal.discord.DiscordWebsocketServerFactory.__init__">[docs]</a> <span class="k">def</span> <span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">sessionhandler</span><span class="p">,</span> <span class="o">*</span><span class="n">args</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">):</span>
<span class="bp">self</span><span class="o">.</span><span class="n">uid</span> <span class="o">=</span> <span class="n">kwargs</span><span class="o">.</span><span class="n">pop</span><span class="p">(</span><span class="s2">&quot;uid&quot;</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">sessionhandler</span> <span class="o">=</span> <span class="n">sessionhandler</span>
<span class="bp">self</span><span class="o">.</span><span class="n">port</span> <span class="o">=</span> <span class="kc">None</span>
<span class="bp">self</span><span class="o">.</span><span class="n">bot</span> <span class="o">=</span> <span class="kc">None</span></div>
<div class="viewcode-block" id="DiscordWebsocketServerFactory.get_gateway_url"><a class="viewcode-back" href="../../../../api/evennia.server.portal.discord.html#evennia.server.portal.discord.DiscordWebsocketServerFactory.get_gateway_url">[docs]</a> <span class="k">def</span> <span class="nf">get_gateway_url</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="o">*</span><span class="n">args</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">):</span>
<span class="c1"># get the websocket gateway URL from Discord</span>
<span class="n">d</span> <span class="o">=</span> <span class="n">_AGENT</span><span class="o">.</span><span class="n">request</span><span class="p">(</span>
<span class="sa">b</span><span class="s2">&quot;GET&quot;</span><span class="p">,</span>
<span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">DISCORD_API_BASE_URL</span><span class="si">}</span><span class="s2">/gateway&quot;</span><span class="o">.</span><span class="n">encode</span><span class="p">(</span><span class="s2">&quot;utf-8&quot;</span><span class="p">),</span>
<span class="n">Headers</span><span class="p">(</span>
<span class="p">{</span>
<span class="s2">&quot;User-Agent&quot;</span><span class="p">:</span> <span class="p">[</span><span class="n">DISCORD_USER_AGENT</span><span class="p">],</span>
<span class="s2">&quot;Authorization&quot;</span><span class="p">:</span> <span class="p">[</span><span class="sa">f</span><span class="s2">&quot;Bot </span><span class="si">{</span><span class="n">DISCORD_BOT_TOKEN</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">],</span>
<span class="s2">&quot;Content-Type&quot;</span><span class="p">:</span> <span class="p">[</span><span class="s2">&quot;application/json&quot;</span><span class="p">],</span>
<span class="p">}</span>
<span class="p">),</span>
<span class="kc">None</span><span class="p">,</span>
<span class="p">)</span>
<span class="k">def</span> <span class="nf">cbResponse</span><span class="p">(</span><span class="n">response</span><span class="p">):</span>
<span class="k">if</span> <span class="n">response</span><span class="o">.</span><span class="n">code</span> <span class="o">==</span> <span class="mi">200</span><span class="p">:</span>
<span class="n">d</span> <span class="o">=</span> <span class="n">readBody</span><span class="p">(</span><span class="n">response</span><span class="p">)</span>
<span class="n">d</span><span class="o">.</span><span class="n">addCallback</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">websocket_init</span><span class="p">,</span> <span class="o">*</span><span class="n">args</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">)</span>
<span class="k">return</span> <span class="n">d</span>
<span class="k">elif</span> <span class="n">should_retry</span><span class="p">(</span><span class="n">response</span><span class="o">.</span><span class="n">code</span><span class="p">):</span>
<span class="n">delay</span><span class="p">(</span><span class="mi">300</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">get_gateway_url</span><span class="p">,</span> <span class="o">*</span><span class="n">args</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">)</span>
<span class="n">d</span><span class="o">.</span><span class="n">addCallback</span><span class="p">(</span><span class="n">cbResponse</span><span class="p">)</span></div>
<div class="viewcode-block" id="DiscordWebsocketServerFactory.websocket_init"><a class="viewcode-back" href="../../../../api/evennia.server.portal.discord.html#evennia.server.portal.discord.DiscordWebsocketServerFactory.websocket_init">[docs]</a> <span class="k">def</span> <span class="nf">websocket_init</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">payload</span><span class="p">,</span> <span class="o">*</span><span class="n">args</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> callback for when the URL is gotten</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="n">data</span> <span class="o">=</span> <span class="n">json</span><span class="o">.</span><span class="n">loads</span><span class="p">(</span><span class="nb">str</span><span class="p">(</span><span class="n">payload</span><span class="p">,</span> <span class="s2">&quot;utf-8&quot;</span><span class="p">))</span>
<span class="k">if</span> <span class="n">url</span> <span class="o">:=</span> <span class="n">data</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;url&quot;</span><span class="p">):</span>
<span class="bp">self</span><span class="o">.</span><span class="n">gateway</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">url</span><span class="si">}</span><span class="s2">/?v=</span><span class="si">{</span><span class="n">DISCORD_API_VERSION</span><span class="si">}</span><span class="s2">&amp;encoding=json&quot;</span><span class="o">.</span><span class="n">encode</span><span class="p">(</span><span class="s2">&quot;utf-8&quot;</span><span class="p">)</span>
<span class="n">useragent</span> <span class="o">=</span> <span class="n">kwargs</span><span class="o">.</span><span class="n">pop</span><span class="p">(</span><span class="s2">&quot;useragent&quot;</span><span class="p">,</span> <span class="n">DISCORD_USER_AGENT</span><span class="p">)</span>
<span class="n">headers</span> <span class="o">=</span> <span class="n">kwargs</span><span class="o">.</span><span class="n">pop</span><span class="p">(</span>
<span class="s2">&quot;headers&quot;</span><span class="p">,</span>
<span class="p">{</span>
<span class="s2">&quot;Authorization&quot;</span><span class="p">:</span> <span class="p">[</span><span class="sa">f</span><span class="s2">&quot;Bot </span><span class="si">{</span><span class="n">DISCORD_BOT_TOKEN</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">],</span>
<span class="s2">&quot;Content-Type&quot;</span><span class="p">:</span> <span class="p">[</span><span class="s2">&quot;application/json&quot;</span><span class="p">],</span>
<span class="p">},</span>
<span class="p">)</span>
<span class="n">logger</span><span class="o">.</span><span class="n">log_info</span><span class="p">(</span><span class="s2">&quot;Connecting to Discord Gateway...&quot;</span><span class="p">)</span>
<span class="n">WebSocketClientFactory</span><span class="o">.</span><span class="fm">__init__</span><span class="p">(</span>
<span class="bp">self</span><span class="p">,</span> <span class="n">url</span><span class="p">,</span> <span class="o">*</span><span class="n">args</span><span class="p">,</span> <span class="n">headers</span><span class="o">=</span><span class="n">headers</span><span class="p">,</span> <span class="n">useragent</span><span class="o">=</span><span class="n">useragent</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span>
<span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">start</span><span class="p">()</span>
<span class="k">else</span><span class="p">:</span>
<span class="n">logger</span><span class="o">.</span><span class="n">log_err</span><span class="p">(</span><span class="s2">&quot;Discord did not return a websocket URL; connection cancelled.&quot;</span><span class="p">)</span></div>
<div class="viewcode-block" id="DiscordWebsocketServerFactory.buildProtocol"><a class="viewcode-back" href="../../../../api/evennia.server.portal.discord.html#evennia.server.portal.discord.DiscordWebsocketServerFactory.buildProtocol">[docs]</a> <span class="k">def</span> <span class="nf">buildProtocol</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">addr</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> Build new instance of protocol</span>
<span class="sd"> Args:</span>
<span class="sd"> addr (str): Not used, using factory/settings data</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="k">if</span> <span class="nb">hasattr</span><span class="p">(</span><span class="n">settings</span><span class="p">,</span> <span class="s2">&quot;DISCORD_SESSION_CLASS&quot;</span><span class="p">):</span>
<span class="n">protocol_class</span> <span class="o">=</span> <span class="n">class_from_module</span><span class="p">(</span>
<span class="n">settings</span><span class="o">.</span><span class="n">DISCORD_SESSION_CLASS</span><span class="p">,</span> <span class="n">fallback</span><span class="o">=</span><span class="n">DiscordClient</span>
<span class="p">)</span>
<span class="n">protocol</span> <span class="o">=</span> <span class="n">protocol_class</span><span class="p">()</span>
<span class="k">else</span><span class="p">:</span>
<span class="n">protocol</span> <span class="o">=</span> <span class="n">DiscordClient</span><span class="p">()</span>
<span class="n">protocol</span><span class="o">.</span><span class="n">factory</span> <span class="o">=</span> <span class="bp">self</span>
<span class="n">protocol</span><span class="o">.</span><span class="n">sessionhandler</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sessionhandler</span>
<span class="k">return</span> <span class="n">protocol</span></div>
<div class="viewcode-block" id="DiscordWebsocketServerFactory.startedConnecting"><a class="viewcode-back" href="../../../../api/evennia.server.portal.discord.html#evennia.server.portal.discord.DiscordWebsocketServerFactory.startedConnecting">[docs]</a> <span class="k">def</span> <span class="nf">startedConnecting</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">connector</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> Tracks reconnections for debugging.</span>
<span class="sd"> Args:</span>
<span class="sd"> connector (Connector): Represents the connection.</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="n">logger</span><span class="o">.</span><span class="n">log_info</span><span class="p">(</span><span class="s2">&quot;Attempting connection to Discord...&quot;</span><span class="p">)</span></div>
<div class="viewcode-block" id="DiscordWebsocketServerFactory.clientConnectionFailed"><a class="viewcode-back" href="../../../../api/evennia.server.portal.discord.html#evennia.server.portal.discord.DiscordWebsocketServerFactory.clientConnectionFailed">[docs]</a> <span class="k">def</span> <span class="nf">clientConnectionFailed</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">connector</span><span class="p">,</span> <span class="n">reason</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> Called when Client failed to connect.</span>
<span class="sd"> Args:</span>
<span class="sd"> connector (Connection): Represents the connection.</span>
<span class="sd"> reason (str): The reason for the failure.</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="n">protocol</span><span class="o">.</span><span class="n">ReconnectingClientFactory</span><span class="o">.</span><span class="n">clientConnectionLost</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">connector</span><span class="p">,</span> <span class="n">reason</span><span class="p">)</span></div>
<div class="viewcode-block" id="DiscordWebsocketServerFactory.clientConnectionLost"><a class="viewcode-back" href="../../../../api/evennia.server.portal.discord.html#evennia.server.portal.discord.DiscordWebsocketServerFactory.clientConnectionLost">[docs]</a> <span class="k">def</span> <span class="nf">clientConnectionLost</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">connector</span><span class="p">,</span> <span class="n">reason</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> Called when Client loses connection.</span>
<span class="sd"> Args:</span>
<span class="sd"> connector (Connection): Represents the connection.</span>
<span class="sd"> reason (str): The reason for the failure.</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">do_retry</span> <span class="ow">and</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">bot</span><span class="p">:</span>
<span class="bp">self</span><span class="o">.</span><span class="n">retry</span><span class="p">(</span><span class="n">connector</span><span class="p">)</span></div>
<div class="viewcode-block" id="DiscordWebsocketServerFactory.reconnect"><a class="viewcode-back" href="../../../../api/evennia.server.portal.discord.html#evennia.server.portal.discord.DiscordWebsocketServerFactory.reconnect">[docs]</a> <span class="k">def</span> <span class="nf">reconnect</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> Force a reconnection of the bot protocol. This requires</span>
<span class="sd"> de-registering the session and then reattaching a new one.</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="bp">self</span><span class="o">.</span><span class="n">bot</span><span class="o">.</span><span class="n">transport</span><span class="o">.</span><span class="n">loseConnection</span><span class="p">()</span>
<span class="bp">self</span><span class="o">.</span><span class="n">sessionhandler</span><span class="o">.</span><span class="n">server_disconnect</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">bot</span><span class="p">)</span>
<span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">resume_url</span><span class="p">:</span>
<span class="bp">self</span><span class="o">.</span><span class="n">url</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">resume_url</span>
<span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">gateway</span><span class="p">:</span>
<span class="bp">self</span><span class="o">.</span><span class="n">url</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">gateway</span>
<span class="k">else</span><span class="p">:</span>
<span class="c1"># we don&#39;t know where to reconnect to! start from the beginning</span>
<span class="bp">self</span><span class="o">.</span><span class="n">get_gateway_url</span><span class="p">()</span>
<span class="k">return</span>
<span class="bp">self</span><span class="o">.</span><span class="n">start</span><span class="p">()</span></div>
<div class="viewcode-block" id="DiscordWebsocketServerFactory.start"><a class="viewcode-back" href="../../../../api/evennia.server.portal.discord.html#evennia.server.portal.discord.DiscordWebsocketServerFactory.start">[docs]</a> <span class="k">def</span> <span class="nf">start</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="s2">&quot;Connect protocol to remote server&quot;</span>
<span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">gateway</span><span class="p">:</span>
<span class="c1"># we can&#39;t actually start yet</span>
<span class="c1"># get the gateway URL from Discord</span>
<span class="bp">self</span><span class="o">.</span><span class="n">get_gateway_url</span><span class="p">()</span>
<span class="k">else</span><span class="p">:</span>
<span class="n">connectWS</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span></div></div>
<div class="viewcode-block" id="DiscordClient"><a class="viewcode-back" href="../../../../api/evennia.server.portal.discord.html#evennia.server.portal.discord.DiscordClient">[docs]</a><span class="k">class</span> <span class="nc">DiscordClient</span><span class="p">(</span><span class="n">WebSocketClientProtocol</span><span class="p">,</span> <span class="n">_BASE_SESSION_CLASS</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> Implements the grapevine client</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="n">nextHeartbeatCall</span> <span class="o">=</span> <span class="kc">None</span>
<span class="n">pending_heartbeat</span> <span class="o">=</span> <span class="kc">False</span>
<span class="n">heartbeat_interval</span> <span class="o">=</span> <span class="kc">None</span>
<span class="n">last_sequence</span> <span class="o">=</span> <span class="mi">0</span>
<span class="n">session_id</span> <span class="o">=</span> <span class="kc">None</span>
<span class="n">discord_id</span> <span class="o">=</span> <span class="kc">None</span>
<div class="viewcode-block" id="DiscordClient.__init__"><a class="viewcode-back" href="../../../../api/evennia.server.portal.discord.html#evennia.server.portal.discord.DiscordClient.__init__">[docs]</a> <span class="k">def</span> <span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="n">WebSocketClientProtocol</span><span class="o">.</span><span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span>
<span class="n">_BASE_SESSION_CLASS</span><span class="o">.</span><span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">restart_downtime</span> <span class="o">=</span> <span class="kc">None</span></div>
<div class="viewcode-block" id="DiscordClient.at_login"><a class="viewcode-back" href="../../../../api/evennia.server.portal.discord.html#evennia.server.portal.discord.DiscordClient.at_login">[docs]</a> <span class="k">def</span> <span class="nf">at_login</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="k">pass</span></div>
<div class="viewcode-block" id="DiscordClient.onOpen"><a class="viewcode-back" href="../../../../api/evennia.server.portal.discord.html#evennia.server.portal.discord.DiscordClient.onOpen">[docs]</a> <span class="k">def</span> <span class="nf">onOpen</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> Called when connection is established.</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="bp">self</span><span class="o">.</span><span class="n">restart_downtime</span> <span class="o">=</span> <span class="kc">None</span>
<span class="bp">self</span><span class="o">.</span><span class="n">restart_task</span> <span class="o">=</span> <span class="kc">None</span>
<span class="bp">self</span><span class="o">.</span><span class="n">factory</span><span class="o">.</span><span class="n">bot</span> <span class="o">=</span> <span class="bp">self</span>
<span class="bp">self</span><span class="o">.</span><span class="n">init_session</span><span class="p">(</span><span class="s2">&quot;discord&quot;</span><span class="p">,</span> <span class="s2">&quot;discord.gg&quot;</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">factory</span><span class="o">.</span><span class="n">sessionhandler</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">uid</span> <span class="o">=</span> <span class="nb">int</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">factory</span><span class="o">.</span><span class="n">uid</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">logged_in</span> <span class="o">=</span> <span class="kc">True</span>
<span class="bp">self</span><span class="o">.</span><span class="n">sessionhandler</span><span class="o">.</span><span class="n">connect</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span></div>
<div class="viewcode-block" id="DiscordClient.onMessage"><a class="viewcode-back" href="../../../../api/evennia.server.portal.discord.html#evennia.server.portal.discord.DiscordClient.onMessage">[docs]</a> <span class="k">def</span> <span class="nf">onMessage</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">payload</span><span class="p">,</span> <span class="n">isBinary</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> Callback fired when a complete WebSocket message was received.</span>
<span class="sd"> Args:</span>
<span class="sd"> payload (bytes): The WebSocket message received.</span>
<span class="sd"> isBinary (bool): Flag indicating whether payload is binary or</span>
<span class="sd"> UTF-8 encoded text.</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="k">if</span> <span class="n">isBinary</span><span class="p">:</span>
<span class="n">logger</span><span class="o">.</span><span class="n">log_info</span><span class="p">(</span><span class="s2">&quot;DISCORD: got a binary payload for some reason&quot;</span><span class="p">)</span>
<span class="k">return</span>
<span class="n">data</span> <span class="o">=</span> <span class="n">json</span><span class="o">.</span><span class="n">loads</span><span class="p">(</span><span class="nb">str</span><span class="p">(</span><span class="n">payload</span><span class="p">,</span> <span class="s2">&quot;utf-8&quot;</span><span class="p">))</span>
<span class="k">if</span> <span class="n">seqid</span> <span class="o">:=</span> <span class="n">data</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;s&quot;</span><span class="p">):</span>
<span class="bp">self</span><span class="o">.</span><span class="n">last_sequence</span> <span class="o">=</span> <span class="n">seqid</span>
<span class="c1"># not sure if that error json format is for websockets</span>
<span class="c1"># check for it just in case</span>
<span class="k">if</span> <span class="s2">&quot;errors&quot;</span> <span class="ow">in</span> <span class="n">data</span><span class="p">:</span>
<span class="bp">self</span><span class="o">.</span><span class="n">handle_error</span><span class="p">(</span><span class="n">data</span><span class="p">)</span>
<span class="k">return</span>
<span class="c1"># check for discord gateway API op codes first</span>
<span class="k">if</span> <span class="n">data</span><span class="p">[</span><span class="s2">&quot;op&quot;</span><span class="p">]</span> <span class="o">==</span> <span class="n">OP_HELLO</span><span class="p">:</span>
<span class="bp">self</span><span class="o">.</span><span class="n">interval</span> <span class="o">=</span> <span class="n">data</span><span class="p">[</span><span class="s2">&quot;d&quot;</span><span class="p">][</span><span class="s2">&quot;heartbeat_interval&quot;</span><span class="p">]</span> <span class="o">/</span> <span class="mi">1000</span> <span class="c1"># convert millisec to seconds</span>
<span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">nextHeartbeatCall</span><span class="p">:</span>
<span class="bp">self</span><span class="o">.</span><span class="n">nextHeartbeatCall</span><span class="o">.</span><span class="n">cancel</span><span class="p">()</span>
<span class="bp">self</span><span class="o">.</span><span class="n">nextHeartbeatCall</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">factory</span><span class="o">.</span><span class="n">_batched_timer</span><span class="o">.</span><span class="n">call_later</span><span class="p">(</span>
<span class="bp">self</span><span class="o">.</span><span class="n">interval</span> <span class="o">*</span> <span class="n">random</span><span class="p">(),</span>
<span class="bp">self</span><span class="o">.</span><span class="n">doHeartbeat</span><span class="p">,</span>
<span class="p">)</span>
<span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">session_id</span><span class="p">:</span>
<span class="c1"># we already have a session; try to resume instead</span>
<span class="bp">self</span><span class="o">.</span><span class="n">resume</span><span class="p">()</span>
<span class="k">else</span><span class="p">:</span>
<span class="bp">self</span><span class="o">.</span><span class="n">identify</span><span class="p">()</span>
<span class="k">elif</span> <span class="n">data</span><span class="p">[</span><span class="s2">&quot;op&quot;</span><span class="p">]</span> <span class="o">==</span> <span class="n">OP_HEARTBEAT_ACK</span><span class="p">:</span>
<span class="c1"># our last heartbeat was acknowledged, so reset the &quot;pending&quot; flag</span>
<span class="bp">self</span><span class="o">.</span><span class="n">pending_heartbeat</span> <span class="o">=</span> <span class="kc">False</span>
<span class="k">elif</span> <span class="n">data</span><span class="p">[</span><span class="s2">&quot;op&quot;</span><span class="p">]</span> <span class="o">==</span> <span class="n">OP_HEARTBEAT</span><span class="p">:</span>
<span class="c1"># Discord wants us to send a heartbeat immediately</span>
<span class="bp">self</span><span class="o">.</span><span class="n">doHeartbeat</span><span class="p">(</span><span class="n">force</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
<span class="k">elif</span> <span class="n">data</span><span class="p">[</span><span class="s2">&quot;op&quot;</span><span class="p">]</span> <span class="o">==</span> <span class="n">OP_INVALID_SESSION</span><span class="p">:</span>
<span class="c1"># Discord doesn&#39;t like our current session; reconnect for a new one</span>
<span class="n">logger</span><span class="o">.</span><span class="n">log_msg</span><span class="p">(</span><span class="s2">&quot;Discord: received &#39;Invalid Session&#39; opcode. Reconnecting.&quot;</span><span class="p">)</span>
<span class="k">if</span> <span class="n">data</span><span class="p">[</span><span class="s2">&quot;d&quot;</span><span class="p">]</span> <span class="o">==</span> <span class="kc">False</span><span class="p">:</span>
<span class="c1"># can&#39;t resume, clear existing resume data</span>
<span class="bp">self</span><span class="o">.</span><span class="n">session_id</span> <span class="o">=</span> <span class="kc">None</span>
<span class="bp">self</span><span class="o">.</span><span class="n">factory</span><span class="o">.</span><span class="n">resume_url</span> <span class="o">=</span> <span class="kc">None</span>
<span class="bp">self</span><span class="o">.</span><span class="n">factory</span><span class="o">.</span><span class="n">reconnect</span><span class="p">()</span>
<span class="k">elif</span> <span class="n">data</span><span class="p">[</span><span class="s2">&quot;op&quot;</span><span class="p">]</span> <span class="o">==</span> <span class="n">OP_RECONNECT</span><span class="p">:</span>
<span class="c1"># reconnect as requested; Discord does this regularly for server load balancing</span>
<span class="n">logger</span><span class="o">.</span><span class="n">log_msg</span><span class="p">(</span><span class="s2">&quot;Discord: received &#39;Reconnect&#39; opcode. Reconnecting.&quot;</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">factory</span><span class="o">.</span><span class="n">reconnect</span><span class="p">()</span>
<span class="k">elif</span> <span class="n">data</span><span class="p">[</span><span class="s2">&quot;op&quot;</span><span class="p">]</span> <span class="o">==</span> <span class="n">OP_DISPATCH</span><span class="p">:</span>
<span class="c1"># handle the general dispatch opcode events by type</span>
<span class="k">if</span> <span class="n">data</span><span class="p">[</span><span class="s2">&quot;t&quot;</span><span class="p">]</span> <span class="o">==</span> <span class="s2">&quot;READY&quot;</span><span class="p">:</span>
<span class="c1"># our recent identification is valid; process new session info</span>
<span class="bp">self</span><span class="o">.</span><span class="n">connection_ready</span><span class="p">(</span><span class="n">data</span><span class="p">[</span><span class="s2">&quot;d&quot;</span><span class="p">])</span>
<span class="k">else</span><span class="p">:</span>
<span class="c1"># general message, pass on to data_in</span>
<span class="bp">self</span><span class="o">.</span><span class="n">data_in</span><span class="p">(</span><span class="n">data</span><span class="o">=</span><span class="n">data</span><span class="p">)</span></div>
<div class="viewcode-block" id="DiscordClient.onClose"><a class="viewcode-back" href="../../../../api/evennia.server.portal.discord.html#evennia.server.portal.discord.DiscordClient.onClose">[docs]</a> <span class="k">def</span> <span class="nf">onClose</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">wasClean</span><span class="p">,</span> <span class="n">code</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">reason</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> This is executed when the connection is lost for whatever</span>
<span class="sd"> reason. it can also be called directly, from the disconnect</span>
<span class="sd"> method.</span>
<span class="sd"> Args:</span>
<span class="sd"> wasClean (bool): ``True`` if the WebSocket was closed cleanly.</span>
<span class="sd"> code (int or None): Close status as sent by the WebSocket peer.</span>
<span class="sd"> reason (str or None): Close reason as sent by the WebSocket peer.</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">nextHeartbeatCall</span><span class="p">:</span>
<span class="bp">self</span><span class="o">.</span><span class="n">nextHeartbeatCall</span><span class="o">.</span><span class="n">cancel</span><span class="p">()</span>
<span class="bp">self</span><span class="o">.</span><span class="n">disconnect</span><span class="p">(</span><span class="n">reason</span><span class="p">)</span>
<span class="k">if</span> <span class="n">code</span> <span class="o">&gt;=</span> <span class="mi">4000</span><span class="p">:</span>
<span class="n">logger</span><span class="o">.</span><span class="n">log_err</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Discord connection closed: </span><span class="si">{</span><span class="n">reason</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
<span class="k">else</span><span class="p">:</span>
<span class="n">logger</span><span class="o">.</span><span class="n">log_info</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Discord disconnected: </span><span class="si">{</span><span class="n">reason</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span></div>
<span class="k">def</span> <span class="nf">_send_json</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">data</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> Post JSON data to the websocket</span>
<span class="sd"> Args:</span>
<span class="sd"> data (dict): content to send.</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">sendMessage</span><span class="p">(</span><span class="n">json</span><span class="o">.</span><span class="n">dumps</span><span class="p">(</span><span class="n">data</span><span class="p">)</span><span class="o">.</span><span class="n">encode</span><span class="p">(</span><span class="s2">&quot;utf-8&quot;</span><span class="p">))</span>
<span class="k">def</span> <span class="nf">_post_json</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">url</span><span class="p">,</span> <span class="n">data</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> Post JSON data to a REST API endpoint</span>
<span class="sd"> Args:</span>
<span class="sd"> url (str) - The API path which is being posted to</span>
<span class="sd"> data (dict) - Content to be sent</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="n">url</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">DISCORD_API_BASE_URL</span><span class="si">}</span><span class="s2">/</span><span class="si">{</span><span class="n">url</span><span class="si">}</span><span class="s2">&quot;</span>
<span class="n">body</span> <span class="o">=</span> <span class="n">FileBodyProducer</span><span class="p">(</span><span class="n">BytesIO</span><span class="p">(</span><span class="n">json</span><span class="o">.</span><span class="n">dumps</span><span class="p">(</span><span class="n">data</span><span class="p">)</span><span class="o">.</span><span class="n">encode</span><span class="p">(</span><span class="s2">&quot;utf-8&quot;</span><span class="p">)))</span>
<span class="n">d</span> <span class="o">=</span> <span class="n">_AGENT</span><span class="o">.</span><span class="n">request</span><span class="p">(</span>
<span class="sa">b</span><span class="s2">&quot;POST&quot;</span><span class="p">,</span>
<span class="n">url</span><span class="o">.</span><span class="n">encode</span><span class="p">(</span><span class="s2">&quot;utf-8&quot;</span><span class="p">),</span>
<span class="n">Headers</span><span class="p">(</span>
<span class="p">{</span>
<span class="s2">&quot;User-Agent&quot;</span><span class="p">:</span> <span class="p">[</span><span class="n">DISCORD_USER_AGENT</span><span class="p">],</span>
<span class="s2">&quot;Authorization&quot;</span><span class="p">:</span> <span class="p">[</span><span class="sa">f</span><span class="s2">&quot;Bot </span><span class="si">{</span><span class="n">DISCORD_BOT_TOKEN</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">],</span>
<span class="s2">&quot;Content-Type&quot;</span><span class="p">:</span> <span class="p">[</span><span class="s2">&quot;application/json&quot;</span><span class="p">],</span>
<span class="p">}</span>
<span class="p">),</span>
<span class="n">body</span><span class="p">,</span>
<span class="p">)</span>
<span class="k">def</span> <span class="nf">cbResponse</span><span class="p">(</span><span class="n">response</span><span class="p">):</span>
<span class="k">if</span> <span class="n">response</span><span class="o">.</span><span class="n">code</span> <span class="o">==</span> <span class="mi">200</span><span class="p">:</span>
<span class="n">d</span> <span class="o">=</span> <span class="n">readBody</span><span class="p">(</span><span class="n">response</span><span class="p">)</span>
<span class="n">d</span><span class="o">.</span><span class="n">addCallback</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">post_response</span><span class="p">)</span>
<span class="k">return</span> <span class="n">d</span>
<span class="k">elif</span> <span class="n">should_retry</span><span class="p">(</span><span class="n">response</span><span class="o">.</span><span class="n">code</span><span class="p">):</span>
<span class="n">delay</span><span class="p">(</span><span class="mi">300</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_post_json</span><span class="p">,</span> <span class="n">url</span><span class="p">,</span> <span class="n">data</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">)</span>
<span class="n">d</span><span class="o">.</span><span class="n">addCallback</span><span class="p">(</span><span class="n">cbResponse</span><span class="p">)</span>
<div class="viewcode-block" id="DiscordClient.post_response"><a class="viewcode-back" href="../../../../api/evennia.server.portal.discord.html#evennia.server.portal.discord.DiscordClient.post_response">[docs]</a> <span class="k">def</span> <span class="nf">post_response</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">body</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> Process the response from sending a POST request</span>
<span class="sd"> Args:</span>
<span class="sd"> body (bytes) - The post response body</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="n">data</span> <span class="o">=</span> <span class="n">json</span><span class="o">.</span><span class="n">loads</span><span class="p">(</span><span class="n">body</span><span class="p">)</span>
<span class="k">if</span> <span class="s2">&quot;errors&quot;</span> <span class="ow">in</span> <span class="n">data</span><span class="p">:</span>
<span class="bp">self</span><span class="o">.</span><span class="n">handle_error</span><span class="p">(</span><span class="n">data</span><span class="p">)</span></div>
<div class="viewcode-block" id="DiscordClient.handle_error"><a class="viewcode-back" href="../../../../api/evennia.server.portal.discord.html#evennia.server.portal.discord.DiscordClient.handle_error">[docs]</a> <span class="k">def</span> <span class="nf">handle_error</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">data</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> General hook for processing errors.</span>
<span class="sd"> Args:</span>
<span class="sd"> data (dict) - The received error data</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="n">logger</span><span class="o">.</span><span class="n">log_err</span><span class="p">(</span><span class="nb">str</span><span class="p">(</span><span class="n">data</span><span class="p">))</span></div>
<div class="viewcode-block" id="DiscordClient.resume"><a class="viewcode-back" href="../../../../api/evennia.server.portal.discord.html#evennia.server.portal.discord.DiscordClient.resume">[docs]</a> <span class="k">def</span> <span class="nf">resume</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> Called after a reconnection to re-identify and replay missed events</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">last_sequence</span> <span class="ow">or</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">session_id</span><span class="p">:</span>
<span class="c1"># we have no known state to resume from, identify normally</span>
<span class="bp">self</span><span class="o">.</span><span class="n">identify</span><span class="p">()</span>
<span class="c1"># build a RESUME request for Discord and send it</span>
<span class="n">data</span> <span class="o">=</span> <span class="p">{</span>
<span class="s2">&quot;op&quot;</span><span class="p">:</span> <span class="n">OP_RESUME</span><span class="p">,</span>
<span class="s2">&quot;d&quot;</span><span class="p">:</span> <span class="p">{</span>
<span class="s2">&quot;token&quot;</span><span class="p">:</span> <span class="n">DISCORD_BOT_TOKEN</span><span class="p">,</span>
<span class="s2">&quot;session_id&quot;</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">session_id</span><span class="p">,</span>
<span class="s2">&quot;s&quot;</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">sequence_id</span><span class="p">,</span>
<span class="p">},</span>
<span class="p">}</span>
<span class="bp">self</span><span class="o">.</span><span class="n">_send_json</span><span class="p">(</span><span class="n">data</span><span class="p">)</span></div>
<div class="viewcode-block" id="DiscordClient.disconnect"><a class="viewcode-back" href="../../../../api/evennia.server.portal.discord.html#evennia.server.portal.discord.DiscordClient.disconnect">[docs]</a> <span class="k">def</span> <span class="nf">disconnect</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">reason</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> Generic hook for the engine to call in order to</span>
<span class="sd"> disconnect this protocol.</span>
<span class="sd"> Args:</span>
<span class="sd"> reason (str or None): Motivation for the disconnection.</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="bp">self</span><span class="o">.</span><span class="n">sessionhandler</span><span class="o">.</span><span class="n">disconnect</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">sendClose</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">CLOSE_STATUS_CODE_NORMAL</span><span class="p">,</span> <span class="n">reason</span><span class="p">)</span></div>
<div class="viewcode-block" id="DiscordClient.identify"><a class="viewcode-back" href="../../../../api/evennia.server.portal.discord.html#evennia.server.portal.discord.DiscordClient.identify">[docs]</a> <span class="k">def</span> <span class="nf">identify</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="o">*</span><span class="n">args</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> Send Discord authentication. This should be sent once heartbeats begin.</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="n">data</span> <span class="o">=</span> <span class="p">{</span>
<span class="s2">&quot;op&quot;</span><span class="p">:</span> <span class="mi">2</span><span class="p">,</span>
<span class="s2">&quot;d&quot;</span><span class="p">:</span> <span class="p">{</span>
<span class="s2">&quot;token&quot;</span><span class="p">:</span> <span class="n">DISCORD_BOT_TOKEN</span><span class="p">,</span>
<span class="s2">&quot;intents&quot;</span><span class="p">:</span> <span class="n">DISCORD_BOT_INTENTS</span><span class="p">,</span>
<span class="s2">&quot;properties&quot;</span><span class="p">:</span> <span class="p">{</span>
<span class="s2">&quot;os&quot;</span><span class="p">:</span> <span class="n">os</span><span class="o">.</span><span class="n">name</span><span class="p">,</span>
<span class="s2">&quot;browser&quot;</span><span class="p">:</span> <span class="n">DISCORD_USER_AGENT</span><span class="p">,</span>
<span class="s2">&quot;device&quot;</span><span class="p">:</span> <span class="n">DISCORD_USER_AGENT</span><span class="p">,</span>
<span class="p">},</span>
<span class="p">},</span>
<span class="p">}</span>
<span class="bp">self</span><span class="o">.</span><span class="n">_send_json</span><span class="p">(</span><span class="n">data</span><span class="p">)</span></div>
<div class="viewcode-block" id="DiscordClient.connection_ready"><a class="viewcode-back" href="../../../../api/evennia.server.portal.discord.html#evennia.server.portal.discord.DiscordClient.connection_ready">[docs]</a> <span class="k">def</span> <span class="nf">connection_ready</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">data</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> Process READY data for relevant bot info.</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="bp">self</span><span class="o">.</span><span class="n">factory</span><span class="o">.</span><span class="n">resume_url</span> <span class="o">=</span> <span class="n">data</span><span class="p">[</span><span class="s2">&quot;resume_gateway_url&quot;</span><span class="p">]</span>
<span class="bp">self</span><span class="o">.</span><span class="n">session_id</span> <span class="o">=</span> <span class="n">data</span><span class="p">[</span><span class="s2">&quot;session_id&quot;</span><span class="p">]</span>
<span class="bp">self</span><span class="o">.</span><span class="n">discord_id</span> <span class="o">=</span> <span class="n">data</span><span class="p">[</span><span class="s2">&quot;user&quot;</span><span class="p">][</span><span class="s2">&quot;id&quot;</span><span class="p">]</span></div>
<div class="viewcode-block" id="DiscordClient.doHeartbeat"><a class="viewcode-back" href="../../../../api/evennia.server.portal.discord.html#evennia.server.portal.discord.DiscordClient.doHeartbeat">[docs]</a> <span class="k">def</span> <span class="nf">doHeartbeat</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="o">*</span><span class="n">args</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> Send heartbeat to Discord.</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">pending_heartbeat</span> <span class="ow">or</span> <span class="n">kwargs</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;force&quot;</span><span class="p">):</span>
<span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">nextHeartbeatCall</span><span class="p">:</span>
<span class="bp">self</span><span class="o">.</span><span class="n">nextHeartbeatCall</span><span class="o">.</span><span class="n">cancel</span><span class="p">()</span>
<span class="c1"># send the heartbeat</span>
<span class="n">data</span> <span class="o">=</span> <span class="p">{</span><span class="s2">&quot;op&quot;</span><span class="p">:</span> <span class="mi">1</span><span class="p">,</span> <span class="s2">&quot;d&quot;</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">last_sequence</span><span class="p">}</span>
<span class="bp">self</span><span class="o">.</span><span class="n">_send_json</span><span class="p">(</span><span class="n">data</span><span class="p">)</span>
<span class="c1"># track that we sent a heartbeat, in case we don&#39;t receive an ACK</span>
<span class="bp">self</span><span class="o">.</span><span class="n">pending_heartbeat</span> <span class="o">=</span> <span class="kc">True</span>
<span class="bp">self</span><span class="o">.</span><span class="n">nextHeartbeatCall</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">factory</span><span class="o">.</span><span class="n">_batched_timer</span><span class="o">.</span><span class="n">call_later</span><span class="p">(</span>
<span class="bp">self</span><span class="o">.</span><span class="n">interval</span><span class="p">,</span>
<span class="bp">self</span><span class="o">.</span><span class="n">doHeartbeat</span><span class="p">,</span>
<span class="p">)</span>
<span class="k">else</span><span class="p">:</span>
<span class="c1"># we didn&#39;t get a response since the last heartbeat; reconnect</span>
<span class="bp">self</span><span class="o">.</span><span class="n">factory</span><span class="o">.</span><span class="n">reconnect</span><span class="p">()</span></div>
<div class="viewcode-block" id="DiscordClient.send_channel"><a class="viewcode-back" href="../../../../api/evennia.server.portal.discord.html#evennia.server.portal.discord.DiscordClient.send_channel">[docs]</a> <span class="k">def</span> <span class="nf">send_channel</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">text</span><span class="p">,</span> <span class="n">channel_id</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> Send a message from an Evennia channel to a Discord channel.</span>
<span class="sd"> Use with session.msg(channel=(message, channel, sender))</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="n">data</span> <span class="o">=</span> <span class="p">{</span><span class="s2">&quot;content&quot;</span><span class="p">:</span> <span class="n">text</span><span class="p">}</span>
<span class="n">data</span><span class="o">.</span><span class="n">update</span><span class="p">(</span><span class="n">kwargs</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">_post_json</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;channels/</span><span class="si">{</span><span class="n">channel_id</span><span class="si">}</span><span class="s2">/messages&quot;</span><span class="p">,</span> <span class="n">data</span><span class="p">)</span></div>
<div class="viewcode-block" id="DiscordClient.send_default"><a class="viewcode-back" href="../../../../api/evennia.server.portal.discord.html#evennia.server.portal.discord.DiscordClient.send_default">[docs]</a> <span class="k">def</span> <span class="nf">send_default</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="o">*</span><span class="n">args</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> Ignore other outputfuncs</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="k">pass</span></div>
<div class="viewcode-block" id="DiscordClient.data_in"><a class="viewcode-back" href="../../../../api/evennia.server.portal.discord.html#evennia.server.portal.discord.DiscordClient.data_in">[docs]</a> <span class="k">def</span> <span class="nf">data_in</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">data</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> Process incoming data from Discord and sent to the Evennia server</span>
<span class="sd"> Args:</span>
<span class="sd"> data (dict): Converted json data.</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="n">action_type</span> <span class="o">=</span> <span class="n">data</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;t&quot;</span><span class="p">,</span> <span class="s2">&quot;UNKNOWN&quot;</span><span class="p">)</span>
<span class="k">if</span> <span class="n">action_type</span> <span class="o">==</span> <span class="s2">&quot;MESSAGE_CREATE&quot;</span><span class="p">:</span>
<span class="c1"># someone posted a message on Discord that the bot can see</span>
<span class="n">data</span> <span class="o">=</span> <span class="n">data</span><span class="p">[</span><span class="s2">&quot;d&quot;</span><span class="p">]</span>
<span class="k">if</span> <span class="n">data</span><span class="p">[</span><span class="s2">&quot;author&quot;</span><span class="p">][</span><span class="s2">&quot;id&quot;</span><span class="p">]</span> <span class="o">==</span> <span class="bp">self</span><span class="o">.</span><span class="n">discord_id</span><span class="p">:</span>
<span class="c1"># it&#39;s by the bot itself! disregard</span>
<span class="k">return</span>
<span class="n">message</span> <span class="o">=</span> <span class="n">data</span><span class="p">[</span><span class="s2">&quot;content&quot;</span><span class="p">]</span>
<span class="n">channel_id</span> <span class="o">=</span> <span class="n">data</span><span class="p">[</span><span class="s2">&quot;channel_id&quot;</span><span class="p">]</span>
<span class="n">keywords</span> <span class="o">=</span> <span class="p">{</span><span class="s2">&quot;channel_id&quot;</span><span class="p">:</span> <span class="n">channel_id</span><span class="p">}</span>
<span class="k">if</span> <span class="s2">&quot;guild_id&quot;</span> <span class="ow">in</span> <span class="n">data</span><span class="p">:</span>
<span class="c1"># message received to a Discord channel</span>
<span class="n">keywords</span><span class="p">[</span><span class="s2">&quot;type&quot;</span><span class="p">]</span> <span class="o">=</span> <span class="s2">&quot;channel&quot;</span>
<span class="n">author</span> <span class="o">=</span> <span class="n">data</span><span class="p">[</span><span class="s2">&quot;member&quot;</span><span class="p">][</span><span class="s2">&quot;nick&quot;</span><span class="p">]</span> <span class="ow">or</span> <span class="n">data</span><span class="p">[</span><span class="s2">&quot;author&quot;</span><span class="p">][</span><span class="s2">&quot;username&quot;</span><span class="p">]</span>
<span class="n">author_id</span> <span class="o">=</span> <span class="n">data</span><span class="p">[</span><span class="s2">&quot;author&quot;</span><span class="p">][</span><span class="s2">&quot;id&quot;</span><span class="p">]</span>
<span class="n">keywords</span><span class="p">[</span><span class="s2">&quot;sender&quot;</span><span class="p">]</span> <span class="o">=</span> <span class="p">(</span><span class="n">author_id</span><span class="p">,</span> <span class="n">author</span><span class="p">)</span>
<span class="n">keywords</span><span class="p">[</span><span class="s2">&quot;guild_id&quot;</span><span class="p">]</span> <span class="o">=</span> <span class="n">data</span><span class="p">[</span><span class="s2">&quot;guild_id&quot;</span><span class="p">]</span>
<span class="k">else</span><span class="p">:</span>
<span class="c1"># message sent directly to the bot account via DM</span>
<span class="n">keywords</span><span class="p">[</span><span class="s2">&quot;type&quot;</span><span class="p">]</span> <span class="o">=</span> <span class="s2">&quot;direct&quot;</span>
<span class="n">author</span> <span class="o">=</span> <span class="n">data</span><span class="p">[</span><span class="s2">&quot;author&quot;</span><span class="p">][</span><span class="s2">&quot;username&quot;</span><span class="p">]</span>
<span class="n">author_id</span> <span class="o">=</span> <span class="n">data</span><span class="p">[</span><span class="s2">&quot;author&quot;</span><span class="p">][</span><span class="s2">&quot;id&quot;</span><span class="p">]</span>
<span class="n">keywords</span><span class="p">[</span><span class="s2">&quot;sender&quot;</span><span class="p">]</span> <span class="o">=</span> <span class="p">(</span><span class="n">author_id</span><span class="p">,</span> <span class="n">author</span><span class="p">)</span>
<span class="c1"># pass the processed data to the server</span>
<span class="bp">self</span><span class="o">.</span><span class="n">sessionhandler</span><span class="o">.</span><span class="n">data_in</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">bot_data_in</span><span class="o">=</span><span class="p">(</span><span class="n">message</span><span class="p">,</span> <span class="n">keywords</span><span class="p">))</span>
<span class="k">elif</span> <span class="n">action_type</span> <span class="ow">in</span> <span class="p">(</span><span class="s2">&quot;GUILD_CREATE&quot;</span><span class="p">,</span> <span class="s2">&quot;GUILD_UPDATE&quot;</span><span class="p">):</span>
<span class="c1"># we received the current status of a guild the bot is on; process relevant info</span>
<span class="n">data</span> <span class="o">=</span> <span class="n">data</span><span class="p">[</span><span class="s2">&quot;d&quot;</span><span class="p">]</span>
<span class="n">keywords</span> <span class="o">=</span> <span class="p">{</span><span class="s2">&quot;type&quot;</span><span class="p">:</span> <span class="s2">&quot;guild&quot;</span><span class="p">,</span> <span class="s2">&quot;guild_id&quot;</span><span class="p">:</span> <span class="n">data</span><span class="p">[</span><span class="s2">&quot;id&quot;</span><span class="p">],</span> <span class="s2">&quot;guild_name&quot;</span><span class="p">:</span> <span class="n">data</span><span class="p">[</span><span class="s2">&quot;name&quot;</span><span class="p">]}</span>
<span class="n">keywords</span><span class="p">[</span><span class="s2">&quot;channels&quot;</span><span class="p">]</span> <span class="o">=</span> <span class="p">{</span>
<span class="n">chan</span><span class="p">[</span><span class="s2">&quot;id&quot;</span><span class="p">]:</span> <span class="p">{</span><span class="s2">&quot;name&quot;</span><span class="p">:</span> <span class="n">chan</span><span class="p">[</span><span class="s2">&quot;name&quot;</span><span class="p">],</span> <span class="s2">&quot;guild&quot;</span><span class="p">:</span> <span class="n">data</span><span class="p">[</span><span class="s2">&quot;name&quot;</span><span class="p">]}</span>
<span class="k">for</span> <span class="n">chan</span> <span class="ow">in</span> <span class="n">data</span><span class="p">[</span><span class="s2">&quot;channels&quot;</span><span class="p">]</span>
<span class="k">if</span> <span class="n">chan</span><span class="p">[</span><span class="s2">&quot;type&quot;</span><span class="p">]</span> <span class="o">==</span> <span class="mi">0</span>
<span class="p">}</span>
<span class="c1"># send the possibly-updated guild and channel data to the server</span>
<span class="bp">self</span><span class="o">.</span><span class="n">sessionhandler</span><span class="o">.</span><span class="n">data_in</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">bot_data_in</span><span class="o">=</span><span class="p">(</span><span class="s2">&quot;&quot;</span><span class="p">,</span> <span class="n">keywords</span><span class="p">))</span>
<span class="k">elif</span> <span class="s2">&quot;DELETE&quot;</span> <span class="ow">in</span> <span class="n">action_type</span><span class="p">:</span>
<span class="c1"># deletes should possibly be handled separately to check for channel removal</span>
<span class="c1"># for now, just ignore</span>
<span class="k">pass</span>
<span class="k">else</span><span class="p">:</span>
<span class="c1"># send the data for any other action types on to the bot as-is for optional server-side handling</span>
<span class="n">keywords</span> <span class="o">=</span> <span class="p">{</span><span class="s2">&quot;type&quot;</span><span class="p">:</span> <span class="n">action_type</span><span class="p">}</span>
<span class="n">keywords</span><span class="o">.</span><span class="n">update</span><span class="p">(</span><span class="n">data</span><span class="p">[</span><span class="s2">&quot;d&quot;</span><span class="p">])</span>
<span class="bp">self</span><span class="o">.</span><span class="n">sessionhandler</span><span class="o">.</span><span class="n">data_in</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">bot_data_in</span><span class="o">=</span><span class="p">(</span><span class="s2">&quot;&quot;</span><span class="p">,</span> <span class="n">keywords</span><span class="p">))</span></div></div>
</pre></div>
</div>
</div>
</div>
</div>
<div class="related" role="navigation" aria-label="related navigation">
<h3>Navigation</h3>
<ul>
<li class="right" style="margin-right: 10px">
<a href="../../../../genindex.html" title="General Index"
>index</a></li>
<li class="right" >
<a href="../../../../py-modindex.html" title="Python Module Index"
>modules</a> |</li>
<li class="nav-item nav-item-0"><a href="../../../../index.html">Evennia 1.0-dev</a> &#187;</li>
<li class="nav-item nav-item-1"><a href="../../../index.html" >Module code</a> &#187;</li>
<li class="nav-item nav-item-2"><a href="../../../evennia.html" >evennia</a> &#187;</li>
<li class="nav-item nav-item-this"><a href="">evennia.server.portal.discord</a></li>
</ul>
<div class="develop">develop branch</div>
</div>
<div class="footer" role="contentinfo">
&#169; Copyright 2022, The Evennia developer community.
Created using <a href="https://www.sphinx-doc.org/">Sphinx</a> 3.2.1.
</div>
</body>
</html>

View file

@ -86,6 +86,7 @@
<span class="kn">from</span> <span class="nn">django.db.models</span> <span class="kn">import</span> <span class="n">Count</span><span class="p">,</span> <span class="n">ExpressionWrapper</span><span class="p">,</span> <span class="n">F</span><span class="p">,</span> <span class="n">FloatField</span><span class="p">,</span> <span class="n">Q</span>
<span class="kn">from</span> <span class="nn">django.db.models.functions</span> <span class="kn">import</span> <span class="n">Cast</span>
<span class="kn">from</span> <span class="nn">evennia.typeclasses.attributes</span> <span class="kn">import</span> <span class="n">Attribute</span>
<span class="kn">from</span> <span class="nn">evennia.typeclasses.tags</span> <span class="kn">import</span> <span class="n">Tag</span>
<span class="kn">from</span> <span class="nn">evennia.utils</span> <span class="kn">import</span> <span class="n">idmapper</span>

View file

@ -275,6 +275,7 @@
<li><a href="evennia/server/models.html">evennia.server.models</a></li>
<li><a href="evennia/server/portal/amp.html">evennia.server.portal.amp</a></li>
<li><a href="evennia/server/portal/amp_server.html">evennia.server.portal.amp_server</a></li>
<li><a href="evennia/server/portal/discord.html">evennia.server.portal.discord</a></li>
<li><a href="evennia/server/portal/grapevine.html">evennia.server.portal.grapevine</a></li>
<li><a href="evennia/server/portal/irc.html">evennia.server.portal.irc</a></li>
<li><a href="evennia/server/portal/mccp.html">evennia.server.portal.mccp</a></li>

View file

@ -220,6 +220,7 @@ Increase requirements: Django 4.1+, Twisted 22.10+ Python 3.9, 3.10, 3.11. Post
- `EvTable` now supports passing `EvColumn`s as a list directly, (`EvTable(table=[colA,colB])`)
- Add `tags=` search criterion to `DefaultObject.search`.
- Add `AT_EXIT_TRAVERSE` signal, firing when an exit is traversed.
- Add integration between Evennia and Discord channels (PR by Inspector Cararacal)
## Evennia 0.9.5

View file

@ -26,8 +26,9 @@ Updating-Evennia
Settings
Settings-Default
Choosing-a-Database
Channels-to-IRC
Channels-to-Discord
Channels-to-Grapevine
Channels-to-IRC
Channels-to-RSS
Channels-to-Twitter
```

View file

@ -0,0 +1,10 @@
```{eval-rst}
evennia.server.portal.discord
====================================
.. automodule:: evennia.server.portal.discord
:members:
:undoc-members:
:show-inheritance:
```

View file

@ -14,6 +14,7 @@ evennia.server.portal
evennia.server.portal.amp
evennia.server.portal.amp_server
evennia.server.portal.discord
evennia.server.portal.grapevine
evennia.server.portal.irc
evennia.server.portal.mccp

View file

@ -571,6 +571,7 @@
<li class="toctree-l3"><a class="reference internal" href="evennia.server.portal.html">evennia.server.portal</a><ul>
<li class="toctree-l4"><a class="reference internal" href="evennia.server.portal.amp.html">evennia.server.portal.amp</a></li>
<li class="toctree-l4"><a class="reference internal" href="evennia.server.portal.amp_server.html">evennia.server.portal.amp_server</a></li>
<li class="toctree-l4"><a class="reference internal" href="evennia.server.portal.discord.html">evennia.server.portal.discord</a></li>
<li class="toctree-l4"><a class="reference internal" href="evennia.server.portal.grapevine.html">evennia.server.portal.grapevine</a></li>
<li class="toctree-l4"><a class="reference internal" href="evennia.server.portal.irc.html">evennia.server.portal.irc</a></li>
<li class="toctree-l4"><a class="reference internal" href="evennia.server.portal.mccp.html">evennia.server.portal.mccp</a></li>

View file

@ -510,8 +510,9 @@ triggered by the bot_data_in Inputfunc.</p>
<dt id="evennia.accounts.bots.DiscordBot">
<em class="property">class </em><code class="sig-prename descclassname">evennia.accounts.bots.</code><code class="sig-name descname">DiscordBot</code><span class="sig-paren">(</span><em class="sig-param"><span class="o">*</span><span class="n">args</span></em>, <em class="sig-param"><span class="o">**</span><span class="n">kwargs</span></em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/accounts/bots.html#DiscordBot"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#evennia.accounts.bots.DiscordBot" title="Permalink to this definition"></a></dt>
<dd><p>Bases: <a class="reference internal" href="#evennia.accounts.bots.Bot" title="evennia.accounts.bots.Bot"><code class="xref py py-class docutils literal notranslate"><span class="pre">evennia.accounts.bots.Bot</span></code></a></p>
<p>Discord bot relay. You will need to set up your own bot (<a class="reference external" href="https://discord.com/developers/applications">https://discord.com/developers/applications</a>)
and add the bot token as <strong>DISCORD_BOT_TOKEN</strong> to <strong>secret_settings.py</strong> to use</p>
<p>Discord bot relay. You will need to set up your own bot
(<a class="reference external" href="https://discord.com/developers/applications">https://discord.com/developers/applications</a>) and add the bot token as <strong>DISCORD_BOT_TOKEN</strong> to
<strong>secret_settings.py</strong> to use</p>
<dl class="py attribute">
<dt id="evennia.accounts.bots.DiscordBot.factory_path">
<code class="sig-name descname">factory_path</code><em class="property"> = 'evennia.server.portal.discord.DiscordWebsocketServerFactory'</em><a class="headerlink" href="#evennia.accounts.bots.DiscordBot.factory_path" title="Permalink to this definition"></a></dt>
@ -568,7 +569,7 @@ and add the bot token as <strong>DISCORD_BOT_TOKEN</strong> to <strong>secret_se
</ul>
</dd>
<dt class="field-even">Keyword Arguments</dt>
<dd class="field-even"><p><strong>kwargs</strong> (<em>optional</em>) </p>
<dd class="field-even"><p><strong>**kwargs</strong> (<em>optional</em>) </p>
</dd>
</dl>
</dd></dl>
@ -576,7 +577,8 @@ and add the bot token as <strong>DISCORD_BOT_TOKEN</strong> to <strong>secret_se
<dl class="py method">
<dt id="evennia.accounts.bots.DiscordBot.relay_to_channel">
<code class="sig-name descname">relay_to_channel</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">message</span></em>, <em class="sig-param"><span class="n">to_channel</span></em>, <em class="sig-param"><span class="n">sender</span><span class="o">=</span><span class="default_value">None</span></em>, <em class="sig-param"><span class="n">from_channel</span><span class="o">=</span><span class="default_value">None</span></em>, <em class="sig-param"><span class="n">from_server</span><span class="o">=</span><span class="default_value">None</span></em>, <em class="sig-param"><span class="o">**</span><span class="n">kwargs</span></em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/accounts/bots.html#DiscordBot.relay_to_channel"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#evennia.accounts.bots.DiscordBot.relay_to_channel" title="Permalink to this definition"></a></dt>
<dd><p>Formats and sends a Discord -&gt; Evennia message. Called when the Discord bot receives a channel message on Discord.</p>
<dd><p>Formats and sends a Discord -&gt; Evennia message. Called when the Discord bot receives a
channel message on Discord.</p>
<dl class="field-list simple">
<dt class="field-odd">Parameters</dt>
<dd class="field-odd"><ul class="simple">
@ -586,10 +588,10 @@ and add the bot token as <strong>DISCORD_BOT_TOKEN</strong> to <strong>secret_se
</dd>
<dt class="field-even">Keyword Arguments</dt>
<dd class="field-even"><ul class="simple">
<li><p><strong>sender</strong> (<em>tuple</em><em>) </em><em>- The Discord info for the sender in the form</em><em> (</em><a class="reference internal" href="evennia.accounts.models.html#evennia.accounts.models.AccountDB.id" title="evennia.accounts.models.AccountDB.id"><em>id</em></a><em>, </em><a class="reference internal" href="evennia.server.portal.irc.html#evennia.server.portal.irc.IRCBot.nickname" title="evennia.server.portal.irc.IRCBot.nickname"><em>nickname</em></a>) </p></li>
<li><p><strong>sender</strong> (tuple) - The Discord info for the sender in the form <a href="#id1"><span class="problematic" id="id2">**</span></a>(id, nickname) </p></li>
<li><p><strong>from_channel</strong> (<em>str</em>) </p></li>
<li><p><strong>from_server</strong> (<em>str</em>) </p></li>
<li><p><strong>- Any additional keywords. Unused by default</strong><strong>, </strong><strong>but available for adding additional flags</strong><strong> or </strong><strong>parameters.</strong> (<em>kwargs</em>) </p></li>
<li><p><strong>- Any additional keywords. Unused by default</strong><strong>, </strong><strong>but available for adding additional</strong> (<em>kwargs</em>) flags or parameters.</p></li>
</ul>
</dd>
</dl>

View file

@ -133,7 +133,7 @@ method. Otherwise all text will be returned to all connected sessions.</p>
<dl class="py attribute">
<dt id="evennia.commands.default.account.CmdOOCLook.aliases">
<code class="sig-name descname">aliases</code><em class="property"> = ['l', 'ls']</em><a class="headerlink" href="#evennia.commands.default.account.CmdOOCLook.aliases" title="Permalink to this definition"></a></dt>
<code class="sig-name descname">aliases</code><em class="property"> = ['ls', 'l']</em><a class="headerlink" href="#evennia.commands.default.account.CmdOOCLook.aliases" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
<dl class="py attribute">
@ -164,7 +164,7 @@ method. Otherwise all text will be returned to all connected sessions.</p>
<dl class="py attribute">
<dt id="evennia.commands.default.account.CmdOOCLook.search_index_entry">
<code class="sig-name descname">search_index_entry</code><em class="property"> = {'aliases': 'l ls', 'category': 'general', 'key': 'look', 'no_prefix': ' l ls', 'tags': '', 'text': '\n look while out-of-character\n\n Usage:\n look\n\n Look in the ooc state.\n '}</em><a class="headerlink" href="#evennia.commands.default.account.CmdOOCLook.search_index_entry" title="Permalink to this definition"></a></dt>
<code class="sig-name descname">search_index_entry</code><em class="property"> = {'aliases': 'ls l', 'category': 'general', 'key': 'look', 'no_prefix': ' ls l', 'tags': '', 'text': '\n look while out-of-character\n\n Usage:\n look\n\n Look in the ooc state.\n '}</em><a class="headerlink" href="#evennia.commands.default.account.CmdOOCLook.search_index_entry" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
</dd></dl>

View file

@ -317,7 +317,7 @@ to accounts respectively.</p>
<dl class="py attribute">
<dt id="evennia.commands.default.admin.CmdEmit.aliases">
<code class="sig-name descname">aliases</code><em class="property"> = ['remit', 'pemit']</em><a class="headerlink" href="#evennia.commands.default.admin.CmdEmit.aliases" title="Permalink to this definition"></a></dt>
<code class="sig-name descname">aliases</code><em class="property"> = ['pemit', 'remit']</em><a class="headerlink" href="#evennia.commands.default.admin.CmdEmit.aliases" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
<dl class="py attribute">
@ -348,7 +348,7 @@ to accounts respectively.</p>
<dl class="py attribute">
<dt id="evennia.commands.default.admin.CmdEmit.search_index_entry">
<code class="sig-name descname">search_index_entry</code><em class="property"> = {'aliases': 'remit pemit', 'category': 'admin', 'key': 'emit', 'no_prefix': ' remit pemit', 'tags': '', 'text': '\n admin command for emitting message to multiple objects\n\n Usage:\n emit[/switches] [&lt;obj&gt;, &lt;obj&gt;, ... =] &lt;message&gt;\n remit [&lt;obj&gt;, &lt;obj&gt;, ... =] &lt;message&gt;\n pemit [&lt;obj&gt;, &lt;obj&gt;, ... =] &lt;message&gt;\n\n Switches:\n room - limit emits to rooms only (default)\n accounts - limit emits to accounts only\n contents - send to the contents of matched objects too\n\n Emits a message to the selected objects or to\n your immediate surroundings. If the object is a room,\n send to its contents. remit and pemit are just\n limited forms of emit, for sending to rooms and\n to accounts respectively.\n '}</em><a class="headerlink" href="#evennia.commands.default.admin.CmdEmit.search_index_entry" title="Permalink to this definition"></a></dt>
<code class="sig-name descname">search_index_entry</code><em class="property"> = {'aliases': 'pemit remit', 'category': 'admin', 'key': 'emit', 'no_prefix': ' pemit remit', 'tags': '', 'text': '\n admin command for emitting message to multiple objects\n\n Usage:\n emit[/switches] [&lt;obj&gt;, &lt;obj&gt;, ... =] &lt;message&gt;\n remit [&lt;obj&gt;, &lt;obj&gt;, ... =] &lt;message&gt;\n pemit [&lt;obj&gt;, &lt;obj&gt;, ... =] &lt;message&gt;\n\n Switches:\n room - limit emits to rooms only (default)\n accounts - limit emits to accounts only\n contents - send to the contents of matched objects too\n\n Emits a message to the selected objects or to\n your immediate surroundings. If the object is a room,\n send to its contents. remit and pemit are just\n limited forms of emit, for sending to rooms and\n to accounts respectively.\n '}</em><a class="headerlink" href="#evennia.commands.default.admin.CmdEmit.search_index_entry" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
</dd></dl>

View file

@ -138,7 +138,7 @@ skipping, reloading etc.</p>
<dl class="py attribute">
<dt id="evennia.commands.default.batchprocess.CmdBatchCommands.aliases">
<code class="sig-name descname">aliases</code><em class="property"> = ['batchcmd', 'batchcommand']</em><a class="headerlink" href="#evennia.commands.default.batchprocess.CmdBatchCommands.aliases" title="Permalink to this definition"></a></dt>
<code class="sig-name descname">aliases</code><em class="property"> = ['batchcommand', 'batchcmd']</em><a class="headerlink" href="#evennia.commands.default.batchprocess.CmdBatchCommands.aliases" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
<dl class="py attribute">
@ -169,7 +169,7 @@ skipping, reloading etc.</p>
<dl class="py attribute">
<dt id="evennia.commands.default.batchprocess.CmdBatchCommands.search_index_entry">
<code class="sig-name descname">search_index_entry</code><em class="property"> = {'aliases': 'batchcmd batchcommand', 'category': 'building', 'key': 'batchcommands', 'no_prefix': ' batchcmd batchcommand', 'tags': '', 'text': '\n build from batch-command file\n\n Usage:\n batchcommands[/interactive] &lt;python.path.to.file&gt;\n\n Switch:\n interactive - this mode will offer more control when\n executing the batch file, like stepping,\n skipping, reloading etc.\n\n Runs batches of commands from a batch-cmd text file (*.ev).\n\n '}</em><a class="headerlink" href="#evennia.commands.default.batchprocess.CmdBatchCommands.search_index_entry" title="Permalink to this definition"></a></dt>
<code class="sig-name descname">search_index_entry</code><em class="property"> = {'aliases': 'batchcommand batchcmd', 'category': 'building', 'key': 'batchcommands', 'no_prefix': ' batchcommand batchcmd', 'tags': '', 'text': '\n build from batch-command file\n\n Usage:\n batchcommands[/interactive] &lt;python.path.to.file&gt;\n\n Switch:\n interactive - this mode will offer more control when\n executing the batch file, like stepping,\n skipping, reloading etc.\n\n Runs batches of commands from a batch-cmd text file (*.ev).\n\n '}</em><a class="headerlink" href="#evennia.commands.default.batchprocess.CmdBatchCommands.search_index_entry" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
</dd></dl>

View file

@ -1345,7 +1345,7 @@ server settings.</p>
<dl class="py attribute">
<dt id="evennia.commands.default.building.CmdTypeclass.aliases">
<code class="sig-name descname">aliases</code><em class="property"> = ['&#64;type', '&#64;update', '&#64;parent', '&#64;typeclasses', '&#64;swap']</em><a class="headerlink" href="#evennia.commands.default.building.CmdTypeclass.aliases" title="Permalink to this definition"></a></dt>
<code class="sig-name descname">aliases</code><em class="property"> = ['&#64;update', '&#64;type', '&#64;swap', '&#64;parent', '&#64;typeclasses']</em><a class="headerlink" href="#evennia.commands.default.building.CmdTypeclass.aliases" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
<dl class="py attribute">
@ -1376,7 +1376,7 @@ server settings.</p>
<dl class="py attribute">
<dt id="evennia.commands.default.building.CmdTypeclass.search_index_entry">
<code class="sig-name descname">search_index_entry</code><em class="property"> = {'aliases': '&#64;type &#64;update &#64;parent &#64;typeclasses &#64;swap', 'category': 'building', 'key': '&#64;typeclass', 'no_prefix': 'typeclass type update parent typeclasses swap', 'tags': '', 'text': &quot;\n set or change an object's typeclass\n\n Usage:\n typeclass[/switch] &lt;object&gt; [= typeclass.path]\n typeclass/prototype &lt;object&gt; = prototype_key\n\n typeclasses or typeclass/list/show [typeclass.path]\n swap - this is a shorthand for using /force/reset flags.\n update - this is a shorthand for using the /force/reload flag.\n\n Switch:\n show, examine - display the current typeclass of object (default) or, if\n given a typeclass path, show the docstring of that typeclass.\n update - *only* re-run at_object_creation on this object\n meaning locks or other properties set later may remain.\n reset - clean out *all* the attributes and properties on the\n object - basically making this a new clean object. This will also\n reset cmdsets!\n force - change to the typeclass also if the object\n already has a typeclass of the same name.\n list - show available typeclasses. Only typeclasses in modules actually\n imported or used from somewhere in the code will show up here\n (those typeclasses are still available if you know the path)\n prototype - clean and overwrite the object with the specified\n prototype key - effectively making a whole new object.\n\n Example:\n type button = examples.red_button.RedButton\n type/prototype button=a red button\n\n If the typeclass_path is not given, the current object's typeclass is\n assumed.\n\n View or set an object's typeclass. If setting, the creation hooks of the\n new typeclass will be run on the object. If you have clashing properties on\n the old class, use /reset. By default you are protected from changing to a\n typeclass of the same name as the one you already have - use /force to\n override this protection.\n\n The given typeclass must be identified by its location using python\n dot-notation pointing to the correct module and class. If no typeclass is\n given (or a wrong typeclass is given). Errors in the path or new typeclass\n will lead to the old typeclass being kept. The location of the typeclass\n module is searched from the default typeclass directory, as defined in the\n server settings.\n\n &quot;}</em><a class="headerlink" href="#evennia.commands.default.building.CmdTypeclass.search_index_entry" title="Permalink to this definition"></a></dt>
<code class="sig-name descname">search_index_entry</code><em class="property"> = {'aliases': '&#64;update &#64;type &#64;swap &#64;parent &#64;typeclasses', 'category': 'building', 'key': '&#64;typeclass', 'no_prefix': 'typeclass update type swap parent typeclasses', 'tags': '', 'text': &quot;\n set or change an object's typeclass\n\n Usage:\n typeclass[/switch] &lt;object&gt; [= typeclass.path]\n typeclass/prototype &lt;object&gt; = prototype_key\n\n typeclasses or typeclass/list/show [typeclass.path]\n swap - this is a shorthand for using /force/reset flags.\n update - this is a shorthand for using the /force/reload flag.\n\n Switch:\n show, examine - display the current typeclass of object (default) or, if\n given a typeclass path, show the docstring of that typeclass.\n update - *only* re-run at_object_creation on this object\n meaning locks or other properties set later may remain.\n reset - clean out *all* the attributes and properties on the\n object - basically making this a new clean object. This will also\n reset cmdsets!\n force - change to the typeclass also if the object\n already has a typeclass of the same name.\n list - show available typeclasses. Only typeclasses in modules actually\n imported or used from somewhere in the code will show up here\n (those typeclasses are still available if you know the path)\n prototype - clean and overwrite the object with the specified\n prototype key - effectively making a whole new object.\n\n Example:\n type button = examples.red_button.RedButton\n type/prototype button=a red button\n\n If the typeclass_path is not given, the current object's typeclass is\n assumed.\n\n View or set an object's typeclass. If setting, the creation hooks of the\n new typeclass will be run on the object. If you have clashing properties on\n the old class, use /reset. By default you are protected from changing to a\n typeclass of the same name as the one you already have - use /force to\n override this protection.\n\n The given typeclass must be identified by its location using python\n dot-notation pointing to the correct module and class. If no typeclass is\n given (or a wrong typeclass is given). Errors in the path or new typeclass\n will lead to the old typeclass being kept. The location of the typeclass\n module is searched from the default typeclass directory, as defined in the\n server settings.\n\n &quot;}</em><a class="headerlink" href="#evennia.commands.default.building.CmdTypeclass.search_index_entry" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
</dd></dl>
@ -1531,7 +1531,7 @@ If object is not specified, the current location is examined.</p>
<dl class="py attribute">
<dt id="evennia.commands.default.building.CmdExamine.aliases">
<code class="sig-name descname">aliases</code><em class="property"> = ['&#64;exam', '&#64;ex']</em><a class="headerlink" href="#evennia.commands.default.building.CmdExamine.aliases" title="Permalink to this definition"></a></dt>
<code class="sig-name descname">aliases</code><em class="property"> = ['&#64;ex', '&#64;exam']</em><a class="headerlink" href="#evennia.commands.default.building.CmdExamine.aliases" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
<dl class="py attribute">
@ -1799,7 +1799,7 @@ the cases, see the module doc.</p>
<dl class="py attribute">
<dt id="evennia.commands.default.building.CmdExamine.search_index_entry">
<code class="sig-name descname">search_index_entry</code><em class="property"> = {'aliases': '&#64;exam &#64;ex', 'category': 'building', 'key': '&#64;examine', 'no_prefix': 'examine exam ex', 'tags': '', 'text': '\n get detailed information about an object\n\n Usage:\n examine [&lt;object&gt;[/attrname]]\n examine [*&lt;account&gt;[/attrname]]\n\n Switch:\n account - examine an Account (same as adding *)\n object - examine an Object (useful when OOC)\n script - examine a Script\n channel - examine a Channel\n\n The examine command shows detailed game info about an\n object and optionally a specific attribute on it.\n If object is not specified, the current location is examined.\n\n Append a * before the search string to examine an account.\n\n '}</em><a class="headerlink" href="#evennia.commands.default.building.CmdExamine.search_index_entry" title="Permalink to this definition"></a></dt>
<code class="sig-name descname">search_index_entry</code><em class="property"> = {'aliases': '&#64;ex &#64;exam', 'category': 'building', 'key': '&#64;examine', 'no_prefix': 'examine ex exam', 'tags': '', 'text': '\n get detailed information about an object\n\n Usage:\n examine [&lt;object&gt;[/attrname]]\n examine [*&lt;account&gt;[/attrname]]\n\n Switch:\n account - examine an Account (same as adding *)\n object - examine an Object (useful when OOC)\n script - examine a Script\n channel - examine a Channel\n\n The examine command shows detailed game info about an\n object and optionally a specific attribute on it.\n If object is not specified, the current location is examined.\n\n Append a * before the search string to examine an account.\n\n '}</em><a class="headerlink" href="#evennia.commands.default.building.CmdExamine.search_index_entry" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
</dd></dl>

File diff suppressed because one or more lines are too long

View file

@ -175,7 +175,7 @@ look <a href="#id1"><span class="problematic" id="id2">*</span></a>&lt;account&g
<dl class="py attribute">
<dt id="evennia.commands.default.general.CmdLook.aliases">
<code class="sig-name descname">aliases</code><em class="property"> = ['l', 'ls']</em><a class="headerlink" href="#evennia.commands.default.general.CmdLook.aliases" title="Permalink to this definition"></a></dt>
<code class="sig-name descname">aliases</code><em class="property"> = ['ls', 'l']</em><a class="headerlink" href="#evennia.commands.default.general.CmdLook.aliases" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
<dl class="py attribute">
@ -206,7 +206,7 @@ look <a href="#id1"><span class="problematic" id="id2">*</span></a>&lt;account&g
<dl class="py attribute">
<dt id="evennia.commands.default.general.CmdLook.search_index_entry">
<code class="sig-name descname">search_index_entry</code><em class="property"> = {'aliases': 'l ls', 'category': 'general', 'key': 'look', 'no_prefix': ' l ls', 'tags': '', 'text': '\n look at location or object\n\n Usage:\n look\n look &lt;obj&gt;\n look *&lt;account&gt;\n\n Observes your location or objects in your vicinity.\n '}</em><a class="headerlink" href="#evennia.commands.default.general.CmdLook.search_index_entry" title="Permalink to this definition"></a></dt>
<code class="sig-name descname">search_index_entry</code><em class="property"> = {'aliases': 'ls l', 'category': 'general', 'key': 'look', 'no_prefix': ' ls l', 'tags': '', 'text': '\n look at location or object\n\n Usage:\n look\n look &lt;obj&gt;\n look *&lt;account&gt;\n\n Observes your location or objects in your vicinity.\n '}</em><a class="headerlink" href="#evennia.commands.default.general.CmdLook.search_index_entry" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
</dd></dl>
@ -773,7 +773,7 @@ which permission groups you are a member of.</p>
<dl class="py attribute">
<dt id="evennia.commands.default.general.CmdAccess.aliases">
<code class="sig-name descname">aliases</code><em class="property"> = ['groups', 'hierarchy']</em><a class="headerlink" href="#evennia.commands.default.general.CmdAccess.aliases" title="Permalink to this definition"></a></dt>
<code class="sig-name descname">aliases</code><em class="property"> = ['hierarchy', 'groups']</em><a class="headerlink" href="#evennia.commands.default.general.CmdAccess.aliases" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
<dl class="py attribute">
@ -804,7 +804,7 @@ which permission groups you are a member of.</p>
<dl class="py attribute">
<dt id="evennia.commands.default.general.CmdAccess.search_index_entry">
<code class="sig-name descname">search_index_entry</code><em class="property"> = {'aliases': 'groups hierarchy', 'category': 'general', 'key': 'access', 'no_prefix': ' groups hierarchy', 'tags': '', 'text': '\n show your current game access\n\n Usage:\n access\n\n This command shows you the permission hierarchy and\n which permission groups you are a member of.\n '}</em><a class="headerlink" href="#evennia.commands.default.general.CmdAccess.search_index_entry" title="Permalink to this definition"></a></dt>
<code class="sig-name descname">search_index_entry</code><em class="property"> = {'aliases': 'hierarchy groups', 'category': 'general', 'key': 'access', 'no_prefix': ' hierarchy groups', 'tags': '', 'text': '\n show your current game access\n\n Usage:\n access\n\n This command shows you the permission hierarchy and\n which permission groups you are a member of.\n '}</em><a class="headerlink" href="#evennia.commands.default.general.CmdAccess.search_index_entry" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
</dd></dl>

View file

@ -683,7 +683,7 @@ See <a href="#id11"><span class="problematic" id="id12">|</span></a>luhttps://ww
<dl class="py attribute">
<dt id="evennia.commands.default.system.CmdTasks.aliases">
<code class="sig-name descname">aliases</code><em class="property"> = ['&#64;delays', '&#64;task']</em><a class="headerlink" href="#evennia.commands.default.system.CmdTasks.aliases" title="Permalink to this definition"></a></dt>
<code class="sig-name descname">aliases</code><em class="property"> = ['&#64;task', '&#64;delays']</em><a class="headerlink" href="#evennia.commands.default.system.CmdTasks.aliases" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
<dl class="py attribute">
@ -729,7 +729,7 @@ to all the variables defined therein.</p>
<dl class="py attribute">
<dt id="evennia.commands.default.system.CmdTasks.search_index_entry">
<code class="sig-name descname">search_index_entry</code><em class="property"> = {'aliases': '&#64;delays &#64;task', 'category': 'system', 'key': '&#64;tasks', 'no_prefix': 'tasks delays task', 'tags': '', 'text': &quot;\n Display or terminate active tasks (delays).\n\n Usage:\n tasks[/switch] [task_id or function_name]\n\n Switches:\n pause - Pause the callback of a task.\n unpause - Process all callbacks made since pause() was called.\n do_task - Execute the task (call its callback).\n call - Call the callback of this task.\n remove - Remove a task without executing it.\n cancel - Stop a task from automatically executing.\n\n Notes:\n A task is a single use method of delaying the call of a function. Calls are created\n in code, using `evennia.utils.delay`.\n See |luhttps://www.evennia.com/docs/latest/Command-Duration.html|ltthe docs|le for help.\n\n By default, tasks that are canceled and never called are cleaned up after one minute.\n\n Examples:\n - `tasks/cancel move_callback` - Cancels all movement delays from the slow_exit contrib.\n In this example slow exits creates it's tasks with\n `utils.delay(move_delay, move_callback)`\n - `tasks/cancel 2` - Cancel task id 2.\n\n &quot;}</em><a class="headerlink" href="#evennia.commands.default.system.CmdTasks.search_index_entry" title="Permalink to this definition"></a></dt>
<code class="sig-name descname">search_index_entry</code><em class="property"> = {'aliases': '&#64;task &#64;delays', 'category': 'system', 'key': '&#64;tasks', 'no_prefix': 'tasks task delays', 'tags': '', 'text': &quot;\n Display or terminate active tasks (delays).\n\n Usage:\n tasks[/switch] [task_id or function_name]\n\n Switches:\n pause - Pause the callback of a task.\n unpause - Process all callbacks made since pause() was called.\n do_task - Execute the task (call its callback).\n call - Call the callback of this task.\n remove - Remove a task without executing it.\n cancel - Stop a task from automatically executing.\n\n Notes:\n A task is a single use method of delaying the call of a function. Calls are created\n in code, using `evennia.utils.delay`.\n See |luhttps://www.evennia.com/docs/latest/Command-Duration.html|ltthe docs|le for help.\n\n By default, tasks that are canceled and never called are cleaned up after one minute.\n\n Examples:\n - `tasks/cancel move_callback` - Cancels all movement delays from the slow_exit contrib.\n In this example slow exits creates it's tasks with\n `utils.delay(move_delay, move_callback)`\n - `tasks/cancel 2` - Cancel task id 2.\n\n &quot;}</em><a class="headerlink" href="#evennia.commands.default.system.CmdTasks.search_index_entry" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
</dd></dl>

View file

@ -955,7 +955,7 @@ main test suite started with</p>
<p>Test the batch processor.</p>
<dl class="py attribute">
<dt id="evennia.commands.default.tests.TestBatchProcess.red_button">
<code class="sig-name descname">red_button</code><em class="property"> = &lt;module 'evennia.contrib.tutorials.red_button.red_button' from '/tmp/tmpufizbudc/1cfd6a0289a457111e4d075a7beca6e9cf84c4e0/evennia/contrib/tutorials/red_button/red_button.py'&gt;</em><a class="headerlink" href="#evennia.commands.default.tests.TestBatchProcess.red_button" title="Permalink to this definition"></a></dt>
<code class="sig-name descname">red_button</code><em class="property"> = &lt;module 'evennia.contrib.tutorials.red_button.red_button' from '/tmp/tmpl5gju87b/643c5f387ec257e814ec79aa106a303ff3727f4b/evennia/contrib/tutorials/red_button/red_button.py'&gt;</em><a class="headerlink" href="#evennia.commands.default.tests.TestBatchProcess.red_button" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
<dl class="py method">

View file

@ -122,7 +122,7 @@ connect “account name” “pass word”</p>
<dl class="py attribute">
<dt id="evennia.commands.default.unloggedin.CmdUnconnectedConnect.aliases">
<code class="sig-name descname">aliases</code><em class="property"> = ['conn', 'con', 'co']</em><a class="headerlink" href="#evennia.commands.default.unloggedin.CmdUnconnectedConnect.aliases" title="Permalink to this definition"></a></dt>
<code class="sig-name descname">aliases</code><em class="property"> = ['con', 'conn', 'co']</em><a class="headerlink" href="#evennia.commands.default.unloggedin.CmdUnconnectedConnect.aliases" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
<dl class="py attribute">
@ -157,7 +157,7 @@ there is no object yet before the account has logged in)</p>
<dl class="py attribute">
<dt id="evennia.commands.default.unloggedin.CmdUnconnectedConnect.search_index_entry">
<code class="sig-name descname">search_index_entry</code><em class="property"> = {'aliases': 'conn con co', 'category': 'general', 'key': 'connect', 'no_prefix': ' conn con co', 'tags': '', 'text': '\n connect to the game\n\n Usage (at login screen):\n connect accountname password\n connect &quot;account name&quot; &quot;pass word&quot;\n\n Use the create command to first create an account before logging in.\n\n If you have spaces in your name, enclose it in double quotes.\n '}</em><a class="headerlink" href="#evennia.commands.default.unloggedin.CmdUnconnectedConnect.search_index_entry" title="Permalink to this definition"></a></dt>
<code class="sig-name descname">search_index_entry</code><em class="property"> = {'aliases': 'con conn co', 'category': 'general', 'key': 'connect', 'no_prefix': ' con conn co', 'tags': '', 'text': '\n connect to the game\n\n Usage (at login screen):\n connect accountname password\n connect &quot;account name&quot; &quot;pass word&quot;\n\n Use the create command to first create an account before logging in.\n\n If you have spaces in your name, enclose it in double quotes.\n '}</em><a class="headerlink" href="#evennia.commands.default.unloggedin.CmdUnconnectedConnect.search_index_entry" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
</dd></dl>
@ -236,7 +236,7 @@ version is a bit more complicated.</p>
<dl class="py attribute">
<dt id="evennia.commands.default.unloggedin.CmdUnconnectedQuit.aliases">
<code class="sig-name descname">aliases</code><em class="property"> = ['qu', 'q']</em><a class="headerlink" href="#evennia.commands.default.unloggedin.CmdUnconnectedQuit.aliases" title="Permalink to this definition"></a></dt>
<code class="sig-name descname">aliases</code><em class="property"> = ['q', 'qu']</em><a class="headerlink" href="#evennia.commands.default.unloggedin.CmdUnconnectedQuit.aliases" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
<dl class="py attribute">
@ -262,7 +262,7 @@ version is a bit more complicated.</p>
<dl class="py attribute">
<dt id="evennia.commands.default.unloggedin.CmdUnconnectedQuit.search_index_entry">
<code class="sig-name descname">search_index_entry</code><em class="property"> = {'aliases': 'qu q', 'category': 'general', 'key': 'quit', 'no_prefix': ' qu q', 'tags': '', 'text': '\n quit when in unlogged-in state\n\n Usage:\n quit\n\n We maintain a different version of the quit command\n here for unconnected accounts for the sake of simplicity. The logged in\n version is a bit more complicated.\n '}</em><a class="headerlink" href="#evennia.commands.default.unloggedin.CmdUnconnectedQuit.search_index_entry" title="Permalink to this definition"></a></dt>
<code class="sig-name descname">search_index_entry</code><em class="property"> = {'aliases': 'q qu', 'category': 'general', 'key': 'quit', 'no_prefix': ' q qu', 'tags': '', 'text': '\n quit when in unlogged-in state\n\n Usage:\n quit\n\n We maintain a different version of the quit command\n here for unconnected accounts for the sake of simplicity. The logged in\n version is a bit more complicated.\n '}</em><a class="headerlink" href="#evennia.commands.default.unloggedin.CmdUnconnectedQuit.search_index_entry" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
</dd></dl>
@ -286,7 +286,7 @@ All it does is display the connect screen.</p>
<dl class="py attribute">
<dt id="evennia.commands.default.unloggedin.CmdUnconnectedLook.aliases">
<code class="sig-name descname">aliases</code><em class="property"> = ['l', 'look']</em><a class="headerlink" href="#evennia.commands.default.unloggedin.CmdUnconnectedLook.aliases" title="Permalink to this definition"></a></dt>
<code class="sig-name descname">aliases</code><em class="property"> = ['look', 'l']</em><a class="headerlink" href="#evennia.commands.default.unloggedin.CmdUnconnectedLook.aliases" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
<dl class="py attribute">
@ -312,7 +312,7 @@ All it does is display the connect screen.</p>
<dl class="py attribute">
<dt id="evennia.commands.default.unloggedin.CmdUnconnectedLook.search_index_entry">
<code class="sig-name descname">search_index_entry</code><em class="property"> = {'aliases': 'l look', 'category': 'general', 'key': '__unloggedin_look_command', 'no_prefix': ' l look', 'tags': '', 'text': '\n look when in unlogged-in state\n\n Usage:\n look\n\n This is an unconnected version of the look command for simplicity.\n\n This is called by the server and kicks everything in gear.\n All it does is display the connect screen.\n '}</em><a class="headerlink" href="#evennia.commands.default.unloggedin.CmdUnconnectedLook.search_index_entry" title="Permalink to this definition"></a></dt>
<code class="sig-name descname">search_index_entry</code><em class="property"> = {'aliases': 'look l', 'category': 'general', 'key': '__unloggedin_look_command', 'no_prefix': ' look l', 'tags': '', 'text': '\n look when in unlogged-in state\n\n Usage:\n look\n\n This is an unconnected version of the look command for simplicity.\n\n This is called by the server and kicks everything in gear.\n All it does is display the connect screen.\n '}</em><a class="headerlink" href="#evennia.commands.default.unloggedin.CmdUnconnectedLook.search_index_entry" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
</dd></dl>
@ -335,7 +335,7 @@ for simplicity. It shows a pane of info.</p>
<dl class="py attribute">
<dt id="evennia.commands.default.unloggedin.CmdUnconnectedHelp.aliases">
<code class="sig-name descname">aliases</code><em class="property"> = ['h', '?']</em><a class="headerlink" href="#evennia.commands.default.unloggedin.CmdUnconnectedHelp.aliases" title="Permalink to this definition"></a></dt>
<code class="sig-name descname">aliases</code><em class="property"> = ['?', 'h']</em><a class="headerlink" href="#evennia.commands.default.unloggedin.CmdUnconnectedHelp.aliases" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
<dl class="py attribute">
@ -361,7 +361,7 @@ for simplicity. It shows a pane of info.</p>
<dl class="py attribute">
<dt id="evennia.commands.default.unloggedin.CmdUnconnectedHelp.search_index_entry">
<code class="sig-name descname">search_index_entry</code><em class="property"> = {'aliases': 'h ?', 'category': 'general', 'key': 'help', 'no_prefix': ' h ?', 'tags': '', 'text': '\n get help when in unconnected-in state\n\n Usage:\n help\n\n This is an unconnected version of the help command,\n for simplicity. It shows a pane of info.\n '}</em><a class="headerlink" href="#evennia.commands.default.unloggedin.CmdUnconnectedHelp.search_index_entry" title="Permalink to this definition"></a></dt>
<code class="sig-name descname">search_index_entry</code><em class="property"> = {'aliases': '? h', 'category': 'general', 'key': 'help', 'no_prefix': ' ? h', 'tags': '', 'text': '\n get help when in unconnected-in state\n\n Usage:\n help\n\n This is an unconnected version of the help command,\n for simplicity. It shows a pane of info.\n '}</em><a class="headerlink" href="#evennia.commands.default.unloggedin.CmdUnconnectedHelp.search_index_entry" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
</dd></dl>

View file

@ -139,7 +139,7 @@ the module given by settings.CONNECTION_SCREEN_MODULE.</p>
<dl class="py attribute">
<dt id="evennia.contrib.base_systems.email_login.email_login.CmdUnconnectedConnect.aliases">
<code class="sig-name descname">aliases</code><em class="property"> = ['conn', 'con', 'co']</em><a class="headerlink" href="#evennia.contrib.base_systems.email_login.email_login.CmdUnconnectedConnect.aliases" title="Permalink to this definition"></a></dt>
<code class="sig-name descname">aliases</code><em class="property"> = ['con', 'conn', 'co']</em><a class="headerlink" href="#evennia.contrib.base_systems.email_login.email_login.CmdUnconnectedConnect.aliases" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
<dl class="py attribute">
@ -169,7 +169,7 @@ there is no object yet before the account has logged in)</p>
<dl class="py attribute">
<dt id="evennia.contrib.base_systems.email_login.email_login.CmdUnconnectedConnect.search_index_entry">
<code class="sig-name descname">search_index_entry</code><em class="property"> = {'aliases': 'conn con co', 'category': 'general', 'key': 'connect', 'no_prefix': ' conn con co', 'tags': '', 'text': '\n Connect to the game.\n\n Usage (at login screen):\n connect &lt;email&gt; &lt;password&gt;\n\n Use the create command to first create an account before logging in.\n '}</em><a class="headerlink" href="#evennia.contrib.base_systems.email_login.email_login.CmdUnconnectedConnect.search_index_entry" title="Permalink to this definition"></a></dt>
<code class="sig-name descname">search_index_entry</code><em class="property"> = {'aliases': 'con conn co', 'category': 'general', 'key': 'connect', 'no_prefix': ' con conn co', 'tags': '', 'text': '\n Connect to the game.\n\n Usage (at login screen):\n connect &lt;email&gt; &lt;password&gt;\n\n Use the create command to first create an account before logging in.\n '}</em><a class="headerlink" href="#evennia.contrib.base_systems.email_login.email_login.CmdUnconnectedConnect.search_index_entry" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
</dd></dl>
@ -246,7 +246,7 @@ version is a bit more complicated.</p>
<dl class="py attribute">
<dt id="evennia.contrib.base_systems.email_login.email_login.CmdUnconnectedQuit.aliases">
<code class="sig-name descname">aliases</code><em class="property"> = ['qu', 'q']</em><a class="headerlink" href="#evennia.contrib.base_systems.email_login.email_login.CmdUnconnectedQuit.aliases" title="Permalink to this definition"></a></dt>
<code class="sig-name descname">aliases</code><em class="property"> = ['q', 'qu']</em><a class="headerlink" href="#evennia.contrib.base_systems.email_login.email_login.CmdUnconnectedQuit.aliases" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
<dl class="py attribute">
@ -272,7 +272,7 @@ version is a bit more complicated.</p>
<dl class="py attribute">
<dt id="evennia.contrib.base_systems.email_login.email_login.CmdUnconnectedQuit.search_index_entry">
<code class="sig-name descname">search_index_entry</code><em class="property"> = {'aliases': 'qu q', 'category': 'general', 'key': 'quit', 'no_prefix': ' qu q', 'tags': '', 'text': '\n We maintain a different version of the `quit` command\n here for unconnected accounts for the sake of simplicity. The logged in\n version is a bit more complicated.\n '}</em><a class="headerlink" href="#evennia.contrib.base_systems.email_login.email_login.CmdUnconnectedQuit.search_index_entry" title="Permalink to this definition"></a></dt>
<code class="sig-name descname">search_index_entry</code><em class="property"> = {'aliases': 'q qu', 'category': 'general', 'key': 'quit', 'no_prefix': ' q qu', 'tags': '', 'text': '\n We maintain a different version of the `quit` command\n here for unconnected accounts for the sake of simplicity. The logged in\n version is a bit more complicated.\n '}</em><a class="headerlink" href="#evennia.contrib.base_systems.email_login.email_login.CmdUnconnectedQuit.search_index_entry" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
</dd></dl>
@ -291,7 +291,7 @@ All it does is display the connect screen.</p>
<dl class="py attribute">
<dt id="evennia.contrib.base_systems.email_login.email_login.CmdUnconnectedLook.aliases">
<code class="sig-name descname">aliases</code><em class="property"> = ['l', 'look']</em><a class="headerlink" href="#evennia.contrib.base_systems.email_login.email_login.CmdUnconnectedLook.aliases" title="Permalink to this definition"></a></dt>
<code class="sig-name descname">aliases</code><em class="property"> = ['look', 'l']</em><a class="headerlink" href="#evennia.contrib.base_systems.email_login.email_login.CmdUnconnectedLook.aliases" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
<dl class="py attribute">
@ -317,7 +317,7 @@ All it does is display the connect screen.</p>
<dl class="py attribute">
<dt id="evennia.contrib.base_systems.email_login.email_login.CmdUnconnectedLook.search_index_entry">
<code class="sig-name descname">search_index_entry</code><em class="property"> = {'aliases': 'l look', 'category': 'general', 'key': '__unloggedin_look_command', 'no_prefix': ' l look', 'tags': '', 'text': '\n This is an unconnected version of the `look` command for simplicity.\n\n This is called by the server and kicks everything in gear.\n All it does is display the connect screen.\n '}</em><a class="headerlink" href="#evennia.contrib.base_systems.email_login.email_login.CmdUnconnectedLook.search_index_entry" title="Permalink to this definition"></a></dt>
<code class="sig-name descname">search_index_entry</code><em class="property"> = {'aliases': 'look l', 'category': 'general', 'key': '__unloggedin_look_command', 'no_prefix': ' look l', 'tags': '', 'text': '\n This is an unconnected version of the `look` command for simplicity.\n\n This is called by the server and kicks everything in gear.\n All it does is display the connect screen.\n '}</em><a class="headerlink" href="#evennia.contrib.base_systems.email_login.email_login.CmdUnconnectedLook.search_index_entry" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
</dd></dl>
@ -335,7 +335,7 @@ for simplicity. It shows a pane of info.</p>
<dl class="py attribute">
<dt id="evennia.contrib.base_systems.email_login.email_login.CmdUnconnectedHelp.aliases">
<code class="sig-name descname">aliases</code><em class="property"> = ['h', '?']</em><a class="headerlink" href="#evennia.contrib.base_systems.email_login.email_login.CmdUnconnectedHelp.aliases" title="Permalink to this definition"></a></dt>
<code class="sig-name descname">aliases</code><em class="property"> = ['?', 'h']</em><a class="headerlink" href="#evennia.contrib.base_systems.email_login.email_login.CmdUnconnectedHelp.aliases" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
<dl class="py attribute">
@ -361,7 +361,7 @@ for simplicity. It shows a pane of info.</p>
<dl class="py attribute">
<dt id="evennia.contrib.base_systems.email_login.email_login.CmdUnconnectedHelp.search_index_entry">
<code class="sig-name descname">search_index_entry</code><em class="property"> = {'aliases': 'h ?', 'category': 'general', 'key': 'help', 'no_prefix': ' h ?', 'tags': '', 'text': '\n This is an unconnected version of the help command,\n for simplicity. It shows a pane of info.\n '}</em><a class="headerlink" href="#evennia.contrib.base_systems.email_login.email_login.CmdUnconnectedHelp.search_index_entry" title="Permalink to this definition"></a></dt>
<code class="sig-name descname">search_index_entry</code><em class="property"> = {'aliases': '? h', 'category': 'general', 'key': 'help', 'no_prefix': ' ? h', 'tags': '', 'text': '\n This is an unconnected version of the help command,\n for simplicity. It shows a pane of info.\n '}</em><a class="headerlink" href="#evennia.contrib.base_systems.email_login.email_login.CmdUnconnectedHelp.search_index_entry" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
</dd></dl>

View file

@ -116,7 +116,7 @@
<dl class="py attribute">
<dt id="evennia.contrib.base_systems.ingame_python.commands.CmdCallback.aliases">
<code class="sig-name descname">aliases</code><em class="property"> = ['&#64;callbacks', '&#64;callback', '&#64;calls']</em><a class="headerlink" href="#evennia.contrib.base_systems.ingame_python.commands.CmdCallback.aliases" title="Permalink to this definition"></a></dt>
<code class="sig-name descname">aliases</code><em class="property"> = ['&#64;calls', '&#64;callbacks', '&#64;callback']</em><a class="headerlink" href="#evennia.contrib.base_systems.ingame_python.commands.CmdCallback.aliases" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
<dl class="py attribute">
@ -197,7 +197,7 @@ on user permission.</p>
<dl class="py attribute">
<dt id="evennia.contrib.base_systems.ingame_python.commands.CmdCallback.search_index_entry">
<code class="sig-name descname">search_index_entry</code><em class="property"> = {'aliases': '&#64;callbacks &#64;callback &#64;calls', 'category': 'building', 'key': '&#64;call', 'no_prefix': 'call callbacks callback calls', 'tags': '', 'text': '\n Command to edit callbacks.\n '}</em><a class="headerlink" href="#evennia.contrib.base_systems.ingame_python.commands.CmdCallback.search_index_entry" title="Permalink to this definition"></a></dt>
<code class="sig-name descname">search_index_entry</code><em class="property"> = {'aliases': '&#64;calls &#64;callbacks &#64;callback', 'category': 'building', 'key': '&#64;call', 'no_prefix': 'call calls callbacks callback', 'tags': '', 'text': '\n Command to edit callbacks.\n '}</em><a class="headerlink" href="#evennia.contrib.base_systems.ingame_python.commands.CmdCallback.search_index_entry" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
</dd></dl>

View file

@ -211,7 +211,7 @@ the operation will be general or on the room.</p>
<dl class="py attribute">
<dt id="evennia.contrib.full_systems.evscaperoom.commands.CmdGiveUp.aliases">
<code class="sig-name descname">aliases</code><em class="property"> = ['chicken out', 'quit', 'abort', 'q']</em><a class="headerlink" href="#evennia.contrib.full_systems.evscaperoom.commands.CmdGiveUp.aliases" title="Permalink to this definition"></a></dt>
<code class="sig-name descname">aliases</code><em class="property"> = ['q', 'quit', 'abort', 'chicken out']</em><a class="headerlink" href="#evennia.contrib.full_systems.evscaperoom.commands.CmdGiveUp.aliases" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
<dl class="py method">
@ -235,7 +235,7 @@ set in self.parse())</p>
<dl class="py attribute">
<dt id="evennia.contrib.full_systems.evscaperoom.commands.CmdGiveUp.search_index_entry">
<code class="sig-name descname">search_index_entry</code><em class="property"> = {'aliases': 'chicken out quit abort q', 'category': 'evscaperoom', 'key': 'give up', 'no_prefix': ' chicken out quit abort q', 'tags': '', 'text': '\n Give up\n\n Usage:\n give up\n\n Abandons your attempts at escaping and of ever winning the pie-eating contest.\n\n '}</em><a class="headerlink" href="#evennia.contrib.full_systems.evscaperoom.commands.CmdGiveUp.search_index_entry" title="Permalink to this definition"></a></dt>
<code class="sig-name descname">search_index_entry</code><em class="property"> = {'aliases': 'q quit abort chicken out', 'category': 'evscaperoom', 'key': 'give up', 'no_prefix': ' q quit abort chicken out', 'tags': '', 'text': '\n Give up\n\n Usage:\n give up\n\n Abandons your attempts at escaping and of ever winning the pie-eating contest.\n\n '}</em><a class="headerlink" href="#evennia.contrib.full_systems.evscaperoom.commands.CmdGiveUp.search_index_entry" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
</dd></dl>
@ -256,7 +256,7 @@ set in self.parse())</p>
<dl class="py attribute">
<dt id="evennia.contrib.full_systems.evscaperoom.commands.CmdLook.aliases">
<code class="sig-name descname">aliases</code><em class="property"> = ['l', 'ls']</em><a class="headerlink" href="#evennia.contrib.full_systems.evscaperoom.commands.CmdLook.aliases" title="Permalink to this definition"></a></dt>
<code class="sig-name descname">aliases</code><em class="property"> = ['ls', 'l']</em><a class="headerlink" href="#evennia.contrib.full_systems.evscaperoom.commands.CmdLook.aliases" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
<dl class="py attribute">
@ -290,7 +290,7 @@ set in self.parse())</p>
<dl class="py attribute">
<dt id="evennia.contrib.full_systems.evscaperoom.commands.CmdLook.search_index_entry">
<code class="sig-name descname">search_index_entry</code><em class="property"> = {'aliases': 'l ls', 'category': 'evscaperoom', 'key': 'look', 'no_prefix': ' l ls', 'tags': '', 'text': '\n Look at the room, an object or the currently focused object\n\n Usage:\n look [obj]\n\n '}</em><a class="headerlink" href="#evennia.contrib.full_systems.evscaperoom.commands.CmdLook.search_index_entry" title="Permalink to this definition"></a></dt>
<code class="sig-name descname">search_index_entry</code><em class="property"> = {'aliases': 'ls l', 'category': 'evscaperoom', 'key': 'look', 'no_prefix': ' ls l', 'tags': '', 'text': '\n Look at the room, an object or the currently focused object\n\n Usage:\n look [obj]\n\n '}</em><a class="headerlink" href="#evennia.contrib.full_systems.evscaperoom.commands.CmdLook.search_index_entry" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
</dd></dl>
@ -371,7 +371,7 @@ shout</p>
<dl class="py attribute">
<dt id="evennia.contrib.full_systems.evscaperoom.commands.CmdSpeak.aliases">
<code class="sig-name descname">aliases</code><em class="property"> = ['whisper', 'shout', ';']</em><a class="headerlink" href="#evennia.contrib.full_systems.evscaperoom.commands.CmdSpeak.aliases" title="Permalink to this definition"></a></dt>
<code class="sig-name descname">aliases</code><em class="property"> = ['shout', 'whisper', ';']</em><a class="headerlink" href="#evennia.contrib.full_systems.evscaperoom.commands.CmdSpeak.aliases" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
<dl class="py attribute">
@ -400,7 +400,7 @@ set in self.parse())</p>
<dl class="py attribute">
<dt id="evennia.contrib.full_systems.evscaperoom.commands.CmdSpeak.search_index_entry">
<code class="sig-name descname">search_index_entry</code><em class="property"> = {'aliases': 'whisper shout ;', 'category': 'general', 'key': 'say', 'no_prefix': ' whisper shout ;', 'tags': '', 'text': '\n Perform an communication action.\n\n Usage:\n say &lt;text&gt;\n whisper\n shout\n\n '}</em><a class="headerlink" href="#evennia.contrib.full_systems.evscaperoom.commands.CmdSpeak.search_index_entry" title="Permalink to this definition"></a></dt>
<code class="sig-name descname">search_index_entry</code><em class="property"> = {'aliases': 'shout whisper ;', 'category': 'general', 'key': 'say', 'no_prefix': ' shout whisper ;', 'tags': '', 'text': '\n Perform an communication action.\n\n Usage:\n say &lt;text&gt;\n whisper\n shout\n\n '}</em><a class="headerlink" href="#evennia.contrib.full_systems.evscaperoom.commands.CmdSpeak.search_index_entry" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
</dd></dl>
@ -490,7 +490,7 @@ looks and what actions is available.</p>
<dl class="py attribute">
<dt id="evennia.contrib.full_systems.evscaperoom.commands.CmdFocus.aliases">
<code class="sig-name descname">aliases</code><em class="property"> = ['e', 'unfocus', 'examine', 'ex']</em><a class="headerlink" href="#evennia.contrib.full_systems.evscaperoom.commands.CmdFocus.aliases" title="Permalink to this definition"></a></dt>
<code class="sig-name descname">aliases</code><em class="property"> = ['e', 'ex', 'examine', 'unfocus']</em><a class="headerlink" href="#evennia.contrib.full_systems.evscaperoom.commands.CmdFocus.aliases" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
<dl class="py attribute">
@ -519,7 +519,7 @@ set in self.parse())</p>
<dl class="py attribute">
<dt id="evennia.contrib.full_systems.evscaperoom.commands.CmdFocus.search_index_entry">
<code class="sig-name descname">search_index_entry</code><em class="property"> = {'aliases': 'e unfocus examine ex', 'category': 'evscaperoom', 'key': 'focus', 'no_prefix': ' e unfocus examine ex', 'tags': '', 'text': '\n Focus your attention on a target.\n\n Usage:\n focus &lt;obj&gt;\n\n Once focusing on an object, use look to get more information about how it\n looks and what actions is available.\n\n '}</em><a class="headerlink" href="#evennia.contrib.full_systems.evscaperoom.commands.CmdFocus.search_index_entry" title="Permalink to this definition"></a></dt>
<code class="sig-name descname">search_index_entry</code><em class="property"> = {'aliases': 'e ex examine unfocus', 'category': 'evscaperoom', 'key': 'focus', 'no_prefix': ' e ex examine unfocus', 'tags': '', 'text': '\n Focus your attention on a target.\n\n Usage:\n focus &lt;obj&gt;\n\n Once focusing on an object, use look to get more information about how it\n looks and what actions is available.\n\n '}</em><a class="headerlink" href="#evennia.contrib.full_systems.evscaperoom.commands.CmdFocus.search_index_entry" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
</dd></dl>
@ -581,7 +581,7 @@ set in self.parse())</p>
<dl class="py attribute">
<dt id="evennia.contrib.full_systems.evscaperoom.commands.CmdGet.aliases">
<code class="sig-name descname">aliases</code><em class="property"> = ['inventory', 'inv', 'give', 'i']</em><a class="headerlink" href="#evennia.contrib.full_systems.evscaperoom.commands.CmdGet.aliases" title="Permalink to this definition"></a></dt>
<code class="sig-name descname">aliases</code><em class="property"> = ['inv', 'i', 'inventory', 'give']</em><a class="headerlink" href="#evennia.contrib.full_systems.evscaperoom.commands.CmdGet.aliases" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
<dl class="py method">
@ -605,7 +605,7 @@ set in self.parse())</p>
<dl class="py attribute">
<dt id="evennia.contrib.full_systems.evscaperoom.commands.CmdGet.search_index_entry">
<code class="sig-name descname">search_index_entry</code><em class="property"> = {'aliases': 'inventory inv give i', 'category': 'evscaperoom', 'key': 'get', 'no_prefix': ' inventory inv give i', 'tags': '', 'text': '\n Use focus / examine instead.\n\n '}</em><a class="headerlink" href="#evennia.contrib.full_systems.evscaperoom.commands.CmdGet.search_index_entry" title="Permalink to this definition"></a></dt>
<code class="sig-name descname">search_index_entry</code><em class="property"> = {'aliases': 'inv i inventory give', 'category': 'evscaperoom', 'key': 'get', 'no_prefix': ' inv i inventory give', 'tags': '', 'text': '\n Use focus / examine instead.\n\n '}</em><a class="headerlink" href="#evennia.contrib.full_systems.evscaperoom.commands.CmdGet.search_index_entry" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
</dd></dl>
@ -626,7 +626,7 @@ set in self.parse())</p>
<dl class="py attribute">
<dt id="evennia.contrib.full_systems.evscaperoom.commands.CmdRerouter.aliases">
<code class="sig-name descname">aliases</code><em class="property"> = ['&#64;open', '&#64;dig']</em><a class="headerlink" href="#evennia.contrib.full_systems.evscaperoom.commands.CmdRerouter.aliases" title="Permalink to this definition"></a></dt>
<code class="sig-name descname">aliases</code><em class="property"> = ['&#64;dig', '&#64;open']</em><a class="headerlink" href="#evennia.contrib.full_systems.evscaperoom.commands.CmdRerouter.aliases" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
<dl class="py method">
@ -649,7 +649,7 @@ to all the variables defined therein.</p>
<dl class="py attribute">
<dt id="evennia.contrib.full_systems.evscaperoom.commands.CmdRerouter.search_index_entry">
<code class="sig-name descname">search_index_entry</code><em class="property"> = {'aliases': '&#64;open &#64;dig', 'category': 'general', 'key': 'open', 'no_prefix': ' open dig', 'tags': '', 'text': '\n Interact with an object in focus.\n\n Usage:\n &lt;action&gt; [arg]\n\n '}</em><a class="headerlink" href="#evennia.contrib.full_systems.evscaperoom.commands.CmdRerouter.search_index_entry" title="Permalink to this definition"></a></dt>
<code class="sig-name descname">search_index_entry</code><em class="property"> = {'aliases': '&#64;dig &#64;open', 'category': 'general', 'key': 'open', 'no_prefix': ' dig open', 'tags': '', 'text': '\n Interact with an object in focus.\n\n Usage:\n &lt;action&gt; [arg]\n\n '}</em><a class="headerlink" href="#evennia.contrib.full_systems.evscaperoom.commands.CmdRerouter.search_index_entry" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
</dd></dl>

View file

@ -340,7 +340,7 @@ look <a href="#id1"><span class="problematic" id="id2">*</span></a>&lt;account&g
<dl class="py attribute">
<dt id="evennia.contrib.grid.extended_room.extended_room.CmdExtendedRoomLook.aliases">
<code class="sig-name descname">aliases</code><em class="property"> = ['l', 'ls']</em><a class="headerlink" href="#evennia.contrib.grid.extended_room.extended_room.CmdExtendedRoomLook.aliases" title="Permalink to this definition"></a></dt>
<code class="sig-name descname">aliases</code><em class="property"> = ['ls', 'l']</em><a class="headerlink" href="#evennia.contrib.grid.extended_room.extended_room.CmdExtendedRoomLook.aliases" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
<dl class="py attribute">
@ -360,7 +360,7 @@ look <a href="#id1"><span class="problematic" id="id2">*</span></a>&lt;account&g
<dl class="py attribute">
<dt id="evennia.contrib.grid.extended_room.extended_room.CmdExtendedRoomLook.search_index_entry">
<code class="sig-name descname">search_index_entry</code><em class="property"> = {'aliases': 'l ls', 'category': 'general', 'key': 'look', 'no_prefix': ' l ls', 'tags': '', 'text': '\n look\n\n Usage:\n look\n look &lt;obj&gt;\n look &lt;room detail&gt;\n look *&lt;account&gt;\n\n Observes your location, details at your location or objects in your vicinity.\n '}</em><a class="headerlink" href="#evennia.contrib.grid.extended_room.extended_room.CmdExtendedRoomLook.search_index_entry" title="Permalink to this definition"></a></dt>
<code class="sig-name descname">search_index_entry</code><em class="property"> = {'aliases': 'ls l', 'category': 'general', 'key': 'look', 'no_prefix': ' ls l', 'tags': '', 'text': '\n look\n\n Usage:\n look\n look &lt;obj&gt;\n look &lt;room detail&gt;\n look *&lt;account&gt;\n\n Observes your location, details at your location or objects in your vicinity.\n '}</em><a class="headerlink" href="#evennia.contrib.grid.extended_room.extended_room.CmdExtendedRoomLook.search_index_entry" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
</dd></dl>

View file

@ -305,7 +305,7 @@ everyone but the person rolling.</p>
<dl class="py attribute">
<dt id="evennia.contrib.rpg.dice.dice.CmdDice.aliases">
<code class="sig-name descname">aliases</code><em class="property"> = ['&#64;dice', 'roll']</em><a class="headerlink" href="#evennia.contrib.rpg.dice.dice.CmdDice.aliases" title="Permalink to this definition"></a></dt>
<code class="sig-name descname">aliases</code><em class="property"> = ['roll', '&#64;dice']</em><a class="headerlink" href="#evennia.contrib.rpg.dice.dice.CmdDice.aliases" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
<dl class="py attribute">
@ -331,7 +331,7 @@ everyone but the person rolling.</p>
<dl class="py attribute">
<dt id="evennia.contrib.rpg.dice.dice.CmdDice.search_index_entry">
<code class="sig-name descname">search_index_entry</code><em class="property"> = {'aliases': '&#64;dice roll', 'category': 'general', 'key': 'dice', 'no_prefix': ' dice roll', 'tags': '', 'text': &quot;\n roll dice\n\n Usage:\n dice[/switch] &lt;nr&gt;d&lt;sides&gt; [modifier] [success condition]\n\n Switch:\n hidden - tell the room the roll is being done, but don't show the result\n secret - don't inform the room about neither roll nor result\n\n Examples:\n dice 3d6 + 4\n dice 1d100 - 2 &lt; 50\n\n This will roll the given number of dice with given sides and modifiers.\n So e.g. 2d6 + 3 means to 'roll a 6-sided die 2 times and add the result,\n then add 3 to the total'.\n Accepted modifiers are +, -, * and /.\n A success condition is given as normal Python conditionals\n (&lt;,&gt;,&lt;=,&gt;=,==,!=). So e.g. 2d6 + 3 &gt; 10 means that the roll will succeed\n only if the final result is above 8. If a success condition is given, the\n outcome (pass/fail) will be echoed along with how much it succeeded/failed\n with. The hidden/secret switches will hide all or parts of the roll from\n everyone but the person rolling.\n &quot;}</em><a class="headerlink" href="#evennia.contrib.rpg.dice.dice.CmdDice.search_index_entry" title="Permalink to this definition"></a></dt>
<code class="sig-name descname">search_index_entry</code><em class="property"> = {'aliases': 'roll &#64;dice', 'category': 'general', 'key': 'dice', 'no_prefix': ' roll dice', 'tags': '', 'text': &quot;\n roll dice\n\n Usage:\n dice[/switch] &lt;nr&gt;d&lt;sides&gt; [modifier] [success condition]\n\n Switch:\n hidden - tell the room the roll is being done, but don't show the result\n secret - don't inform the room about neither roll nor result\n\n Examples:\n dice 3d6 + 4\n dice 1d100 - 2 &lt; 50\n\n This will roll the given number of dice with given sides and modifiers.\n So e.g. 2d6 + 3 means to 'roll a 6-sided die 2 times and add the result,\n then add 3 to the total'.\n Accepted modifiers are +, -, * and /.\n A success condition is given as normal Python conditionals\n (&lt;,&gt;,&lt;=,&gt;=,==,!=). So e.g. 2d6 + 3 &gt; 10 means that the roll will succeed\n only if the final result is above 8. If a success condition is given, the\n outcome (pass/fail) will be echoed along with how much it succeeded/failed\n with. The hidden/secret switches will hide all or parts of the roll from\n everyone but the person rolling.\n &quot;}</em><a class="headerlink" href="#evennia.contrib.rpg.dice.dice.CmdDice.search_index_entry" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
</dd></dl>

View file

@ -865,7 +865,7 @@ Using the command without arguments will list all current recogs.</p>
<dl class="py attribute">
<dt id="evennia.contrib.rpg.rpsystem.rpsystem.CmdRecog.aliases">
<code class="sig-name descname">aliases</code><em class="property"> = ['forget', 'recognize']</em><a class="headerlink" href="#evennia.contrib.rpg.rpsystem.rpsystem.CmdRecog.aliases" title="Permalink to this definition"></a></dt>
<code class="sig-name descname">aliases</code><em class="property"> = ['recognize', 'forget']</em><a class="headerlink" href="#evennia.contrib.rpg.rpsystem.rpsystem.CmdRecog.aliases" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
<dl class="py method">
@ -892,7 +892,7 @@ Using the command without arguments will list all current recogs.</p>
<dl class="py attribute">
<dt id="evennia.contrib.rpg.rpsystem.rpsystem.CmdRecog.search_index_entry">
<code class="sig-name descname">search_index_entry</code><em class="property"> = {'aliases': 'forget recognize', 'category': 'general', 'key': 'recog', 'no_prefix': ' forget recognize', 'tags': '', 'text': '\n Recognize another person in the same room.\n\n Usage:\n recog\n recog sdesc as alias\n forget alias\n\n Example:\n recog tall man as Griatch\n forget griatch\n\n This will assign a personal alias for a person, or forget said alias.\n Using the command without arguments will list all current recogs.\n\n '}</em><a class="headerlink" href="#evennia.contrib.rpg.rpsystem.rpsystem.CmdRecog.search_index_entry" title="Permalink to this definition"></a></dt>
<code class="sig-name descname">search_index_entry</code><em class="property"> = {'aliases': 'recognize forget', 'category': 'general', 'key': 'recog', 'no_prefix': ' recognize forget', 'tags': '', 'text': '\n Recognize another person in the same room.\n\n Usage:\n recog\n recog sdesc as alias\n forget alias\n\n Example:\n recog tall man as Griatch\n forget griatch\n\n This will assign a personal alias for a person, or forget said alias.\n Using the command without arguments will list all current recogs.\n\n '}</em><a class="headerlink" href="#evennia.contrib.rpg.rpsystem.rpsystem.CmdRecog.search_index_entry" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
</dd></dl>

View file

@ -256,7 +256,7 @@ set in self.parse())</p>
<dl class="py attribute">
<dt id="evennia.contrib.tutorials.evadventure.commands.CmdInventory.aliases">
<code class="sig-name descname">aliases</code><em class="property"> = ['i', 'inv']</em><a class="headerlink" href="#evennia.contrib.tutorials.evadventure.commands.CmdInventory.aliases" title="Permalink to this definition"></a></dt>
<code class="sig-name descname">aliases</code><em class="property"> = ['inv', 'i']</em><a class="headerlink" href="#evennia.contrib.tutorials.evadventure.commands.CmdInventory.aliases" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
<dl class="py method">
@ -280,7 +280,7 @@ set in self.parse())</p>
<dl class="py attribute">
<dt id="evennia.contrib.tutorials.evadventure.commands.CmdInventory.search_index_entry">
<code class="sig-name descname">search_index_entry</code><em class="property"> = {'aliases': 'i inv', 'category': 'general', 'key': 'inventory', 'no_prefix': ' i inv', 'tags': '', 'text': '\n View your inventory\n\n Usage:\n inventory\n\n '}</em><a class="headerlink" href="#evennia.contrib.tutorials.evadventure.commands.CmdInventory.search_index_entry" title="Permalink to this definition"></a></dt>
<code class="sig-name descname">search_index_entry</code><em class="property"> = {'aliases': 'inv i', 'category': 'general', 'key': 'inventory', 'no_prefix': ' inv i', 'tags': '', 'text': '\n View your inventory\n\n Usage:\n inventory\n\n '}</em><a class="headerlink" href="#evennia.contrib.tutorials.evadventure.commands.CmdInventory.search_index_entry" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
</dd></dl>
@ -357,7 +357,7 @@ unwear &lt;item&gt;</p>
<dl class="py attribute">
<dt id="evennia.contrib.tutorials.evadventure.commands.CmdRemove.aliases">
<code class="sig-name descname">aliases</code><em class="property"> = ['unwield', 'unwear']</em><a class="headerlink" href="#evennia.contrib.tutorials.evadventure.commands.CmdRemove.aliases" title="Permalink to this definition"></a></dt>
<code class="sig-name descname">aliases</code><em class="property"> = ['unwear', 'unwield']</em><a class="headerlink" href="#evennia.contrib.tutorials.evadventure.commands.CmdRemove.aliases" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
<dl class="py method">
@ -381,7 +381,7 @@ set in self.parse())</p>
<dl class="py attribute">
<dt id="evennia.contrib.tutorials.evadventure.commands.CmdRemove.search_index_entry">
<code class="sig-name descname">search_index_entry</code><em class="property"> = {'aliases': 'unwield unwear', 'category': 'general', 'key': 'remove', 'no_prefix': ' unwield unwear', 'tags': '', 'text': '\n Remove a remove a weapon/shield, armor or helmet.\n\n Usage:\n remove &lt;item&gt;\n unwield &lt;item&gt;\n unwear &lt;item&gt;\n\n To remove an item from the backpack, use |wdrop|n instead.\n\n '}</em><a class="headerlink" href="#evennia.contrib.tutorials.evadventure.commands.CmdRemove.search_index_entry" title="Permalink to this definition"></a></dt>
<code class="sig-name descname">search_index_entry</code><em class="property"> = {'aliases': 'unwear unwield', 'category': 'general', 'key': 'remove', 'no_prefix': ' unwear unwield', 'tags': '', 'text': '\n Remove a remove a weapon/shield, armor or helmet.\n\n Usage:\n remove &lt;item&gt;\n unwield &lt;item&gt;\n unwear &lt;item&gt;\n\n To remove an item from the backpack, use |wdrop|n instead.\n\n '}</em><a class="headerlink" href="#evennia.contrib.tutorials.evadventure.commands.CmdRemove.search_index_entry" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
</dd></dl>

View file

@ -252,7 +252,7 @@ check if the lid is open or closed.</p>
<dl class="py attribute">
<dt id="evennia.contrib.tutorials.red_button.red_button.CmdSmashGlass.aliases">
<code class="sig-name descname">aliases</code><em class="property"> = ['smash lid', 'break lid', 'smash']</em><a class="headerlink" href="#evennia.contrib.tutorials.red_button.red_button.CmdSmashGlass.aliases" title="Permalink to this definition"></a></dt>
<code class="sig-name descname">aliases</code><em class="property"> = ['smash lid', 'smash', 'break lid']</em><a class="headerlink" href="#evennia.contrib.tutorials.red_button.red_button.CmdSmashGlass.aliases" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
<dl class="py attribute">
@ -279,7 +279,7 @@ break.</p>
<dl class="py attribute">
<dt id="evennia.contrib.tutorials.red_button.red_button.CmdSmashGlass.search_index_entry">
<code class="sig-name descname">search_index_entry</code><em class="property"> = {'aliases': 'smash lid break lid smash', 'category': 'general', 'key': 'smash glass', 'no_prefix': ' smash lid break lid smash', 'tags': '', 'text': '\n Smash the protective glass.\n\n Usage:\n smash glass\n\n Try to smash the glass of the button.\n\n '}</em><a class="headerlink" href="#evennia.contrib.tutorials.red_button.red_button.CmdSmashGlass.search_index_entry" title="Permalink to this definition"></a></dt>
<code class="sig-name descname">search_index_entry</code><em class="property"> = {'aliases': 'smash lid smash break lid', 'category': 'general', 'key': 'smash glass', 'no_prefix': ' smash lid smash break lid', 'tags': '', 'text': '\n Smash the protective glass.\n\n Usage:\n smash glass\n\n Try to smash the glass of the button.\n\n '}</em><a class="headerlink" href="#evennia.contrib.tutorials.red_button.red_button.CmdSmashGlass.search_index_entry" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
</dd></dl>
@ -506,7 +506,7 @@ be mutually exclusive.</p>
<dl class="py attribute">
<dt id="evennia.contrib.tutorials.red_button.red_button.CmdBlindLook.aliases">
<code class="sig-name descname">aliases</code><em class="property"> = ['examine', 'l', 'ex', 'listen', 'feel', 'get']</em><a class="headerlink" href="#evennia.contrib.tutorials.red_button.red_button.CmdBlindLook.aliases" title="Permalink to this definition"></a></dt>
<code class="sig-name descname">aliases</code><em class="property"> = ['ex', 'examine', 'l', 'listen', 'feel', 'get']</em><a class="headerlink" href="#evennia.contrib.tutorials.red_button.red_button.CmdBlindLook.aliases" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
<dl class="py attribute">
@ -532,7 +532,7 @@ be mutually exclusive.</p>
<dl class="py attribute">
<dt id="evennia.contrib.tutorials.red_button.red_button.CmdBlindLook.search_index_entry">
<code class="sig-name descname">search_index_entry</code><em class="property"> = {'aliases': 'examine l ex listen feel get', 'category': 'general', 'key': 'look', 'no_prefix': ' examine l ex listen feel get', 'tags': '', 'text': &quot;\n Looking around in darkness\n\n Usage:\n look &lt;obj&gt;\n\n ... not that there's much to see in the dark.\n\n &quot;}</em><a class="headerlink" href="#evennia.contrib.tutorials.red_button.red_button.CmdBlindLook.search_index_entry" title="Permalink to this definition"></a></dt>
<code class="sig-name descname">search_index_entry</code><em class="property"> = {'aliases': 'ex examine l listen feel get', 'category': 'general', 'key': 'look', 'no_prefix': ' ex examine l listen feel get', 'tags': '', 'text': &quot;\n Looking around in darkness\n\n Usage:\n look &lt;obj&gt;\n\n ... not that there's much to see in the dark.\n\n &quot;}</em><a class="headerlink" href="#evennia.contrib.tutorials.red_button.red_button.CmdBlindLook.search_index_entry" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
</dd></dl>

View file

@ -556,7 +556,7 @@ shift green root up/down</p>
<dl class="py attribute">
<dt id="evennia.contrib.tutorials.tutorial_world.objects.CmdShiftRoot.aliases">
<code class="sig-name descname">aliases</code><em class="property"> = ['pull', 'push', 'move', 'shiftroot']</em><a class="headerlink" href="#evennia.contrib.tutorials.tutorial_world.objects.CmdShiftRoot.aliases" title="Permalink to this definition"></a></dt>
<code class="sig-name descname">aliases</code><em class="property"> = ['shiftroot', 'push', 'move', 'pull']</em><a class="headerlink" href="#evennia.contrib.tutorials.tutorial_world.objects.CmdShiftRoot.aliases" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
<dl class="py attribute">
@ -592,7 +592,7 @@ yellow/green - horizontal roots</p>
<dl class="py attribute">
<dt id="evennia.contrib.tutorials.tutorial_world.objects.CmdShiftRoot.search_index_entry">
<code class="sig-name descname">search_index_entry</code><em class="property"> = {'aliases': 'pull push move shiftroot', 'category': 'tutorialworld', 'key': 'shift', 'no_prefix': ' pull push move shiftroot', 'tags': '', 'text': '\n Shifts roots around.\n\n Usage:\n shift blue root left/right\n shift red root left/right\n shift yellow root up/down\n shift green root up/down\n\n '}</em><a class="headerlink" href="#evennia.contrib.tutorials.tutorial_world.objects.CmdShiftRoot.search_index_entry" title="Permalink to this definition"></a></dt>
<code class="sig-name descname">search_index_entry</code><em class="property"> = {'aliases': 'shiftroot push move pull', 'category': 'tutorialworld', 'key': 'shift', 'no_prefix': ' shiftroot push move pull', 'tags': '', 'text': '\n Shifts roots around.\n\n Usage:\n shift blue root left/right\n shift red root left/right\n shift yellow root up/down\n shift green root up/down\n\n '}</em><a class="headerlink" href="#evennia.contrib.tutorials.tutorial_world.objects.CmdShiftRoot.search_index_entry" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
</dd></dl>
@ -779,7 +779,7 @@ parry - forgoes your attack but will make you harder to hit on next</p>
<dl class="py attribute">
<dt id="evennia.contrib.tutorials.tutorial_world.objects.CmdAttack.aliases">
<code class="sig-name descname">aliases</code><em class="property"> = ['stab', 'defend', 'parry', 'slash', 'kill', 'bash', 'fight', 'pierce', 'thrust', 'chop', 'hit']</em><a class="headerlink" href="#evennia.contrib.tutorials.tutorial_world.objects.CmdAttack.aliases" title="Permalink to this definition"></a></dt>
<code class="sig-name descname">aliases</code><em class="property"> = ['kill', 'thrust', 'hit', 'slash', 'chop', 'parry', 'defend', 'bash', 'pierce', 'fight', 'stab']</em><a class="headerlink" href="#evennia.contrib.tutorials.tutorial_world.objects.CmdAttack.aliases" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
<dl class="py attribute">
@ -805,7 +805,7 @@ parry - forgoes your attack but will make you harder to hit on next</p>
<dl class="py attribute">
<dt id="evennia.contrib.tutorials.tutorial_world.objects.CmdAttack.search_index_entry">
<code class="sig-name descname">search_index_entry</code><em class="property"> = {'aliases': 'stab defend parry slash kill bash fight pierce thrust chop hit', 'category': 'tutorialworld', 'key': 'attack', 'no_prefix': ' stab defend parry slash kill bash fight pierce thrust chop hit', 'tags': '', 'text': '\n Attack the enemy. Commands:\n\n stab &lt;enemy&gt;\n slash &lt;enemy&gt;\n parry\n\n stab - (thrust) makes a lot of damage but is harder to hit with.\n slash - is easier to land, but does not make as much damage.\n parry - forgoes your attack but will make you harder to hit on next\n enemy attack.\n\n '}</em><a class="headerlink" href="#evennia.contrib.tutorials.tutorial_world.objects.CmdAttack.search_index_entry" title="Permalink to this definition"></a></dt>
<code class="sig-name descname">search_index_entry</code><em class="property"> = {'aliases': 'kill thrust hit slash chop parry defend bash pierce fight stab', 'category': 'tutorialworld', 'key': 'attack', 'no_prefix': ' kill thrust hit slash chop parry defend bash pierce fight stab', 'tags': '', 'text': '\n Attack the enemy. Commands:\n\n stab &lt;enemy&gt;\n slash &lt;enemy&gt;\n parry\n\n stab - (thrust) makes a lot of damage but is harder to hit with.\n slash - is easier to land, but does not make as much damage.\n parry - forgoes your attack but will make you harder to hit on next\n enemy attack.\n\n '}</em><a class="headerlink" href="#evennia.contrib.tutorials.tutorial_world.objects.CmdAttack.search_index_entry" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
</dd></dl>

View file

@ -248,7 +248,7 @@ code except for adding in the details.</p>
<dl class="py attribute">
<dt id="evennia.contrib.tutorials.tutorial_world.rooms.CmdTutorialLook.aliases">
<code class="sig-name descname">aliases</code><em class="property"> = ['l', 'ls']</em><a class="headerlink" href="#evennia.contrib.tutorials.tutorial_world.rooms.CmdTutorialLook.aliases" title="Permalink to this definition"></a></dt>
<code class="sig-name descname">aliases</code><em class="property"> = ['ls', 'l']</em><a class="headerlink" href="#evennia.contrib.tutorials.tutorial_world.rooms.CmdTutorialLook.aliases" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
<dl class="py attribute">
@ -263,7 +263,7 @@ code except for adding in the details.</p>
<dl class="py attribute">
<dt id="evennia.contrib.tutorials.tutorial_world.rooms.CmdTutorialLook.search_index_entry">
<code class="sig-name descname">search_index_entry</code><em class="property"> = {'aliases': 'l ls', 'category': 'tutorialworld', 'key': 'look', 'no_prefix': ' l ls', 'tags': '', 'text': '\n looks at the room and on details\n\n Usage:\n look &lt;obj&gt;\n look &lt;room detail&gt;\n look *&lt;account&gt;\n\n Observes your location, details at your location or objects\n in your vicinity.\n\n Tutorial: This is a child of the default Look command, that also\n allows us to look at &quot;details&quot; in the room. These details are\n things to examine and offers some extra description without\n actually having to be actual database objects. It uses the\n return_detail() hook on TutorialRooms for this.\n '}</em><a class="headerlink" href="#evennia.contrib.tutorials.tutorial_world.rooms.CmdTutorialLook.search_index_entry" title="Permalink to this definition"></a></dt>
<code class="sig-name descname">search_index_entry</code><em class="property"> = {'aliases': 'ls l', 'category': 'tutorialworld', 'key': 'look', 'no_prefix': ' ls l', 'tags': '', 'text': '\n looks at the room and on details\n\n Usage:\n look &lt;obj&gt;\n look &lt;room detail&gt;\n look *&lt;account&gt;\n\n Observes your location, details at your location or objects\n in your vicinity.\n\n Tutorial: This is a child of the default Look command, that also\n allows us to look at &quot;details&quot; in the room. These details are\n things to examine and offers some extra description without\n actually having to be actual database objects. It uses the\n return_detail() hook on TutorialRooms for this.\n '}</em><a class="headerlink" href="#evennia.contrib.tutorials.tutorial_world.rooms.CmdTutorialLook.search_index_entry" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
</dd></dl>
@ -816,7 +816,7 @@ if they fall off the bridge.</p>
<dl class="py attribute">
<dt id="evennia.contrib.tutorials.tutorial_world.rooms.CmdBridgeHelp.aliases">
<code class="sig-name descname">aliases</code><em class="property"> = ['h', '?']</em><a class="headerlink" href="#evennia.contrib.tutorials.tutorial_world.rooms.CmdBridgeHelp.aliases" title="Permalink to this definition"></a></dt>
<code class="sig-name descname">aliases</code><em class="property"> = ['?', 'h']</em><a class="headerlink" href="#evennia.contrib.tutorials.tutorial_world.rooms.CmdBridgeHelp.aliases" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
<dl class="py attribute">
@ -842,7 +842,7 @@ if they fall off the bridge.</p>
<dl class="py attribute">
<dt id="evennia.contrib.tutorials.tutorial_world.rooms.CmdBridgeHelp.search_index_entry">
<code class="sig-name descname">search_index_entry</code><em class="property"> = {'aliases': 'h ?', 'category': 'tutorial world', 'key': 'help', 'no_prefix': ' h ?', 'tags': '', 'text': '\n Overwritten help command while on the bridge.\n '}</em><a class="headerlink" href="#evennia.contrib.tutorials.tutorial_world.rooms.CmdBridgeHelp.search_index_entry" title="Permalink to this definition"></a></dt>
<code class="sig-name descname">search_index_entry</code><em class="property"> = {'aliases': '? h', 'category': 'tutorial world', 'key': 'help', 'no_prefix': ' ? h', 'tags': '', 'text': '\n Overwritten help command while on the bridge.\n '}</em><a class="headerlink" href="#evennia.contrib.tutorials.tutorial_world.rooms.CmdBridgeHelp.search_index_entry" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
</dd></dl>
@ -968,7 +968,7 @@ to find something.</p>
<dl class="py attribute">
<dt id="evennia.contrib.tutorials.tutorial_world.rooms.CmdLookDark.aliases">
<code class="sig-name descname">aliases</code><em class="property"> = ['l', 'fiddle', 'search', 'feel around', 'feel']</em><a class="headerlink" href="#evennia.contrib.tutorials.tutorial_world.rooms.CmdLookDark.aliases" title="Permalink to this definition"></a></dt>
<code class="sig-name descname">aliases</code><em class="property"> = ['fiddle', 'feel around', 'l', 'feel', 'search']</em><a class="headerlink" href="#evennia.contrib.tutorials.tutorial_world.rooms.CmdLookDark.aliases" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
<dl class="py attribute">
@ -996,7 +996,7 @@ random chance of eventually finding a light source.</p>
<dl class="py attribute">
<dt id="evennia.contrib.tutorials.tutorial_world.rooms.CmdLookDark.search_index_entry">
<code class="sig-name descname">search_index_entry</code><em class="property"> = {'aliases': 'l fiddle search feel around feel', 'category': 'tutorialworld', 'key': 'look', 'no_prefix': ' l fiddle search feel around feel', 'tags': '', 'text': '\n Look around in darkness\n\n Usage:\n look\n\n Look around in the darkness, trying\n to find something.\n '}</em><a class="headerlink" href="#evennia.contrib.tutorials.tutorial_world.rooms.CmdLookDark.search_index_entry" title="Permalink to this definition"></a></dt>
<code class="sig-name descname">search_index_entry</code><em class="property"> = {'aliases': 'fiddle feel around l feel search', 'category': 'tutorialworld', 'key': 'look', 'no_prefix': ' fiddle feel around l feel search', 'tags': '', 'text': '\n Look around in darkness\n\n Usage:\n look\n\n Look around in the darkness, trying\n to find something.\n '}</em><a class="headerlink" href="#evennia.contrib.tutorials.tutorial_world.rooms.CmdLookDark.search_index_entry" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
</dd></dl>

View file

@ -208,7 +208,7 @@ git evennia pull - Pull the latest evennia code.</p>
<dl class="py attribute">
<dt id="evennia.contrib.utils.git_integration.git_integration.CmdGitEvennia.directory">
<code class="sig-name descname">directory</code><em class="property"> = '/tmp/tmpufizbudc/1cfd6a0289a457111e4d075a7beca6e9cf84c4e0/evennia'</em><a class="headerlink" href="#evennia.contrib.utils.git_integration.git_integration.CmdGitEvennia.directory" title="Permalink to this definition"></a></dt>
<code class="sig-name descname">directory</code><em class="property"> = '/tmp/tmpl5gju87b/643c5f387ec257e814ec79aa106a303ff3727f4b/evennia'</em><a class="headerlink" href="#evennia.contrib.utils.git_integration.git_integration.CmdGitEvennia.directory" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
<dl class="py attribute">
@ -269,7 +269,7 @@ git pull - Pull the latest code from your current branch.</p>
<dl class="py attribute">
<dt id="evennia.contrib.utils.git_integration.git_integration.CmdGit.directory">
<code class="sig-name descname">directory</code><em class="property"> = '/tmp/tmpufizbudc/1cfd6a0289a457111e4d075a7beca6e9cf84c4e0/evennia/game_template'</em><a class="headerlink" href="#evennia.contrib.utils.git_integration.git_integration.CmdGit.directory" title="Permalink to this definition"></a></dt>
<code class="sig-name descname">directory</code><em class="property"> = '/tmp/tmpl5gju87b/643c5f387ec257e814ec79aa106a303ff3727f4b/evennia/game_template'</em><a class="headerlink" href="#evennia.contrib.utils.git_integration.git_integration.CmdGit.directory" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
<dl class="py attribute">

View file

@ -688,6 +688,7 @@ with q, remove the break line and restart server when finished.</p></li>
<li class="toctree-l2"><a class="reference internal" href="evennia.server.portal.html">evennia.server.portal</a><ul>
<li class="toctree-l3"><a class="reference internal" href="evennia.server.portal.amp.html">evennia.server.portal.amp</a></li>
<li class="toctree-l3"><a class="reference internal" href="evennia.server.portal.amp_server.html">evennia.server.portal.amp_server</a></li>
<li class="toctree-l3"><a class="reference internal" href="evennia.server.portal.discord.html">evennia.server.portal.discord</a></li>
<li class="toctree-l3"><a class="reference internal" href="evennia.server.portal.grapevine.html">evennia.server.portal.grapevine</a></li>
<li class="toctree-l3"><a class="reference internal" href="evennia.server.portal.irc.html">evennia.server.portal.irc</a></li>
<li class="toctree-l3"><a class="reference internal" href="evennia.server.portal.mccp.html">evennia.server.portal.mccp</a></li>

View file

@ -134,6 +134,7 @@ to connect to the game.</p>
<li class="toctree-l1"><a class="reference internal" href="evennia.server.portal.html">evennia.server.portal</a><ul>
<li class="toctree-l2"><a class="reference internal" href="evennia.server.portal.amp.html">evennia.server.portal.amp</a></li>
<li class="toctree-l2"><a class="reference internal" href="evennia.server.portal.amp_server.html">evennia.server.portal.amp_server</a></li>
<li class="toctree-l2"><a class="reference internal" href="evennia.server.portal.discord.html">evennia.server.portal.discord</a></li>
<li class="toctree-l2"><a class="reference internal" href="evennia.server.portal.grapevine.html">evennia.server.portal.grapevine</a></li>
<li class="toctree-l2"><a class="reference internal" href="evennia.server.portal.irc.html">evennia.server.portal.irc</a></li>
<li class="toctree-l2"><a class="reference internal" href="evennia.server.portal.mccp.html">evennia.server.portal.mccp</a></li>

View file

@ -17,7 +17,7 @@
<link rel="shortcut icon" href="../_static/favicon.ico"/>
<link rel="index" title="Index" href="../genindex.html" />
<link rel="search" title="Search" href="../search.html" />
<link rel="next" title="evennia.server.portal.grapevine" href="evennia.server.portal.grapevine.html" />
<link rel="next" title="evennia.server.portal.discord" href="evennia.server.portal.discord.html" />
<link rel="prev" title="evennia.server.portal.amp" href="evennia.server.portal.amp.html" />
</head><body>
<div class="related" role="navigation" aria-label="related navigation">
@ -30,7 +30,7 @@
<a href="../py-modindex.html" title="Python Module Index"
>modules</a> |</li>
<li class="right" >
<a href="evennia.server.portal.grapevine.html" title="evennia.server.portal.grapevine"
<a href="evennia.server.portal.discord.html" title="evennia.server.portal.discord"
accesskey="N">next</a> |</li>
<li class="right" >
<a href="evennia.server.portal.amp.html" title="evennia.server.portal.amp"
@ -68,8 +68,8 @@
<p class="topless"><a href="evennia.server.portal.amp.html"
title="previous chapter">evennia.server.portal.amp</a></p>
<h4>Next topic</h4>
<p class="topless"><a href="evennia.server.portal.grapevine.html"
title="next chapter">evennia.server.portal.grapevine</a></p>
<p class="topless"><a href="evennia.server.portal.discord.html"
title="next chapter">evennia.server.portal.discord</a></p>
<div role="note" aria-label="source link">
<!--h3>This Page</h3-->
<ul class="this-page-menu">
@ -343,7 +343,7 @@ global variables in <strong>evennia/server/amp.py</strong>.</p></li>
<a href="../py-modindex.html" title="Python Module Index"
>modules</a> |</li>
<li class="right" >
<a href="evennia.server.portal.grapevine.html" title="evennia.server.portal.grapevine"
<a href="evennia.server.portal.discord.html" title="evennia.server.portal.discord"
>next</a> |</li>
<li class="right" >
<a href="evennia.server.portal.amp.html" title="evennia.server.portal.amp"

View file

@ -0,0 +1,451 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" /><meta name="generator" content="Docutils 0.17.1: http://docutils.sourceforge.net/" />
<title>evennia.server.portal.discord &#8212; Evennia 1.0-dev documentation</title>
<link rel="stylesheet" href="../_static/nature.css" type="text/css" />
<link rel="stylesheet" href="../_static/pygments.css" type="text/css" />
<script id="documentation_options" data-url_root="../" src="../_static/documentation_options.js"></script>
<script src="../_static/jquery.js"></script>
<script src="../_static/underscore.js"></script>
<script src="../_static/doctools.js"></script>
<script src="../_static/language_data.js"></script>
<link rel="shortcut icon" href="../_static/favicon.ico"/>
<link rel="index" title="Index" href="../genindex.html" />
<link rel="search" title="Search" href="../search.html" />
<link rel="next" title="evennia.server.portal.grapevine" href="evennia.server.portal.grapevine.html" />
<link rel="prev" title="evennia.server.portal.amp_server" href="evennia.server.portal.amp_server.html" />
</head><body>
<div class="related" role="navigation" aria-label="related navigation">
<h3>Navigation</h3>
<ul>
<li class="right" style="margin-right: 10px">
<a href="../genindex.html" title="General Index"
accesskey="I">index</a></li>
<li class="right" >
<a href="../py-modindex.html" title="Python Module Index"
>modules</a> |</li>
<li class="right" >
<a href="evennia.server.portal.grapevine.html" title="evennia.server.portal.grapevine"
accesskey="N">next</a> |</li>
<li class="right" >
<a href="evennia.server.portal.amp_server.html" title="evennia.server.portal.amp_server"
accesskey="P">previous</a> |</li>
<li class="nav-item nav-item-0"><a href="../index.html">Evennia 1.0-dev</a> &#187;</li>
<li class="nav-item nav-item-1"><a href="../Evennia-API.html" >API Summary</a> &#187;</li>
<li class="nav-item nav-item-2"><a href="evennia-api.html" >evennia</a> &#187;</li>
<li class="nav-item nav-item-3"><a href="evennia.html" >evennia</a> &#187;</li>
<li class="nav-item nav-item-4"><a href="evennia.server.html" >evennia.server</a> &#187;</li>
<li class="nav-item nav-item-5"><a href="evennia.server.portal.html" accesskey="U">evennia.server.portal</a> &#187;</li>
<li class="nav-item nav-item-this"><a href="">evennia.server.portal.discord</a></li>
</ul>
<div class="develop">develop branch</div>
</div>
<div class="document">
<div class="documentwrapper">
<div class="sphinxsidebar" role="navigation" aria-label="main navigation">
<div class="sphinxsidebarwrapper">
<p class="logo"><a href="../index.html">
<img class="logo" src="../_static/evennia_logo.png" alt="Logo"/>
</a></p>
<div id="searchbox" style="display: none" role="search">
<h3 id="searchlabel">Quick search</h3>
<div class="searchformwrapper">
<form class="search" action="../search.html" method="get">
<input type="text" name="q" aria-labelledby="searchlabel" />
<input type="submit" value="Go" />
</form>
</div>
</div>
<script>$('#searchbox').show(0);</script>
<h4>Previous topic</h4>
<p class="topless"><a href="evennia.server.portal.amp_server.html"
title="previous chapter">evennia.server.portal.amp_server</a></p>
<h4>Next topic</h4>
<p class="topless"><a href="evennia.server.portal.grapevine.html"
title="next chapter">evennia.server.portal.grapevine</a></p>
<div role="note" aria-label="source link">
<!--h3>This Page</h3-->
<ul class="this-page-menu">
<li><a href="../_sources/api/evennia.server.portal.discord.md.txt"
rel="nofollow">Show Page Source</a></li>
</ul>
</div><h3>Links</h3>
<ul>
<li><a href="https://www.evennia.com">Home page</a> </li>
<li><a href="https://github.com/evennia/evennia">Evennia Github</a> </li>
<li><a href="http://games.evennia.com">Game Index</a> </li>
<li>
<a href="https://discord.gg/AJJpcRUhtF">Discord</a> -
<a href="https://github.com/evennia/evennia/discussions">Discussions</a> -
<a href="https://evennia.blogspot.com/">Blog</a>
</li>
</ul>
<h3>Versions</h3>
<ul>
<li><a href="evennia.server.portal.discord.html">1.0-dev (develop branch)</a></li>
<ul>
<li><a href="../0.9.5/index.html">0.9.5 (v0.9.5 branch)</a></li>
</ul>
</div>
</div>
<div class="bodywrapper">
<div class="body" role="main">
<section id="module-evennia.server.portal.discord">
<span id="evennia-server-portal-discord"></span><h1>evennia.server.portal.discord<a class="headerlink" href="#module-evennia.server.portal.discord" title="Permalink to this headline"></a></h1>
<p>Implements Discord chat channel integration.</p>
<p>The Discord API uses a mix of websockets and REST API endpoints.</p>
<p>In order for this integration to work, you need to have your own
discord bot set up via <a class="reference external" href="https://discord.com/developers/applications">https://discord.com/developers/applications</a>
with the MESSAGE CONTENT toggle switched on, and your bot token
added to <strong>server/conf/secret_settings.py</strong> as your DISCORD_BOT_TOKEN</p>
<dl class="py function">
<dt id="evennia.server.portal.discord.random">
<code class="sig-prename descclassname">evennia.server.portal.discord.</code><code class="sig-name descname">random</code><span class="sig-paren">(</span><span class="sig-paren">)</span> &#x2192; x in the interval [0, 1).<a class="headerlink" href="#evennia.server.portal.discord.random" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
<dl class="py function">
<dt id="evennia.server.portal.discord.should_retry">
<code class="sig-prename descclassname">evennia.server.portal.discord.</code><code class="sig-name descname">should_retry</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">status_code</span></em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/server/portal/discord.html#should_retry"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#evennia.server.portal.discord.should_retry" title="Permalink to this definition"></a></dt>
<dd><p>Helper function to check if the request should be retried later.</p>
<dl class="field-list simple">
<dt class="field-odd">Parameters</dt>
<dd class="field-odd"><p><strong>status_code</strong> (<em>int</em>) </p>
</dd>
<dt class="field-even">Returns</dt>
<dd class="field-even"><p>retry (bool) - True if request should be retried False otherwise</p>
</dd>
</dl>
</dd></dl>
<dl class="py class">
<dt id="evennia.server.portal.discord.DiscordWebsocketServerFactory">
<em class="property">class </em><code class="sig-prename descclassname">evennia.server.portal.discord.</code><code class="sig-name descname">DiscordWebsocketServerFactory</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">sessionhandler</span></em>, <em class="sig-param"><span class="o">*</span><span class="n">args</span></em>, <em class="sig-param"><span class="o">**</span><span class="n">kwargs</span></em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/server/portal/discord.html#DiscordWebsocketServerFactory"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#evennia.server.portal.discord.DiscordWebsocketServerFactory" title="Permalink to this definition"></a></dt>
<dd><p>Bases: <code class="xref py py-class docutils literal notranslate"><span class="pre">autobahn.twisted.websocket.WebSocketClientFactory</span></code>, <code class="xref py py-class docutils literal notranslate"><span class="pre">twisted.internet.protocol.ReconnectingClientFactory</span></code></p>
<p>A variant of the websocket-factory that auto-reconnects.</p>
<dl class="py attribute">
<dt id="evennia.server.portal.discord.DiscordWebsocketServerFactory.initialDelay">
<code class="sig-name descname">initialDelay</code><em class="property"> = 1</em><a class="headerlink" href="#evennia.server.portal.discord.DiscordWebsocketServerFactory.initialDelay" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
<dl class="py attribute">
<dt id="evennia.server.portal.discord.DiscordWebsocketServerFactory.factor">
<code class="sig-name descname">factor</code><em class="property"> = 1.5</em><a class="headerlink" href="#evennia.server.portal.discord.DiscordWebsocketServerFactory.factor" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
<dl class="py attribute">
<dt id="evennia.server.portal.discord.DiscordWebsocketServerFactory.maxDelay">
<code class="sig-name descname">maxDelay</code><em class="property"> = 60</em><a class="headerlink" href="#evennia.server.portal.discord.DiscordWebsocketServerFactory.maxDelay" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
<dl class="py attribute">
<dt id="evennia.server.portal.discord.DiscordWebsocketServerFactory.gateway">
<code class="sig-name descname">gateway</code><em class="property"> = None</em><a class="headerlink" href="#evennia.server.portal.discord.DiscordWebsocketServerFactory.gateway" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
<dl class="py attribute">
<dt id="evennia.server.portal.discord.DiscordWebsocketServerFactory.resume_url">
<code class="sig-name descname">resume_url</code><em class="property"> = None</em><a class="headerlink" href="#evennia.server.portal.discord.DiscordWebsocketServerFactory.resume_url" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
<dl class="py method">
<dt id="evennia.server.portal.discord.DiscordWebsocketServerFactory.__init__">
<code class="sig-name descname">__init__</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">sessionhandler</span></em>, <em class="sig-param"><span class="o">*</span><span class="n">args</span></em>, <em class="sig-param"><span class="o">**</span><span class="n">kwargs</span></em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/server/portal/discord.html#DiscordWebsocketServerFactory.__init__"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#evennia.server.portal.discord.DiscordWebsocketServerFactory.__init__" title="Permalink to this definition"></a></dt>
<dd><p>In addition to all arguments to the constructor of
:func:<strong>autobahn.websocket.interfaces.IWebSocketClientChannelFactory</strong>,
you can supply a <strong>**reactor**</strong> keyword argument to specify the
Twisted reactor to be used.</p>
</dd></dl>
<dl class="py method">
<dt id="evennia.server.portal.discord.DiscordWebsocketServerFactory.get_gateway_url">
<code class="sig-name descname">get_gateway_url</code><span class="sig-paren">(</span><em class="sig-param"><span class="o">*</span><span class="n">args</span></em>, <em class="sig-param"><span class="o">**</span><span class="n">kwargs</span></em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/server/portal/discord.html#DiscordWebsocketServerFactory.get_gateway_url"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#evennia.server.portal.discord.DiscordWebsocketServerFactory.get_gateway_url" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
<dl class="py method">
<dt id="evennia.server.portal.discord.DiscordWebsocketServerFactory.websocket_init">
<code class="sig-name descname">websocket_init</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">payload</span></em>, <em class="sig-param"><span class="o">*</span><span class="n">args</span></em>, <em class="sig-param"><span class="o">**</span><span class="n">kwargs</span></em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/server/portal/discord.html#DiscordWebsocketServerFactory.websocket_init"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#evennia.server.portal.discord.DiscordWebsocketServerFactory.websocket_init" title="Permalink to this definition"></a></dt>
<dd><p>callback for when the URL is gotten</p>
</dd></dl>
<dl class="py method">
<dt id="evennia.server.portal.discord.DiscordWebsocketServerFactory.buildProtocol">
<code class="sig-name descname">buildProtocol</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">addr</span></em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/server/portal/discord.html#DiscordWebsocketServerFactory.buildProtocol"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#evennia.server.portal.discord.DiscordWebsocketServerFactory.buildProtocol" title="Permalink to this definition"></a></dt>
<dd><p>Build new instance of protocol</p>
<dl class="field-list simple">
<dt class="field-odd">Parameters</dt>
<dd class="field-odd"><p><strong>addr</strong> (<em>str</em>) Not used, using factory/settings data</p>
</dd>
</dl>
</dd></dl>
<dl class="py method">
<dt id="evennia.server.portal.discord.DiscordWebsocketServerFactory.startedConnecting">
<code class="sig-name descname">startedConnecting</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">connector</span></em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/server/portal/discord.html#DiscordWebsocketServerFactory.startedConnecting"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#evennia.server.portal.discord.DiscordWebsocketServerFactory.startedConnecting" title="Permalink to this definition"></a></dt>
<dd><p>Tracks reconnections for debugging.</p>
<dl class="field-list simple">
<dt class="field-odd">Parameters</dt>
<dd class="field-odd"><p><strong>connector</strong> (<em>Connector</em>) Represents the connection.</p>
</dd>
</dl>
</dd></dl>
<dl class="py method">
<dt id="evennia.server.portal.discord.DiscordWebsocketServerFactory.clientConnectionFailed">
<code class="sig-name descname">clientConnectionFailed</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">connector</span></em>, <em class="sig-param"><span class="n">reason</span></em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/server/portal/discord.html#DiscordWebsocketServerFactory.clientConnectionFailed"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#evennia.server.portal.discord.DiscordWebsocketServerFactory.clientConnectionFailed" title="Permalink to this definition"></a></dt>
<dd><p>Called when Client failed to connect.</p>
<dl class="field-list simple">
<dt class="field-odd">Parameters</dt>
<dd class="field-odd"><ul class="simple">
<li><p><strong>connector</strong> (<em>Connection</em>) Represents the connection.</p></li>
<li><p><strong>reason</strong> (<em>str</em>) The reason for the failure.</p></li>
</ul>
</dd>
</dl>
</dd></dl>
<dl class="py method">
<dt id="evennia.server.portal.discord.DiscordWebsocketServerFactory.clientConnectionLost">
<code class="sig-name descname">clientConnectionLost</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">connector</span></em>, <em class="sig-param"><span class="n">reason</span></em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/server/portal/discord.html#DiscordWebsocketServerFactory.clientConnectionLost"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#evennia.server.portal.discord.DiscordWebsocketServerFactory.clientConnectionLost" title="Permalink to this definition"></a></dt>
<dd><p>Called when Client loses connection.</p>
<dl class="field-list simple">
<dt class="field-odd">Parameters</dt>
<dd class="field-odd"><ul class="simple">
<li><p><strong>connector</strong> (<em>Connection</em>) Represents the connection.</p></li>
<li><p><strong>reason</strong> (<em>str</em>) The reason for the failure.</p></li>
</ul>
</dd>
</dl>
</dd></dl>
<dl class="py method">
<dt id="evennia.server.portal.discord.DiscordWebsocketServerFactory.reconnect">
<code class="sig-name descname">reconnect</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/server/portal/discord.html#DiscordWebsocketServerFactory.reconnect"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#evennia.server.portal.discord.DiscordWebsocketServerFactory.reconnect" title="Permalink to this definition"></a></dt>
<dd><p>Force a reconnection of the bot protocol. This requires
de-registering the session and then reattaching a new one.</p>
</dd></dl>
<dl class="py method">
<dt id="evennia.server.portal.discord.DiscordWebsocketServerFactory.start">
<code class="sig-name descname">start</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/server/portal/discord.html#DiscordWebsocketServerFactory.start"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#evennia.server.portal.discord.DiscordWebsocketServerFactory.start" title="Permalink to this definition"></a></dt>
<dd><p>Connect protocol to remote server</p>
</dd></dl>
</dd></dl>
<dl class="py class">
<dt id="evennia.server.portal.discord.DiscordClient">
<em class="property">class </em><code class="sig-prename descclassname">evennia.server.portal.discord.</code><code class="sig-name descname">DiscordClient</code><a class="reference internal" href="../_modules/evennia/server/portal/discord.html#DiscordClient"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#evennia.server.portal.discord.DiscordClient" title="Permalink to this definition"></a></dt>
<dd><p>Bases: <code class="xref py py-class docutils literal notranslate"><span class="pre">autobahn.twisted.websocket.WebSocketClientProtocol</span></code>, <a class="reference internal" href="evennia.server.session.html#evennia.server.session.Session" title="evennia.server.session.Session"><code class="xref py py-class docutils literal notranslate"><span class="pre">evennia.server.session.Session</span></code></a></p>
<p>Implements the grapevine client</p>
<dl class="py attribute">
<dt id="evennia.server.portal.discord.DiscordClient.nextHeartbeatCall">
<code class="sig-name descname">nextHeartbeatCall</code><em class="property"> = None</em><a class="headerlink" href="#evennia.server.portal.discord.DiscordClient.nextHeartbeatCall" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
<dl class="py attribute">
<dt id="evennia.server.portal.discord.DiscordClient.pending_heartbeat">
<code class="sig-name descname">pending_heartbeat</code><em class="property"> = False</em><a class="headerlink" href="#evennia.server.portal.discord.DiscordClient.pending_heartbeat" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
<dl class="py attribute">
<dt id="evennia.server.portal.discord.DiscordClient.heartbeat_interval">
<code class="sig-name descname">heartbeat_interval</code><em class="property"> = None</em><a class="headerlink" href="#evennia.server.portal.discord.DiscordClient.heartbeat_interval" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
<dl class="py attribute">
<dt id="evennia.server.portal.discord.DiscordClient.last_sequence">
<code class="sig-name descname">last_sequence</code><em class="property"> = 0</em><a class="headerlink" href="#evennia.server.portal.discord.DiscordClient.last_sequence" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
<dl class="py attribute">
<dt id="evennia.server.portal.discord.DiscordClient.session_id">
<code class="sig-name descname">session_id</code><em class="property"> = None</em><a class="headerlink" href="#evennia.server.portal.discord.DiscordClient.session_id" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
<dl class="py attribute">
<dt id="evennia.server.portal.discord.DiscordClient.discord_id">
<code class="sig-name descname">discord_id</code><em class="property"> = None</em><a class="headerlink" href="#evennia.server.portal.discord.DiscordClient.discord_id" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
<dl class="py method">
<dt id="evennia.server.portal.discord.DiscordClient.__init__">
<code class="sig-name descname">__init__</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/server/portal/discord.html#DiscordClient.__init__"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#evennia.server.portal.discord.DiscordClient.__init__" title="Permalink to this definition"></a></dt>
<dd><p>Initialize self. See help(type(self)) for accurate signature.</p>
</dd></dl>
<dl class="py method">
<dt id="evennia.server.portal.discord.DiscordClient.at_login">
<code class="sig-name descname">at_login</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/server/portal/discord.html#DiscordClient.at_login"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#evennia.server.portal.discord.DiscordClient.at_login" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
<dl class="py method">
<dt id="evennia.server.portal.discord.DiscordClient.onOpen">
<code class="sig-name descname">onOpen</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/server/portal/discord.html#DiscordClient.onOpen"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#evennia.server.portal.discord.DiscordClient.onOpen" title="Permalink to this definition"></a></dt>
<dd><p>Called when connection is established.</p>
</dd></dl>
<dl class="py method">
<dt id="evennia.server.portal.discord.DiscordClient.onMessage">
<code class="sig-name descname">onMessage</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">payload</span></em>, <em class="sig-param"><span class="n">isBinary</span></em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/server/portal/discord.html#DiscordClient.onMessage"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#evennia.server.portal.discord.DiscordClient.onMessage" title="Permalink to this definition"></a></dt>
<dd><p>Callback fired when a complete WebSocket message was received.</p>
<dl class="field-list simple">
<dt class="field-odd">Parameters</dt>
<dd class="field-odd"><ul class="simple">
<li><p><strong>payload</strong> (<em>bytes</em>) The WebSocket message received.</p></li>
<li><p><strong>isBinary</strong> (<em>bool</em>) Flag indicating whether payload is binary or
UTF-8 encoded text.</p></li>
</ul>
</dd>
</dl>
</dd></dl>
<dl class="py method">
<dt id="evennia.server.portal.discord.DiscordClient.onClose">
<code class="sig-name descname">onClose</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">wasClean</span></em>, <em class="sig-param"><span class="n">code</span><span class="o">=</span><span class="default_value">None</span></em>, <em class="sig-param"><span class="n">reason</span><span class="o">=</span><span class="default_value">None</span></em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/server/portal/discord.html#DiscordClient.onClose"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#evennia.server.portal.discord.DiscordClient.onClose" title="Permalink to this definition"></a></dt>
<dd><p>This is executed when the connection is lost for whatever
reason. it can also be called directly, from the disconnect
method.</p>
<dl class="field-list simple">
<dt class="field-odd">Parameters</dt>
<dd class="field-odd"><ul class="simple">
<li><p><strong>wasClean</strong> (<em>bool</em>) <strong>**True**</strong> if the WebSocket was closed cleanly.</p></li>
<li><p><strong>code</strong> (<em>int</em><em> or </em><em>None</em>) Close status as sent by the WebSocket peer.</p></li>
<li><p><strong>reason</strong> (<em>str</em><em> or </em><em>None</em>) Close reason as sent by the WebSocket peer.</p></li>
</ul>
</dd>
</dl>
</dd></dl>
<dl class="py method">
<dt id="evennia.server.portal.discord.DiscordClient.post_response">
<code class="sig-name descname">post_response</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">body</span></em>, <em class="sig-param"><span class="o">**</span><span class="n">kwargs</span></em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/server/portal/discord.html#DiscordClient.post_response"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#evennia.server.portal.discord.DiscordClient.post_response" title="Permalink to this definition"></a></dt>
<dd><p>Process the response from sending a POST request</p>
<dl class="field-list simple">
<dt class="field-odd">Parameters</dt>
<dd class="field-odd"><p><strong>body</strong> (<em>bytes</em>) </p>
</dd>
</dl>
</dd></dl>
<dl class="py method">
<dt id="evennia.server.portal.discord.DiscordClient.handle_error">
<code class="sig-name descname">handle_error</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">data</span></em>, <em class="sig-param"><span class="o">**</span><span class="n">kwargs</span></em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/server/portal/discord.html#DiscordClient.handle_error"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#evennia.server.portal.discord.DiscordClient.handle_error" title="Permalink to this definition"></a></dt>
<dd><p>General hook for processing errors.</p>
<dl class="field-list simple">
<dt class="field-odd">Parameters</dt>
<dd class="field-odd"><p><strong>data</strong> (<em>dict</em>) </p>
</dd>
</dl>
</dd></dl>
<dl class="py method">
<dt id="evennia.server.portal.discord.DiscordClient.resume">
<code class="sig-name descname">resume</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/server/portal/discord.html#DiscordClient.resume"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#evennia.server.portal.discord.DiscordClient.resume" title="Permalink to this definition"></a></dt>
<dd><p>Called after a reconnection to re-identify and replay missed events</p>
</dd></dl>
<dl class="py method">
<dt id="evennia.server.portal.discord.DiscordClient.disconnect">
<code class="sig-name descname">disconnect</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">reason</span><span class="o">=</span><span class="default_value">None</span></em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/server/portal/discord.html#DiscordClient.disconnect"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#evennia.server.portal.discord.DiscordClient.disconnect" title="Permalink to this definition"></a></dt>
<dd><p>Generic hook for the engine to call in order to
disconnect this protocol.</p>
<dl class="field-list simple">
<dt class="field-odd">Parameters</dt>
<dd class="field-odd"><p><strong>reason</strong> (<em>str</em><em> or </em><em>None</em>) Motivation for the disconnection.</p>
</dd>
</dl>
</dd></dl>
<dl class="py method">
<dt id="evennia.server.portal.discord.DiscordClient.identify">
<code class="sig-name descname">identify</code><span class="sig-paren">(</span><em class="sig-param"><span class="o">*</span><span class="n">args</span></em>, <em class="sig-param"><span class="o">**</span><span class="n">kwargs</span></em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/server/portal/discord.html#DiscordClient.identify"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#evennia.server.portal.discord.DiscordClient.identify" title="Permalink to this definition"></a></dt>
<dd><p>Send Discord authentication. This should be sent once heartbeats begin.</p>
</dd></dl>
<dl class="py method">
<dt id="evennia.server.portal.discord.DiscordClient.connection_ready">
<code class="sig-name descname">connection_ready</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">data</span></em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/server/portal/discord.html#DiscordClient.connection_ready"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#evennia.server.portal.discord.DiscordClient.connection_ready" title="Permalink to this definition"></a></dt>
<dd><p>Process READY data for relevant bot info.</p>
</dd></dl>
<dl class="py method">
<dt id="evennia.server.portal.discord.DiscordClient.doHeartbeat">
<code class="sig-name descname">doHeartbeat</code><span class="sig-paren">(</span><em class="sig-param"><span class="o">*</span><span class="n">args</span></em>, <em class="sig-param"><span class="o">**</span><span class="n">kwargs</span></em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/server/portal/discord.html#DiscordClient.doHeartbeat"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#evennia.server.portal.discord.DiscordClient.doHeartbeat" title="Permalink to this definition"></a></dt>
<dd><p>Send heartbeat to Discord.</p>
</dd></dl>
<dl class="py method">
<dt id="evennia.server.portal.discord.DiscordClient.send_channel">
<code class="sig-name descname">send_channel</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">text</span></em>, <em class="sig-param"><span class="n">channel_id</span></em>, <em class="sig-param"><span class="o">**</span><span class="n">kwargs</span></em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/server/portal/discord.html#DiscordClient.send_channel"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#evennia.server.portal.discord.DiscordClient.send_channel" title="Permalink to this definition"></a></dt>
<dd><p>Send a message from an Evennia channel to a Discord channel.</p>
<p>Use with session.msg(channel=(message, channel, sender))</p>
</dd></dl>
<dl class="py method">
<dt id="evennia.server.portal.discord.DiscordClient.send_default">
<code class="sig-name descname">send_default</code><span class="sig-paren">(</span><em class="sig-param"><span class="o">*</span><span class="n">args</span></em>, <em class="sig-param"><span class="o">**</span><span class="n">kwargs</span></em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/server/portal/discord.html#DiscordClient.send_default"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#evennia.server.portal.discord.DiscordClient.send_default" title="Permalink to this definition"></a></dt>
<dd><p>Ignore other outputfuncs</p>
</dd></dl>
<dl class="py method">
<dt id="evennia.server.portal.discord.DiscordClient.data_in">
<code class="sig-name descname">data_in</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">data</span></em>, <em class="sig-param"><span class="o">**</span><span class="n">kwargs</span></em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/server/portal/discord.html#DiscordClient.data_in"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#evennia.server.portal.discord.DiscordClient.data_in" title="Permalink to this definition"></a></dt>
<dd><p>Process incoming data from Discord and sent to the Evennia server</p>
<dl class="field-list simple">
<dt class="field-odd">Parameters</dt>
<dd class="field-odd"><p><strong>data</strong> (<em>dict</em>) Converted json data.</p>
</dd>
</dl>
</dd></dl>
</dd></dl>
</section>
</div>
</div>
</div>
</div>
<div class="related" role="navigation" aria-label="related navigation">
<h3>Navigation</h3>
<ul>
<li class="right" style="margin-right: 10px">
<a href="../genindex.html" title="General Index"
>index</a></li>
<li class="right" >
<a href="../py-modindex.html" title="Python Module Index"
>modules</a> |</li>
<li class="right" >
<a href="evennia.server.portal.grapevine.html" title="evennia.server.portal.grapevine"
>next</a> |</li>
<li class="right" >
<a href="evennia.server.portal.amp_server.html" title="evennia.server.portal.amp_server"
>previous</a> |</li>
<li class="nav-item nav-item-0"><a href="../index.html">Evennia 1.0-dev</a> &#187;</li>
<li class="nav-item nav-item-1"><a href="../Evennia-API.html" >API Summary</a> &#187;</li>
<li class="nav-item nav-item-2"><a href="evennia-api.html" >evennia</a> &#187;</li>
<li class="nav-item nav-item-3"><a href="evennia.html" >evennia</a> &#187;</li>
<li class="nav-item nav-item-4"><a href="evennia.server.html" >evennia.server</a> &#187;</li>
<li class="nav-item nav-item-5"><a href="evennia.server.portal.html" >evennia.server.portal</a> &#187;</li>
<li class="nav-item nav-item-this"><a href="">evennia.server.portal.discord</a></li>
</ul>
<div class="develop">develop branch</div>
</div>
<div class="footer" role="contentinfo">
&#169; Copyright 2022, The Evennia developer community.
Created using <a href="https://www.sphinx-doc.org/">Sphinx</a> 3.2.1.
</div>
</body>
</html>

View file

@ -18,7 +18,7 @@
<link rel="index" title="Index" href="../genindex.html" />
<link rel="search" title="Search" href="../search.html" />
<link rel="next" title="evennia.server.portal.irc" href="evennia.server.portal.irc.html" />
<link rel="prev" title="evennia.server.portal.amp_server" href="evennia.server.portal.amp_server.html" />
<link rel="prev" title="evennia.server.portal.discord" href="evennia.server.portal.discord.html" />
</head><body>
<div class="related" role="navigation" aria-label="related navigation">
<h3>Navigation</h3>
@ -33,7 +33,7 @@
<a href="evennia.server.portal.irc.html" title="evennia.server.portal.irc"
accesskey="N">next</a> |</li>
<li class="right" >
<a href="evennia.server.portal.amp_server.html" title="evennia.server.portal.amp_server"
<a href="evennia.server.portal.discord.html" title="evennia.server.portal.discord"
accesskey="P">previous</a> |</li>
<li class="nav-item nav-item-0"><a href="../index.html">Evennia 1.0-dev</a> &#187;</li>
<li class="nav-item nav-item-1"><a href="../Evennia-API.html" >API Summary</a> &#187;</li>
@ -65,8 +65,8 @@
</div>
<script>$('#searchbox').show(0);</script>
<h4>Previous topic</h4>
<p class="topless"><a href="evennia.server.portal.amp_server.html"
title="previous chapter">evennia.server.portal.amp_server</a></p>
<p class="topless"><a href="evennia.server.portal.discord.html"
title="previous chapter">evennia.server.portal.discord</a></p>
<h4>Next topic</h4>
<p class="topless"><a href="evennia.server.portal.irc.html"
title="next chapter">evennia.server.portal.irc</a></p>
@ -343,7 +343,7 @@ disconnect this protocol.</p>
<a href="evennia.server.portal.irc.html" title="evennia.server.portal.irc"
>next</a> |</li>
<li class="right" >
<a href="evennia.server.portal.amp_server.html" title="evennia.server.portal.amp_server"
<a href="evennia.server.portal.discord.html" title="evennia.server.portal.discord"
>previous</a> |</li>
<li class="nav-item nav-item-0"><a href="../index.html">Evennia 1.0-dev</a> &#187;</li>
<li class="nav-item nav-item-1"><a href="../Evennia-API.html" >API Summary</a> &#187;</li>

View file

@ -105,6 +105,7 @@
<ul>
<li class="toctree-l1"><a class="reference internal" href="evennia.server.portal.amp.html">evennia.server.portal.amp</a></li>
<li class="toctree-l1"><a class="reference internal" href="evennia.server.portal.amp_server.html">evennia.server.portal.amp_server</a></li>
<li class="toctree-l1"><a class="reference internal" href="evennia.server.portal.discord.html">evennia.server.portal.discord</a></li>
<li class="toctree-l1"><a class="reference internal" href="evennia.server.portal.grapevine.html">evennia.server.portal.grapevine</a></li>
<li class="toctree-l1"><a class="reference internal" href="evennia.server.portal.irc.html">evennia.server.portal.irc</a></li>
<li class="toctree-l1"><a class="reference internal" href="evennia.server.portal.mccp.html">evennia.server.portal.mccp</a></li>

View file

@ -336,7 +336,7 @@ indentation.</p>
<dl class="py attribute">
<dt id="evennia.utils.eveditor.CmdEditorGroup.aliases">
<code class="sig-name descname">aliases</code><em class="property"> = [':::', ':x', ':=', ':uu', ':q!', ':r', ':j', ':p', ':u', ':&lt;', ':q', '::', ':i', ':f', ':A', ':DD', ':w', ':fd', ':y', ':!', ':UU', ':fi', ':wq', ':', ':echo', ':I', ':&gt;', ':h', ':dd', ':dw', ':s', ':S']</em><a class="headerlink" href="#evennia.utils.eveditor.CmdEditorGroup.aliases" title="Permalink to this definition"></a></dt>
<code class="sig-name descname">aliases</code><em class="property"> = [':', ':r', ':q!', ':!', ':f', ':=', ':p', ':i', ':w', ':fd', ':dd', ':A', ':x', ':dw', ':j', ':::', ':DD', ':&lt;', ':fi', ':&gt;', ':I', ':echo', ':S', ':y', ':s', ':h', ':UU', ':uu', ':u', '::', ':wq', ':q']</em><a class="headerlink" href="#evennia.utils.eveditor.CmdEditorGroup.aliases" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
<dl class="py attribute">
@ -364,7 +364,7 @@ efficient presentation.</p>
<dl class="py attribute">
<dt id="evennia.utils.eveditor.CmdEditorGroup.search_index_entry">
<code class="sig-name descname">search_index_entry</code><em class="property"> = {'aliases': '::: :x := :uu :q! :r :j :p :u :&lt; :q :: :i :f :A :DD :w :fd :y :! :UU :fi :wq : :echo :I :&gt; :h :dd :dw :s :S', 'category': 'general', 'key': ':editor_command_group', 'no_prefix': ' ::: :x := :uu :q! :r :j :p :u :&lt; :q :: :i :f :A :DD :w :fd :y :! :UU :fi :wq : :echo :I :&gt; :h :dd :dw :s :S', 'tags': '', 'text': '\n Commands for the editor\n '}</em><a class="headerlink" href="#evennia.utils.eveditor.CmdEditorGroup.search_index_entry" title="Permalink to this definition"></a></dt>
<code class="sig-name descname">search_index_entry</code><em class="property"> = {'aliases': ': :r :q! :! :f := :p :i :w :fd :dd :A :x :dw :j ::: :DD :&lt; :fi :&gt; :I :echo :S :y :s :h :UU :uu :u :: :wq :q', 'category': 'general', 'key': ':editor_command_group', 'no_prefix': ' : :r :q! :! :f := :p :i :w :fd :dd :A :x :dw :j ::: :DD :&lt; :fi :&gt; :I :echo :S :y :s :h :UU :uu :u :: :wq :q', 'tags': '', 'text': '\n Commands for the editor\n '}</em><a class="headerlink" href="#evennia.utils.eveditor.CmdEditorGroup.search_index_entry" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
</dd></dl>

View file

@ -931,7 +931,7 @@ single question.</p>
<dl class="py attribute">
<dt id="evennia.utils.evmenu.CmdYesNoQuestion.aliases">
<code class="sig-name descname">aliases</code><em class="property"> = ['yes', '__nomatch_command', 'a', 'y', 'no', 'abort', 'n']</em><a class="headerlink" href="#evennia.utils.evmenu.CmdYesNoQuestion.aliases" title="Permalink to this definition"></a></dt>
<code class="sig-name descname">aliases</code><em class="property"> = ['yes', 'abort', 'y', 'a', 'no', 'n', '__nomatch_command']</em><a class="headerlink" href="#evennia.utils.evmenu.CmdYesNoQuestion.aliases" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
<dl class="py attribute">
@ -957,7 +957,7 @@ single question.</p>
<dl class="py attribute">
<dt id="evennia.utils.evmenu.CmdYesNoQuestion.search_index_entry">
<code class="sig-name descname">search_index_entry</code><em class="property"> = {'aliases': 'yes __nomatch_command a y no abort n', 'category': 'general', 'key': '__noinput_command', 'no_prefix': ' yes __nomatch_command a y no abort n', 'tags': '', 'text': '\n Handle a prompt for yes or no. Press [return] for the default choice.\n\n '}</em><a class="headerlink" href="#evennia.utils.evmenu.CmdYesNoQuestion.search_index_entry" title="Permalink to this definition"></a></dt>
<code class="sig-name descname">search_index_entry</code><em class="property"> = {'aliases': 'yes abort y a no n __nomatch_command', 'category': 'general', 'key': '__noinput_command', 'no_prefix': ' yes abort y a no n __nomatch_command', 'tags': '', 'text': '\n Handle a prompt for yes or no. Press [return] for the default choice.\n\n '}</em><a class="headerlink" href="#evennia.utils.evmenu.CmdYesNoQuestion.search_index_entry" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
</dd></dl>

View file

@ -137,7 +137,7 @@ the <strong>caller.msg()</strong> construct every time the page is updated.</p>
<dl class="py attribute">
<dt id="evennia.utils.evmore.CmdMore.aliases">
<code class="sig-name descname">aliases</code><em class="property"> = ['n', 'a', 'end', 'previous', 't', 'p', 'abort', 'e', 'next', 'quit', 'top', 'q']</em><a class="headerlink" href="#evennia.utils.evmore.CmdMore.aliases" title="Permalink to this definition"></a></dt>
<code class="sig-name descname">aliases</code><em class="property"> = ['q', 'abort', 't', 'next', 'e', 'end', 'a', 'quit', 'n', 'previous', 'top', 'p']</em><a class="headerlink" href="#evennia.utils.evmore.CmdMore.aliases" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
<dl class="py attribute">
@ -163,7 +163,7 @@ the <strong>caller.msg()</strong> construct every time the page is updated.</p>
<dl class="py attribute">
<dt id="evennia.utils.evmore.CmdMore.search_index_entry">
<code class="sig-name descname">search_index_entry</code><em class="property"> = {'aliases': 'n a end previous t p abort e next quit top q', 'category': 'general', 'key': '__noinput_command', 'no_prefix': ' n a end previous t p abort e next quit top q', 'tags': '', 'text': '\n Manipulate the text paging. Catch no-input with aliases.\n '}</em><a class="headerlink" href="#evennia.utils.evmore.CmdMore.search_index_entry" title="Permalink to this definition"></a></dt>
<code class="sig-name descname">search_index_entry</code><em class="property"> = {'aliases': 'q abort t next e end a quit n previous top p', 'category': 'general', 'key': '__noinput_command', 'no_prefix': ' q abort t next e end a quit n previous top p', 'tags': '', 'text': '\n Manipulate the text paging. Catch no-input with aliases.\n '}</em><a class="headerlink" href="#evennia.utils.evmore.CmdMore.search_index_entry" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
</dd></dl>

View file

@ -251,6 +251,10 @@
<li><a href="api/evennia.server.portal.amp.html#evennia.server.portal.amp.AMPMultiConnectionProtocol.__init__">(evennia.server.portal.amp.AMPMultiConnectionProtocol method)</a>
</li>
<li><a href="api/evennia.server.portal.amp_server.html#evennia.server.portal.amp_server.AMPServerFactory.__init__">(evennia.server.portal.amp_server.AMPServerFactory method)</a>
</li>
<li><a href="api/evennia.server.portal.discord.html#evennia.server.portal.discord.DiscordClient.__init__">(evennia.server.portal.discord.DiscordClient method)</a>
</li>
<li><a href="api/evennia.server.portal.discord.html#evennia.server.portal.discord.DiscordWebsocketServerFactory.__init__">(evennia.server.portal.discord.DiscordWebsocketServerFactory method)</a>
</li>
<li><a href="api/evennia.server.portal.grapevine.html#evennia.server.portal.grapevine.GrapevineClient.__init__">(evennia.server.portal.grapevine.GrapevineClient method)</a>
</li>
@ -1519,10 +1523,10 @@
</li>
<li><a href="api/evennia.locks.lockhandler.html#evennia.locks.lockhandler.LockHandler.append">append() (evennia.locks.lockhandler.LockHandler method)</a>
</li>
</ul></td>
<td style="width: 33%; vertical-align: top;"><ul>
<li><a href="api/evennia.server.portal.telnet.html#evennia.server.portal.telnet.TelnetProtocol.applicationDataReceived">applicationDataReceived() (evennia.server.portal.telnet.TelnetProtocol method)</a>
</li>
</ul></td>
<td style="width: 33%; vertical-align: top;"><ul>
<li><a href="api/evennia.contrib.tutorials.evadventure.chargen.html#evennia.contrib.tutorials.evadventure.chargen.TemporaryCharacterSheet.apply">apply() (evennia.contrib.tutorials.evadventure.chargen.TemporaryCharacterSheet method)</a>
</li>
<li><a href="api/evennia.contrib.game_systems.turnbattle.tb_basic.html#evennia.contrib.game_systems.turnbattle.tb_basic.BasicCombatRules.apply_damage">apply_damage() (evennia.contrib.game_systems.turnbattle.tb_basic.BasicCombatRules method)</a>
@ -2063,9 +2067,11 @@
</li>
<li><a href="api/evennia.contrib.full_systems.evscaperoom.objects.html#evennia.contrib.full_systems.evscaperoom.objects.Openable.at_locked">at_locked() (evennia.contrib.full_systems.evscaperoom.objects.Openable method)</a>
</li>
<li><a href="api/evennia.server.portal.grapevine.html#evennia.server.portal.grapevine.GrapevineClient.at_login">at_login() (evennia.server.portal.grapevine.GrapevineClient method)</a>
<li><a href="api/evennia.server.portal.discord.html#evennia.server.portal.discord.DiscordClient.at_login">at_login() (evennia.server.portal.discord.DiscordClient method)</a>
<ul>
<li><a href="api/evennia.server.portal.grapevine.html#evennia.server.portal.grapevine.GrapevineClient.at_login">(evennia.server.portal.grapevine.GrapevineClient method)</a>
</li>
<li><a href="api/evennia.server.portal.irc.html#evennia.server.portal.irc.IRCBot.at_login">(evennia.server.portal.irc.IRCBot method)</a>
</li>
<li><a href="api/evennia.server.portal.ssh.html#evennia.server.portal.ssh.SshProtocol.at_login">(evennia.server.portal.ssh.SshProtocol method)</a>
@ -2897,10 +2903,10 @@
<li><a href="api/evennia.objects.objects.html#evennia.objects.objects.DefaultRoom.basetype_setup">(evennia.objects.objects.DefaultRoom method)</a>
</li>
</ul></li>
</ul></td>
<td style="width: 33%; vertical-align: top;"><ul>
<li><a href="api/evennia.web.api.filters.html#evennia.web.api.filters.BaseTypeclassFilterSet">BaseTypeclassFilterSet (class in evennia.web.api.filters)</a>
</li>
</ul></td>
<td style="width: 33%; vertical-align: top;"><ul>
<li><a href="api/evennia.contrib.game_systems.turnbattle.tb_basic.html#evennia.contrib.game_systems.turnbattle.tb_basic.BasicCombatRules">BasicCombatRules (class in evennia.contrib.game_systems.turnbattle.tb_basic)</a>
</li>
<li><a href="api/evennia.contrib.grid.xyzgrid.xymap_legend.html#evennia.contrib.grid.xyzgrid.xymap_legend.BasicMapNode">BasicMapNode (class in evennia.contrib.grid.xyzgrid.xymap_legend)</a>
@ -3025,6 +3031,8 @@
<ul>
<li><a href="api/evennia.server.portal.amp_server.html#evennia.server.portal.amp_server.AMPServerFactory.buildProtocol">(evennia.server.portal.amp_server.AMPServerFactory method)</a>
</li>
<li><a href="api/evennia.server.portal.discord.html#evennia.server.portal.discord.DiscordWebsocketServerFactory.buildProtocol">(evennia.server.portal.discord.DiscordWebsocketServerFactory method)</a>
</li>
<li><a href="api/evennia.server.portal.grapevine.html#evennia.server.portal.grapevine.RestartingWebsocketServerFactory.buildProtocol">(evennia.server.portal.grapevine.RestartingWebsocketServerFactory method)</a>
</li>
@ -3490,6 +3498,8 @@
<li><a href="api/evennia.server.amp_client.html#evennia.server.amp_client.AMPClientFactory.clientConnectionFailed">clientConnectionFailed() (evennia.server.amp_client.AMPClientFactory method)</a>
<ul>
<li><a href="api/evennia.server.portal.discord.html#evennia.server.portal.discord.DiscordWebsocketServerFactory.clientConnectionFailed">(evennia.server.portal.discord.DiscordWebsocketServerFactory method)</a>
</li>
<li><a href="api/evennia.server.portal.grapevine.html#evennia.server.portal.grapevine.RestartingWebsocketServerFactory.clientConnectionFailed">(evennia.server.portal.grapevine.RestartingWebsocketServerFactory method)</a>
</li>
<li><a href="api/evennia.server.portal.irc.html#evennia.server.portal.irc.IRCBotFactory.clientConnectionFailed">(evennia.server.portal.irc.IRCBotFactory method)</a>
@ -3498,6 +3508,8 @@
<li><a href="api/evennia.server.amp_client.html#evennia.server.amp_client.AMPClientFactory.clientConnectionLost">clientConnectionLost() (evennia.server.amp_client.AMPClientFactory method)</a>
<ul>
<li><a href="api/evennia.server.portal.discord.html#evennia.server.portal.discord.DiscordWebsocketServerFactory.clientConnectionLost">(evennia.server.portal.discord.DiscordWebsocketServerFactory method)</a>
</li>
<li><a href="api/evennia.server.portal.grapevine.html#evennia.server.portal.grapevine.RestartingWebsocketServerFactory.clientConnectionLost">(evennia.server.portal.grapevine.RestartingWebsocketServerFactory method)</a>
</li>
<li><a href="api/evennia.server.portal.irc.html#evennia.server.portal.irc.IRCBotFactory.clientConnectionLost">(evennia.server.portal.irc.IRCBotFactory method)</a>
@ -4351,6 +4363,8 @@
<li><a href="api/evennia.server.portal.portalsessionhandler.html#evennia.server.portal.portalsessionhandler.PortalSessionHandler.connect">(evennia.server.portal.portalsessionhandler.PortalSessionHandler method)</a>
</li>
</ul></li>
<li><a href="api/evennia.server.portal.discord.html#evennia.server.portal.discord.DiscordClient.connection_ready">connection_ready() (evennia.server.portal.discord.DiscordClient method)</a>
</li>
<li><a href="api/evennia.accounts.accounts.html#evennia.accounts.accounts.DefaultAccount.connection_time">connection_time() (evennia.accounts.accounts.DefaultAccount property)</a>
<ul>
@ -4709,6 +4723,8 @@
<ul>
<li><a href="api/evennia.server.portal.amp.html#evennia.server.portal.amp.AMPMultiConnectionProtocol.data_in">(evennia.server.portal.amp.AMPMultiConnectionProtocol method)</a>
</li>
<li><a href="api/evennia.server.portal.discord.html#evennia.server.portal.discord.DiscordClient.data_in">(evennia.server.portal.discord.DiscordClient method)</a>
</li>
<li><a href="api/evennia.server.portal.grapevine.html#evennia.server.portal.grapevine.GrapevineClient.data_in">(evennia.server.portal.grapevine.GrapevineClient method)</a>
</li>
@ -5195,12 +5211,12 @@
</li>
<li><a href="api/evennia.objects.objects.html#evennia.objects.objects.DefaultRoom.MultipleObjectsReturned">DefaultRoom.MultipleObjectsReturned</a>
</li>
</ul></td>
<td style="width: 33%; vertical-align: top;"><ul>
<li><a href="api/evennia.scripts.scripts.html#evennia.scripts.scripts.DefaultScript">DefaultScript (class in evennia.scripts.scripts)</a>
</li>
<li><a href="api/evennia.scripts.scripts.html#evennia.scripts.scripts.DefaultScript.DoesNotExist">DefaultScript.DoesNotExist</a>
</li>
</ul></td>
<td style="width: 33%; vertical-align: top;"><ul>
<li><a href="api/evennia.scripts.scripts.html#evennia.scripts.scripts.DefaultScript.MultipleObjectsReturned">DefaultScript.MultipleObjectsReturned</a>
</li>
<li><a href="api/evennia.contrib.tutorials.evadventure.combat_turnbased.html#evennia.contrib.tutorials.evadventure.combat_turnbased.EvAdventureCombatHandler.defeated_combatants">defeated_combatants (evennia.contrib.tutorials.evadventure.combat_turnbased.EvAdventureCombatHandler attribute)</a>
@ -5460,6 +5476,8 @@
<li><a href="api/evennia.comms.comms.html#evennia.comms.comms.DefaultChannel.disconnect">disconnect() (evennia.comms.comms.DefaultChannel method)</a>
<ul>
<li><a href="api/evennia.server.portal.discord.html#evennia.server.portal.discord.DiscordClient.disconnect">(evennia.server.portal.discord.DiscordClient method)</a>
</li>
<li><a href="api/evennia.server.portal.grapevine.html#evennia.server.portal.grapevine.GrapevineClient.disconnect">(evennia.server.portal.grapevine.GrapevineClient method)</a>
</li>
<li><a href="api/evennia.server.portal.irc.html#evennia.server.portal.irc.IRCBot.disconnect">(evennia.server.portal.irc.IRCBot method)</a>
@ -5488,12 +5506,18 @@
<li><a href="api/evennia.server.sessionhandler.html#evennia.server.sessionhandler.ServerSessionHandler.disconnect_duplicate_sessions">disconnect_duplicate_sessions() (evennia.server.sessionhandler.ServerSessionHandler method)</a>
</li>
<li><a href="api/evennia.accounts.accounts.html#evennia.accounts.accounts.DefaultAccount.disconnect_session_from_account">disconnect_session_from_account() (evennia.accounts.accounts.DefaultAccount method)</a>
</li>
<li><a href="api/evennia.server.portal.discord.html#evennia.server.portal.discord.DiscordClient.discord_id">discord_id (evennia.server.portal.discord.DiscordClient attribute)</a>
</li>
<li><a href="api/evennia.accounts.bots.html#evennia.accounts.bots.DiscordBot">DiscordBot (class in evennia.accounts.bots)</a>
</li>
<li><a href="api/evennia.accounts.bots.html#evennia.accounts.bots.DiscordBot.DoesNotExist">DiscordBot.DoesNotExist</a>
</li>
<li><a href="api/evennia.accounts.bots.html#evennia.accounts.bots.DiscordBot.MultipleObjectsReturned">DiscordBot.MultipleObjectsReturned</a>
</li>
<li><a href="api/evennia.server.portal.discord.html#evennia.server.portal.discord.DiscordClient">DiscordClient (class in evennia.server.portal.discord)</a>
</li>
<li><a href="api/evennia.server.portal.discord.html#evennia.server.portal.discord.DiscordWebsocketServerFactory">DiscordWebsocketServerFactory (class in evennia.server.portal.discord)</a>
</li>
<li><a href="api/evennia.contrib.rpg.buffs.buff.html#evennia.contrib.rpg.buffs.buff.BaseBuff.dispel">dispel() (evennia.contrib.rpg.buffs.buff.BaseBuff method)</a>
</li>
@ -5655,6 +5679,8 @@
<li><a href="api/evennia.typeclasses.attributes.html#evennia.typeclasses.attributes.ModelAttributeBackend.do_update_attribute">(evennia.typeclasses.attributes.ModelAttributeBackend method)</a>
</li>
</ul></li>
<li><a href="api/evennia.server.portal.discord.html#evennia.server.portal.discord.DiscordClient.doHeartbeat">doHeartbeat() (evennia.server.portal.discord.DiscordClient method)</a>
</li>
<li><a href="api/evennia.scripts.scripts.html#evennia.scripts.scripts.DoNothing">DoNothing (class in evennia.scripts.scripts)</a>
</li>
<li><a href="api/evennia.scripts.scripts.html#evennia.scripts.scripts.DoNothing.DoesNotExist">DoNothing.DoesNotExist</a>
@ -7860,6 +7886,13 @@
<ul>
<li><a href="api/evennia.server.portal.amp_server.html#module-evennia.server.portal.amp_server">module</a>
</li>
</ul></li>
<li>
evennia.server.portal.discord
<ul>
<li><a href="api/evennia.server.portal.discord.html#module-evennia.server.portal.discord">module</a>
</li>
</ul></li>
<li>
@ -8874,6 +8907,8 @@
<li><a href="api/evennia.server.amp_client.html#evennia.server.amp_client.AMPClientFactory.factor">factor (evennia.server.amp_client.AMPClientFactory attribute)</a>
<ul>
<li><a href="api/evennia.server.portal.discord.html#evennia.server.portal.discord.DiscordWebsocketServerFactory.factor">(evennia.server.portal.discord.DiscordWebsocketServerFactory attribute)</a>
</li>
<li><a href="api/evennia.server.portal.grapevine.html#evennia.server.portal.grapevine.RestartingWebsocketServerFactory.factor">(evennia.server.portal.grapevine.RestartingWebsocketServerFactory attribute)</a>
</li>
<li><a href="api/evennia.server.portal.irc.html#evennia.server.portal.irc.IRCBotFactory.factor">(evennia.server.portal.irc.IRCBotFactory attribute)</a>
@ -9824,6 +9859,8 @@
<li><a href="api/evennia.contrib.base_systems.custom_gametime.custom_gametime.html#evennia.contrib.base_systems.custom_gametime.custom_gametime.GametimeScript.DoesNotExist">GametimeScript.DoesNotExist</a>
</li>
<li><a href="api/evennia.contrib.base_systems.custom_gametime.custom_gametime.html#evennia.contrib.base_systems.custom_gametime.custom_gametime.GametimeScript.MultipleObjectsReturned">GametimeScript.MultipleObjectsReturned</a>
</li>
<li><a href="api/evennia.server.portal.discord.html#evennia.server.portal.discord.DiscordWebsocketServerFactory.gateway">gateway (evennia.server.portal.discord.DiscordWebsocketServerFactory attribute)</a>
</li>
<li><a href="api/evennia.contrib.rpg.traits.traits.html#evennia.contrib.rpg.traits.traits.GaugeTrait">GaugeTrait (class in evennia.contrib.rpg.traits.traits)</a>
</li>
@ -10264,6 +10301,8 @@
<li><a href="api/evennia.contrib.tutorials.evadventure.combat_turnbased.html#evennia.contrib.tutorials.evadventure.combat_turnbased.EvAdventureCombatHandler.get_friendly_targets">get_friendly_targets() (evennia.contrib.tutorials.evadventure.combat_turnbased.EvAdventureCombatHandler method)</a>
</li>
<li><a href="api/evennia.utils.utils.html#evennia.utils.utils.get_game_dir_path">get_game_dir_path() (in module evennia.utils.utils)</a>
</li>
<li><a href="api/evennia.server.portal.discord.html#evennia.server.portal.discord.DiscordWebsocketServerFactory.get_gateway_url">get_gateway_url() (evennia.server.portal.discord.DiscordWebsocketServerFactory method)</a>
</li>
<li><a href="api/evennia.utils.evtable.html#evennia.utils.evtable.EvCell.get_height">get_height() (evennia.utils.evtable.EvCell method)</a>
</li>
@ -10652,6 +10691,8 @@
<li><a href="api/evennia.contrib.base_systems.ingame_python.scripts.html#evennia.contrib.base_systems.ingame_python.scripts.EventHandler.handle_error">handle_error() (evennia.contrib.base_systems.ingame_python.scripts.EventHandler method)</a>
<ul>
<li><a href="api/evennia.server.portal.discord.html#evennia.server.portal.discord.DiscordClient.handle_error">(evennia.server.portal.discord.DiscordClient method)</a>
</li>
<li><a href="api/evennia.scripts.taskhandler.html#evennia.scripts.taskhandler.handle_error">(in module evennia.scripts.taskhandler)</a>
</li>
</ul></li>
@ -10736,6 +10777,8 @@
<li><a href="api/evennia.contrib.game_systems.crafting.example_recipes.html#evennia.contrib.game_systems.crafting.example_recipes.HealingRecipe">HealingRecipe (class in evennia.contrib.game_systems.crafting.example_recipes)</a>
</li>
<li><a href="api/evennia.contrib.rpg.traits.tests.html#evennia.contrib.rpg.traits.tests.DummyCharacter.health">health (evennia.contrib.rpg.traits.tests.DummyCharacter attribute)</a>
</li>
<li><a href="api/evennia.server.portal.discord.html#evennia.server.portal.discord.DiscordClient.heartbeat_interval">heartbeat_interval (evennia.server.portal.discord.DiscordClient attribute)</a>
</li>
<li><a href="api/evennia.server.inputfuncs.html#evennia.server.inputfuncs.hello">hello() (in module evennia.server.inputfuncs)</a>
</li>
@ -11480,6 +11523,8 @@
</li>
</ul></li>
<li><a href="api/evennia.server.profiling.dummyrunner.html#evennia.server.profiling.dummyrunner.idcounter">idcounter() (in module evennia.server.profiling.dummyrunner)</a>
</li>
<li><a href="api/evennia.server.portal.discord.html#evennia.server.portal.discord.DiscordClient.identify">identify() (evennia.server.portal.discord.DiscordClient method)</a>
</li>
<li><a href="api/evennia.comms.managers.html#evennia.comms.managers.MsgManager.identify_object">identify_object() (evennia.comms.managers.MsgManager method)</a>
@ -11592,6 +11637,8 @@
<li><a href="api/evennia.server.amp_client.html#evennia.server.amp_client.AMPClientFactory.initialDelay">initialDelay (evennia.server.amp_client.AMPClientFactory attribute)</a>
<ul>
<li><a href="api/evennia.server.portal.discord.html#evennia.server.portal.discord.DiscordWebsocketServerFactory.initialDelay">(evennia.server.portal.discord.DiscordWebsocketServerFactory attribute)</a>
</li>
<li><a href="api/evennia.server.portal.grapevine.html#evennia.server.portal.grapevine.RestartingWebsocketServerFactory.initialDelay">(evennia.server.portal.grapevine.RestartingWebsocketServerFactory attribute)</a>
</li>
<li><a href="api/evennia.server.portal.irc.html#evennia.server.portal.irc.IRCBotFactory.initialDelay">(evennia.server.portal.irc.IRCBotFactory attribute)</a>
@ -11620,11 +11667,11 @@
</li>
</ul></li>
<li><a href="api/evennia.web.admin.tags.html#evennia.web.admin.tags.InlineTagForm">InlineTagForm (class in evennia.web.admin.tags)</a>
</li>
<li><a href="api/evennia.web.admin.tags.html#evennia.web.admin.tags.InlineTagForm.Meta">InlineTagForm.Meta (class in evennia.web.admin.tags)</a>
</li>
</ul></td>
<td style="width: 33%; vertical-align: top;"><ul>
<li><a href="api/evennia.web.admin.tags.html#evennia.web.admin.tags.InlineTagForm.Meta">InlineTagForm.Meta (class in evennia.web.admin.tags)</a>
</li>
<li><a href="api/evennia.typeclasses.attributes.html#evennia.typeclasses.attributes.InMemoryAttribute">InMemoryAttribute (class in evennia.typeclasses.attributes)</a>
</li>
<li><a href="api/evennia.typeclasses.attributes.html#evennia.typeclasses.attributes.InMemoryAttributeBackend">InMemoryAttributeBackend (class in evennia.typeclasses.attributes)</a>
@ -12590,6 +12637,8 @@
<li><a href="api/evennia.accounts.models.html#evennia.accounts.models.AccountDB.last_name">last_name (evennia.accounts.models.AccountDB attribute)</a>
</li>
<li><a href="api/evennia.contrib.utils.name_generator.namegen.html#evennia.contrib.utils.name_generator.namegen.last_name">last_name() (in module evennia.contrib.utils.name_generator.namegen)</a>
</li>
<li><a href="api/evennia.server.portal.discord.html#evennia.server.portal.discord.DiscordClient.last_sequence">last_sequence (evennia.server.portal.discord.DiscordClient attribute)</a>
</li>
<li><a href="api/evennia.contrib.tutorials.evadventure.dungeon.html#evennia.contrib.tutorials.evadventure.dungeon.EvAdventureDungeonOrchestrator.last_updated">last_updated (evennia.contrib.tutorials.evadventure.dungeon.EvAdventureDungeonOrchestrator attribute)</a>
</li>
@ -13966,6 +14015,8 @@
<li><a href="api/evennia.server.amp_client.html#evennia.server.amp_client.AMPClientFactory.maxDelay">maxDelay (evennia.server.amp_client.AMPClientFactory attribute)</a>
<ul>
<li><a href="api/evennia.server.portal.discord.html#evennia.server.portal.discord.DiscordWebsocketServerFactory.maxDelay">(evennia.server.portal.discord.DiscordWebsocketServerFactory attribute)</a>
</li>
<li><a href="api/evennia.server.portal.grapevine.html#evennia.server.portal.grapevine.RestartingWebsocketServerFactory.maxDelay">(evennia.server.portal.grapevine.RestartingWebsocketServerFactory attribute)</a>
</li>
<li><a href="api/evennia.server.portal.irc.html#evennia.server.portal.irc.IRCBotFactory.maxDelay">(evennia.server.portal.irc.IRCBotFactory attribute)</a>
@ -14830,6 +14881,8 @@
<li><a href="api/evennia.server.portal.amp.html#module-evennia.server.portal.amp">evennia.server.portal.amp</a>
</li>
<li><a href="api/evennia.server.portal.amp_server.html#module-evennia.server.portal.amp_server">evennia.server.portal.amp_server</a>
</li>
<li><a href="api/evennia.server.portal.discord.html#module-evennia.server.portal.discord">evennia.server.portal.discord</a>
</li>
<li><a href="api/evennia.server.portal.grapevine.html#module-evennia.server.portal.grapevine">evennia.server.portal.grapevine</a>
</li>
@ -15452,6 +15505,8 @@
<li><a href="api/evennia.contrib.game_systems.turnbattle.tb_items.html#evennia.contrib.game_systems.turnbattle.tb_items.TBItemsTurnHandler.next_turn">(evennia.contrib.game_systems.turnbattle.tb_items.TBItemsTurnHandler method)</a>
</li>
</ul></li>
<li><a href="api/evennia.server.portal.discord.html#evennia.server.portal.discord.DiscordClient.nextHeartbeatCall">nextHeartbeatCall (evennia.server.portal.discord.DiscordClient attribute)</a>
</li>
<li><a href="api/evennia.typeclasses.attributes.html#evennia.typeclasses.attributes.NickHandler">NickHandler (class in evennia.typeclasses.attributes)</a>
</li>
<li><a href="api/evennia.server.portal.irc.html#evennia.server.portal.irc.IRCBot.nickname">nickname (evennia.server.portal.irc.IRCBot attribute)</a>
@ -15912,9 +15967,11 @@
</li>
<li><a href="api/evennia.contrib.grid.extended_room.tests.html#evennia.contrib.grid.extended_room.tests.TestExtendedRoom.OLD_DESC">OLD_DESC (evennia.contrib.grid.extended_room.tests.TestExtendedRoom attribute)</a>
</li>
<li><a href="api/evennia.server.portal.grapevine.html#evennia.server.portal.grapevine.GrapevineClient.onClose">onClose() (evennia.server.portal.grapevine.GrapevineClient method)</a>
<li><a href="api/evennia.server.portal.discord.html#evennia.server.portal.discord.DiscordClient.onClose">onClose() (evennia.server.portal.discord.DiscordClient method)</a>
<ul>
<li><a href="api/evennia.server.portal.grapevine.html#evennia.server.portal.grapevine.GrapevineClient.onClose">(evennia.server.portal.grapevine.GrapevineClient method)</a>
</li>
<li><a href="api/evennia.server.portal.webclient.html#evennia.server.portal.webclient.WebSocketClient.onClose">(evennia.server.portal.webclient.WebSocketClient method)</a>
</li>
</ul></li>
@ -15922,15 +15979,19 @@
</li>
<li><a href="api/evennia.comms.models.html#evennia.comms.models.SubscriptionHandler.online">online() (evennia.comms.models.SubscriptionHandler method)</a>
</li>
<li><a href="api/evennia.server.portal.grapevine.html#evennia.server.portal.grapevine.GrapevineClient.onMessage">onMessage() (evennia.server.portal.grapevine.GrapevineClient method)</a>
<li><a href="api/evennia.server.portal.discord.html#evennia.server.portal.discord.DiscordClient.onMessage">onMessage() (evennia.server.portal.discord.DiscordClient method)</a>
<ul>
<li><a href="api/evennia.server.portal.grapevine.html#evennia.server.portal.grapevine.GrapevineClient.onMessage">(evennia.server.portal.grapevine.GrapevineClient method)</a>
</li>
<li><a href="api/evennia.server.portal.webclient.html#evennia.server.portal.webclient.WebSocketClient.onMessage">(evennia.server.portal.webclient.WebSocketClient method)</a>
</li>
</ul></li>
<li><a href="api/evennia.server.portal.grapevine.html#evennia.server.portal.grapevine.GrapevineClient.onOpen">onOpen() (evennia.server.portal.grapevine.GrapevineClient method)</a>
<li><a href="api/evennia.server.portal.discord.html#evennia.server.portal.discord.DiscordClient.onOpen">onOpen() (evennia.server.portal.discord.DiscordClient method)</a>
<ul>
<li><a href="api/evennia.server.portal.grapevine.html#evennia.server.portal.grapevine.GrapevineClient.onOpen">(evennia.server.portal.grapevine.GrapevineClient method)</a>
</li>
<li><a href="api/evennia.server.portal.webclient.html#evennia.server.portal.webclient.WebSocketClient.onOpen">(evennia.server.portal.webclient.WebSocketClient method)</a>
</li>
</ul></li>
@ -16655,6 +16716,8 @@
<li><a href="api/evennia.server.game_index_client.client.html#evennia.server.game_index_client.client.StringProducer.pauseProducing">pauseProducing() (evennia.server.game_index_client.client.StringProducer method)</a>
</li>
<li><a href="api/evennia.locks.lockfuncs.html#evennia.locks.lockfuncs.pdbref">pdbref() (in module evennia.locks.lockfuncs)</a>
</li>
<li><a href="api/evennia.server.portal.discord.html#evennia.server.portal.discord.DiscordClient.pending_heartbeat">pending_heartbeat (evennia.server.portal.discord.DiscordClient attribute)</a>
</li>
<li><a href="api/evennia.contrib.rpg.traits.traits.html#evennia.contrib.rpg.traits.traits.CounterTrait.percent">percent() (evennia.contrib.rpg.traits.traits.CounterTrait method)</a>
@ -16779,6 +16842,8 @@
<li><a href="api/evennia.comms.comms.html#evennia.comms.comms.DefaultChannel.post_leave_channel">post_leave_channel() (evennia.comms.comms.DefaultChannel method)</a>
</li>
<li><a href="api/evennia.contrib.tutorials.evadventure.characters.html#evennia.contrib.tutorials.evadventure.characters.LivingMixin.post_loot">post_loot() (evennia.contrib.tutorials.evadventure.characters.LivingMixin method)</a>
</li>
<li><a href="api/evennia.server.portal.discord.html#evennia.server.portal.discord.DiscordClient.post_response">post_response() (evennia.server.portal.discord.DiscordClient method)</a>
</li>
<li><a href="api/evennia.comms.comms.html#evennia.comms.comms.DefaultChannel.post_send_message">post_send_message() (evennia.comms.comms.DefaultChannel method)</a>
</li>
@ -17076,6 +17141,8 @@
<li><a href="api/evennia.contrib.rpg.buffs.buff.html#evennia.contrib.rpg.buffs.buff.random">(in module evennia.contrib.rpg.buffs.buff)</a>
</li>
<li><a href="api/evennia.contrib.tutorials.evadventure.dungeon.html#evennia.contrib.tutorials.evadventure.dungeon.random">(in module evennia.contrib.tutorials.evadventure.dungeon)</a>
</li>
<li><a href="api/evennia.server.portal.discord.html#evennia.server.portal.discord.random">(in module evennia.server.portal.discord)</a>
</li>
</ul></li>
<li><a href="api/evennia.utils.utils.html#evennia.utils.utils.random_string_from_module">random_string_from_module() (in module evennia.utils.utils)</a>
@ -17207,6 +17274,8 @@
<li><a href="api/evennia.accounts.bots.html#evennia.accounts.bots.IRCBot.reconnect">reconnect() (evennia.accounts.bots.IRCBot method)</a>
<ul>
<li><a href="api/evennia.server.portal.discord.html#evennia.server.portal.discord.DiscordWebsocketServerFactory.reconnect">(evennia.server.portal.discord.DiscordWebsocketServerFactory method)</a>
</li>
<li><a href="api/evennia.server.portal.grapevine.html#evennia.server.portal.grapevine.RestartingWebsocketServerFactory.reconnect">(evennia.server.portal.grapevine.RestartingWebsocketServerFactory method)</a>
</li>
<li><a href="api/evennia.server.portal.irc.html#evennia.server.portal.irc.IRCBotFactory.reconnect">(evennia.server.portal.irc.IRCBotFactory method)</a>
@ -17546,6 +17615,10 @@
<li><a href="api/evennia.scripts.tickerhandler.html#evennia.scripts.tickerhandler.TickerHandler.restore">(evennia.scripts.tickerhandler.TickerHandler method)</a>
</li>
</ul></li>
<li><a href="api/evennia.server.portal.discord.html#evennia.server.portal.discord.DiscordClient.resume">resume() (evennia.server.portal.discord.DiscordClient method)</a>
</li>
<li><a href="api/evennia.server.portal.discord.html#evennia.server.portal.discord.DiscordWebsocketServerFactory.resume_url">resume_url (evennia.server.portal.discord.DiscordWebsocketServerFactory attribute)</a>
</li>
<li><a href="api/evennia.commands.command.html#evennia.commands.command.Command.retain_instance">retain_instance (evennia.commands.command.Command attribute)</a>
</li>
<li><a href="api/evennia.contrib.full_systems.evscaperoom.objects.html#evennia.contrib.full_systems.evscaperoom.objects.EvscaperoomObject.return_appearance">return_appearance() (evennia.contrib.full_systems.evscaperoom.objects.EvscaperoomObject method)</a>
@ -18654,15 +18727,19 @@
</li>
<li><a href="api/evennia.server.portal.grapevine.html#evennia.server.portal.grapevine.GrapevineClient.send_authenticate">send_authenticate() (evennia.server.portal.grapevine.GrapevineClient method)</a>
</li>
<li><a href="api/evennia.server.portal.grapevine.html#evennia.server.portal.grapevine.GrapevineClient.send_channel">send_channel() (evennia.server.portal.grapevine.GrapevineClient method)</a>
<li><a href="api/evennia.server.portal.discord.html#evennia.server.portal.discord.DiscordClient.send_channel">send_channel() (evennia.server.portal.discord.DiscordClient method)</a>
<ul>
<li><a href="api/evennia.server.portal.grapevine.html#evennia.server.portal.grapevine.GrapevineClient.send_channel">(evennia.server.portal.grapevine.GrapevineClient method)</a>
</li>
<li><a href="api/evennia.server.portal.irc.html#evennia.server.portal.irc.IRCBot.send_channel">(evennia.server.portal.irc.IRCBot method)</a>
</li>
</ul></li>
<li><a href="api/evennia.server.portal.grapevine.html#evennia.server.portal.grapevine.GrapevineClient.send_default">send_default() (evennia.server.portal.grapevine.GrapevineClient method)</a>
<li><a href="api/evennia.server.portal.discord.html#evennia.server.portal.discord.DiscordClient.send_default">send_default() (evennia.server.portal.discord.DiscordClient method)</a>
<ul>
<li><a href="api/evennia.server.portal.grapevine.html#evennia.server.portal.grapevine.GrapevineClient.send_default">(evennia.server.portal.grapevine.GrapevineClient method)</a>
</li>
<li><a href="api/evennia.server.portal.irc.html#evennia.server.portal.irc.IRCBot.send_default">(evennia.server.portal.irc.IRCBot method)</a>
</li>
<li><a href="api/evennia.server.portal.ssh.html#evennia.server.portal.ssh.SshProtocol.send_default">(evennia.server.portal.ssh.SshProtocol method)</a>
@ -18756,10 +18833,10 @@
</li>
<li><a href="api/evennia.contrib.base_systems.building_menu.building_menu.html#evennia.contrib.base_systems.building_menu.building_menu.BuildingMenu.sep_keys">sep_keys (evennia.contrib.base_systems.building_menu.building_menu.BuildingMenu attribute)</a>
</li>
</ul></td>
<td style="width: 33%; vertical-align: top;"><ul>
<li><a href="api/evennia.commands.default.building.html#evennia.commands.default.building.CmdExamine.separator">separator (evennia.commands.default.building.CmdExamine attribute)</a>
</li>
</ul></td>
<td style="width: 33%; vertical-align: top;"><ul>
<li><a href="api/evennia.utils.optionclasses.html#evennia.utils.optionclasses.BaseOption.serialize">serialize() (evennia.utils.optionclasses.BaseOption method)</a>
<ul>
@ -18839,6 +18916,8 @@
<li><a href="api/evennia.server.sessionhandler.html#evennia.server.sessionhandler.ServerSessionHandler.session_from_account">session_from_account() (evennia.server.sessionhandler.ServerSessionHandler method)</a>
</li>
<li><a href="api/evennia.server.sessionhandler.html#evennia.server.sessionhandler.ServerSessionHandler.session_from_sessid">session_from_sessid() (evennia.server.sessionhandler.ServerSessionHandler method)</a>
</li>
<li><a href="api/evennia.server.portal.discord.html#evennia.server.portal.discord.DiscordClient.session_id">session_id (evennia.server.portal.discord.DiscordClient attribute)</a>
</li>
<li><a href="api/evennia.server.sessionhandler.html#evennia.server.sessionhandler.ServerSessionHandler.session_portal_partial_sync">session_portal_partial_sync() (evennia.server.sessionhandler.ServerSessionHandler method)</a>
</li>
@ -19105,6 +19184,8 @@
<li><a href="api/evennia.contrib.tutorials.evadventure.enums.html#evennia.contrib.tutorials.evadventure.enums.WieldLocation.SHIELD_HAND">SHIELD_HAND (evennia.contrib.tutorials.evadventure.enums.WieldLocation attribute)</a>
</li>
<li><a href="api/evennia.contrib.utils.git_integration.git_integration.html#evennia.contrib.utils.git_integration.git_integration.GitCommand.short_sha">short_sha() (evennia.contrib.utils.git_integration.git_integration.GitCommand method)</a>
</li>
<li><a href="api/evennia.server.portal.discord.html#evennia.server.portal.discord.should_retry">should_retry() (in module evennia.server.portal.discord)</a>
</li>
<li><a href="api/evennia.utils.logger.html#evennia.utils.logger.WeeklyLogFile.shouldRotate">shouldRotate() (evennia.utils.logger.WeeklyLogFile method)</a>
</li>
@ -19284,6 +19365,8 @@
<li><a href="api/evennia.accounts.bots.html#evennia.accounts.bots.RSSBot.start">(evennia.accounts.bots.RSSBot method)</a>
</li>
<li><a href="api/evennia.scripts.scripthandler.html#evennia.scripts.scripthandler.ScriptHandler.start">(evennia.scripts.scripthandler.ScriptHandler method)</a>
</li>
<li><a href="api/evennia.server.portal.discord.html#evennia.server.portal.discord.DiscordWebsocketServerFactory.start">(evennia.server.portal.discord.DiscordWebsocketServerFactory method)</a>
</li>
<li><a href="api/evennia.server.portal.grapevine.html#evennia.server.portal.grapevine.RestartingWebsocketServerFactory.start">(evennia.server.portal.grapevine.RestartingWebsocketServerFactory method)</a>
</li>
@ -19351,6 +19434,8 @@
<li><a href="api/evennia.server.amp_client.html#evennia.server.amp_client.AMPClientFactory.startedConnecting">startedConnecting() (evennia.server.amp_client.AMPClientFactory method)</a>
<ul>
<li><a href="api/evennia.server.portal.discord.html#evennia.server.portal.discord.DiscordWebsocketServerFactory.startedConnecting">(evennia.server.portal.discord.DiscordWebsocketServerFactory method)</a>
</li>
<li><a href="api/evennia.server.portal.grapevine.html#evennia.server.portal.grapevine.RestartingWebsocketServerFactory.startedConnecting">(evennia.server.portal.grapevine.RestartingWebsocketServerFactory method)</a>
</li>
<li><a href="api/evennia.server.portal.irc.html#evennia.server.portal.irc.IRCBotFactory.startedConnecting">(evennia.server.portal.irc.IRCBotFactory method)</a>
@ -23399,6 +23484,8 @@
<li><a href="api/evennia.server.webserver.html#evennia.server.webserver.Website">Website (class in evennia.server.webserver)</a>
</li>
<li><a href="api/evennia.server.portal.portal.html#evennia.server.portal.portal.Websocket">Websocket (class in evennia.server.portal.portal)</a>
</li>
<li><a href="api/evennia.server.portal.discord.html#evennia.server.portal.discord.DiscordWebsocketServerFactory.websocket_init">websocket_init() (evennia.server.portal.discord.DiscordWebsocketServerFactory method)</a>
</li>
<li><a href="api/evennia.server.portal.webclient.html#evennia.server.portal.webclient.WebSocketClient">WebSocketClient (class in evennia.server.portal.webclient)</a>
</li>

View file

@ -244,8 +244,9 @@ or the original github wiki. You have been warned.</p>
<li class="toctree-l3"><a class="reference internal" href="Setup/Settings.html">Changing Game Settings</a></li>
<li class="toctree-l3"><a class="reference internal" href="Setup/Settings-Default.html">Evennia Default settings file</a></li>
<li class="toctree-l3"><a class="reference internal" href="Setup/Choosing-a-Database.html">Choosing a database</a></li>
<li class="toctree-l3"><a class="reference internal" href="Setup/Channels-to-IRC.html">Connect Evennia channels to IRC</a></li>
<li class="toctree-l3"><a class="reference internal" href="Setup/Channels-to-Discord.html">Connect Evennia channels to Discord</a></li>
<li class="toctree-l3"><a class="reference internal" href="Setup/Channels-to-Grapevine.html">Connect Evennia channels to Grapevine</a></li>
<li class="toctree-l3"><a class="reference internal" href="Setup/Channels-to-IRC.html">Connect Evennia channels to IRC</a></li>
<li class="toctree-l3"><a class="reference internal" href="Setup/Channels-to-RSS.html">Connect Evennia channels to RSS</a></li>
<li class="toctree-l3"><a class="reference internal" href="Setup/Channels-to-Twitter.html">Connect Evennia to Twitter</a></li>
</ul>

Binary file not shown.

View file

@ -1403,6 +1403,11 @@
<td>&#160;&#160;&#160;
<a href="api/evennia.server.portal.amp_server.html#module-evennia.server.portal.amp_server"><code class="xref">evennia.server.portal.amp_server</code></a></td><td>
<em></em></td></tr>
<tr class="cg-1">
<td></td>
<td>&#160;&#160;&#160;
<a href="api/evennia.server.portal.discord.html#module-evennia.server.portal.discord"><code class="xref">evennia.server.portal.discord</code></a></td><td>
<em></em></td></tr>
<tr class="cg-1">
<td></td>
<td>&#160;&#160;&#160;

File diff suppressed because one or more lines are too long