evennia/docs/latest/api/evennia.server.portal.webclient.html
Evennia docbuilder action 243d596662 Updated HTML docs.
2025-08-15 18:14:21 +00:00

367 lines
No EOL
26 KiB
HTML
Raw Blame History

This file contains ambiguous Unicode characters

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

<!DOCTYPE html>
<html lang="en" data-content_root="../">
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" /><meta name="viewport" content="width=device-width, initial-scale=1" />
<title>evennia.server.portal.webclient &#8212; Evennia latest documentation</title>
<link rel="stylesheet" type="text/css" href="../_static/pygments.css?v=d75fae25" />
<link rel="stylesheet" type="text/css" href="../_static/nature.css?v=279e0f84" />
<link rel="stylesheet" type="text/css" href="../_static/custom.css?v=e4a91a55" />
<script src="../_static/documentation_options.js?v=c6e86fd7"></script>
<script src="../_static/doctools.js?v=9bcbadda"></script>
<script src="../_static/sphinx_highlight.js?v=dc90522c"></script>
<link rel="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.webclient_ajax" href="evennia.server.portal.webclient_ajax.html" />
<link rel="prev" title="evennia.server.portal.ttype" href="evennia.server.portal.ttype.html" />
</head><body>
<div class="related" role="navigation" aria-label="Related">
<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.webclient_ajax.html" title="evennia.server.portal.webclient_ajax"
accesskey="N">next</a> |</li>
<li class="right" >
<a href="evennia.server.portal.ttype.html" title="evennia.server.portal.ttype"
accesskey="P">previous</a> |</li>
<li class="nav-item nav-item-0"><a href="../index.html">Evennia</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.webclient</a></li>
</ul>
</div>
<div class="document">
<div class="documentwrapper">
<div class="bodywrapper">
<div class="body" role="main">
<section id="module-evennia.server.portal.webclient">
<span id="evennia-server-portal-webclient"></span><h1>evennia.server.portal.webclient<a class="headerlink" href="#module-evennia.server.portal.webclient" title="Link to this heading"></a></h1>
<p>Webclient based on websockets.</p>
<p>This implements a webclient with WebSockets (<a class="reference external" href="http://en.wikipedia.org/wiki/WebSocket">http://en.wikipedia.org/wiki/WebSocket</a>)
by use of the autobahn-python packages implementation (<a class="reference external" href="https://github.com/crossbario/autobahn-python">https://github.com/crossbario/autobahn-python</a>).
It is used together with evennia/web/media/javascript/evennia_websocket_webclient.js.</p>
<p>All data coming into the webclient is in the form of valid JSON on the form</p>
<p><strong>[“inputfunc_name”, [args], {kwarg}]</strong></p>
<p>which represents an “inputfunc” to be called on the Evennia side with <em>args, **kwargs.
The most common inputfunc is “text”, which takes just the text input
from the command line and interprets it as an Evennia Command: **[“text”, [“look”], {}]*</em></p>
<dl class="py class">
<dt class="sig sig-object py" id="evennia.server.portal.webclient.WebSocketClient">
<em class="property"><span class="k"><span class="pre">class</span></span><span class="w"> </span></em><span class="sig-prename descclassname"><span class="pre">evennia.server.portal.webclient.</span></span><span class="sig-name descname"><span class="pre">WebSocketClient</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="o"><span class="pre">*</span></span><span class="n"><span class="pre">args</span></span></em>, <em class="sig-param"><span class="o"><span class="pre">**</span></span><span class="n"><span class="pre">kwargs</span></span></em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/server/portal/webclient.html#WebSocketClient"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#evennia.server.portal.webclient.WebSocketClient" title="Link to this definition"></a></dt>
<dd><p>Bases: <code class="xref py py-class docutils literal notranslate"><span class="pre">WebSocketServerProtocol</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">Session</span></code></a></p>
<p>Implements the server-side of the Websocket connection.</p>
<dl class="py attribute">
<dt class="sig sig-object py" id="evennia.server.portal.webclient.WebSocketClient.nonce">
<span class="sig-name descname"><span class="pre">nonce</span></span><em class="property"><span class="w"> </span><span class="p"><span class="pre">=</span></span><span class="w"> </span><span class="pre">0</span></em><a class="headerlink" href="#evennia.server.portal.webclient.WebSocketClient.nonce" title="Link to this definition"></a></dt>
<dd></dd></dl>
<dl class="py method">
<dt class="sig sig-object py" id="evennia.server.portal.webclient.WebSocketClient.__init__">
<span class="sig-name descname"><span class="pre">__init__</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="o"><span class="pre">*</span></span><span class="n"><span class="pre">args</span></span></em>, <em class="sig-param"><span class="o"><span class="pre">**</span></span><span class="n"><span class="pre">kwargs</span></span></em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/server/portal/webclient.html#WebSocketClient.__init__"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#evennia.server.portal.webclient.WebSocketClient.__init__" title="Link to this definition"></a></dt>
<dd></dd></dl>
<dl class="py method">
<dt class="sig sig-object py" id="evennia.server.portal.webclient.WebSocketClient.get_client_session">
<span class="sig-name descname"><span class="pre">get_client_session</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/server/portal/webclient.html#WebSocketClient.get_client_session"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#evennia.server.portal.webclient.WebSocketClient.get_client_session" title="Link to this definition"></a></dt>
<dd><p>Get the Client browser session (used for auto-login based on browser session)</p>
<dl class="field-list simple">
<dt class="field-odd">Returns<span class="colon">:</span></dt>
<dd class="field-odd"><p><p><em>csession (ClientSession)</em> </p>
<dl class="simple">
<dt>This is a django-specific internal representation</dt><dd><p>of the browser session.</p>
</dd>
</dl>
</p>
</dd>
</dl>
</dd></dl>
<dl class="py method">
<dt class="sig sig-object py" id="evennia.server.portal.webclient.WebSocketClient.onOpen">
<span class="sig-name descname"><span class="pre">onOpen</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/server/portal/webclient.html#WebSocketClient.onOpen"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#evennia.server.portal.webclient.WebSocketClient.onOpen" title="Link to this definition"></a></dt>
<dd><p>This is called when the WebSocket connection is fully established.</p>
</dd></dl>
<dl class="py method">
<dt class="sig sig-object py" id="evennia.server.portal.webclient.WebSocketClient.disconnect">
<span class="sig-name descname"><span class="pre">disconnect</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">reason</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/server/portal/webclient.html#WebSocketClient.disconnect"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#evennia.server.portal.webclient.WebSocketClient.disconnect" title="Link 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<span class="colon">:</span></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 class="sig sig-object py" id="evennia.server.portal.webclient.WebSocketClient.onClose">
<span class="sig-name descname"><span class="pre">onClose</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">wasClean</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">code</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">reason</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">None</span></span></em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/server/portal/webclient.html#WebSocketClient.onClose"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#evennia.server.portal.webclient.WebSocketClient.onClose" title="Link 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<span class="colon">:</span></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 class="sig sig-object py" id="evennia.server.portal.webclient.WebSocketClient.onMessage">
<span class="sig-name descname"><span class="pre">onMessage</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">payload</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">isBinary</span></span></em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/server/portal/webclient.html#WebSocketClient.onMessage"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#evennia.server.portal.webclient.WebSocketClient.onMessage" title="Link 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<span class="colon">:</span></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 class="sig sig-object py" id="evennia.server.portal.webclient.WebSocketClient.sendLine">
<span class="sig-name descname"><span class="pre">sendLine</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">line</span></span></em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/server/portal/webclient.html#WebSocketClient.sendLine"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#evennia.server.portal.webclient.WebSocketClient.sendLine" title="Link to this definition"></a></dt>
<dd><p>Send data to client.</p>
<dl class="field-list simple">
<dt class="field-odd">Parameters<span class="colon">:</span></dt>
<dd class="field-odd"><p><strong>line</strong> (<em>str</em>) Text to send.</p>
</dd>
</dl>
</dd></dl>
<dl class="py method">
<dt class="sig sig-object py" id="evennia.server.portal.webclient.WebSocketClient.at_login">
<span class="sig-name descname"><span class="pre">at_login</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/server/portal/webclient.html#WebSocketClient.at_login"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#evennia.server.portal.webclient.WebSocketClient.at_login" title="Link to this definition"></a></dt>
<dd></dd></dl>
<dl class="py method">
<dt class="sig sig-object py" id="evennia.server.portal.webclient.WebSocketClient.data_in">
<span class="sig-name descname"><span class="pre">data_in</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="o"><span class="pre">**</span></span><span class="n"><span class="pre">kwargs</span></span></em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/server/portal/webclient.html#WebSocketClient.data_in"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#evennia.server.portal.webclient.WebSocketClient.data_in" title="Link to this definition"></a></dt>
<dd><p>Data User &gt; Evennia.</p>
<dl class="field-list simple">
<dt class="field-odd">Parameters<span class="colon">:</span></dt>
<dd class="field-odd"><ul class="simple">
<li><p><strong>text</strong> (<em>str</em>) Incoming text.</p></li>
<li><p><strong>kwargs</strong> (<em>any</em>) Options from protocol.</p></li>
</ul>
</dd>
</dl>
<p class="rubric">Notes</p>
<p>At initilization, the client will send the special
csessid command to identify its browser session hash
with the Evennia side.</p>
<p>The websocket client will also pass websocket_close command
to report that the client has been closed and that the
session should be disconnected.</p>
<p>Both those commands are parsed and extracted already at
this point.</p>
</dd></dl>
<dl class="py method">
<dt class="sig sig-object py" id="evennia.server.portal.webclient.WebSocketClient.send_text">
<span class="sig-name descname"><span class="pre">send_text</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="o"><span class="pre">*</span></span><span class="n"><span class="pre">args</span></span></em>, <em class="sig-param"><span class="o"><span class="pre">**</span></span><span class="n"><span class="pre">kwargs</span></span></em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/server/portal/webclient.html#WebSocketClient.send_text"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#evennia.server.portal.webclient.WebSocketClient.send_text" title="Link to this definition"></a></dt>
<dd><p>Send text data. This will pre-process the text for
color-replacement, conversion to html etc.</p>
<dl class="field-list simple">
<dt class="field-odd">Parameters<span class="colon">:</span></dt>
<dd class="field-odd"><p><strong>text</strong> (<em>str</em>) Text to send.</p>
</dd>
<dt class="field-even">Keyword Arguments<span class="colon">:</span></dt>
<dd class="field-even"><p><strong>options</strong> (<em>dict</em>) Options-dict with the following keys understood:
- raw (bool): No parsing at all (leave ansi-to-html markers unparsed).
- nocolor (bool): Clean out all color.
- screenreader (bool): Use Screenreader mode.
- send_prompt (bool): Send a prompt with parsed html</p>
</dd>
</dl>
</dd></dl>
<dl class="py method">
<dt class="sig sig-object py" id="evennia.server.portal.webclient.WebSocketClient.send_prompt">
<span class="sig-name descname"><span class="pre">send_prompt</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="o"><span class="pre">*</span></span><span class="n"><span class="pre">args</span></span></em>, <em class="sig-param"><span class="o"><span class="pre">**</span></span><span class="n"><span class="pre">kwargs</span></span></em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/server/portal/webclient.html#WebSocketClient.send_prompt"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#evennia.server.portal.webclient.WebSocketClient.send_prompt" title="Link to this definition"></a></dt>
<dd></dd></dl>
<dl class="py method">
<dt class="sig sig-object py" id="evennia.server.portal.webclient.WebSocketClient.send_default">
<span class="sig-name descname"><span class="pre">send_default</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">cmdname</span></span></em>, <em class="sig-param"><span class="o"><span class="pre">*</span></span><span class="n"><span class="pre">args</span></span></em>, <em class="sig-param"><span class="o"><span class="pre">**</span></span><span class="n"><span class="pre">kwargs</span></span></em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/server/portal/webclient.html#WebSocketClient.send_default"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#evennia.server.portal.webclient.WebSocketClient.send_default" title="Link to this definition"></a></dt>
<dd><p>Data Evennia -&gt; User.</p>
<dl class="field-list simple">
<dt class="field-odd">Parameters<span class="colon">:</span></dt>
<dd class="field-odd"><ul class="simple">
<li><p><strong>cmdname</strong> (<em>str</em>) The first argument will always be the oob cmd name.</p></li>
<li><p><strong>*args</strong> (<em>any</em>) Remaining args will be arguments for <strong>cmd</strong>.</p></li>
</ul>
</dd>
<dt class="field-even">Keyword Arguments<span class="colon">:</span></dt>
<dd class="field-even"><p><strong>options</strong> (<em>dict</em>) These are ignored for oob commands. Use command
arguments (which can hold dicts) to send instructions to the
client instead.</p>
</dd>
</dl>
</dd></dl>
</dd></dl>
</section>
<div class="clearer"></div>
</div>
</div>
</div>
<div class="sphinxsidebar" role="navigation" aria-label="Main">
<div class="sphinxsidebarwrapper">
<p class="logo"><a href="../index.html">
<img class="logo" src="../_static/evennia_logo.png" alt="Logo of Evennia"/>
</a></p>
<search id="searchbox" style="display: none" role="search">
<h3 id="searchlabel">Quick search</h3>
<div class="searchformwrapper">
<form class="search" action="../search.html" method="get">
<input type="text" name="q" aria-labelledby="searchlabel" autocomplete="off" autocorrect="off" autocapitalize="off" spellcheck="false"/>
<input type="submit" value="Go" />
</form>
</div>
</search>
<script>document.getElementById('searchbox').style.display = "block"</script>
<h3><a href="../index.html">Table of Contents</a></h3>
<ul>
<li><a class="reference internal" href="#">evennia.server.portal.webclient</a><ul>
<li><a class="reference internal" href="#evennia.server.portal.webclient.WebSocketClient"><code class="docutils literal notranslate"><span class="pre">WebSocketClient</span></code></a><ul>
<li><a class="reference internal" href="#evennia.server.portal.webclient.WebSocketClient.nonce"><code class="docutils literal notranslate"><span class="pre">WebSocketClient.nonce</span></code></a></li>
<li><a class="reference internal" href="#evennia.server.portal.webclient.WebSocketClient.__init__"><code class="docutils literal notranslate"><span class="pre">WebSocketClient.__init__()</span></code></a></li>
<li><a class="reference internal" href="#evennia.server.portal.webclient.WebSocketClient.get_client_session"><code class="docutils literal notranslate"><span class="pre">WebSocketClient.get_client_session()</span></code></a></li>
<li><a class="reference internal" href="#evennia.server.portal.webclient.WebSocketClient.onOpen"><code class="docutils literal notranslate"><span class="pre">WebSocketClient.onOpen()</span></code></a></li>
<li><a class="reference internal" href="#evennia.server.portal.webclient.WebSocketClient.disconnect"><code class="docutils literal notranslate"><span class="pre">WebSocketClient.disconnect()</span></code></a></li>
<li><a class="reference internal" href="#evennia.server.portal.webclient.WebSocketClient.onClose"><code class="docutils literal notranslate"><span class="pre">WebSocketClient.onClose()</span></code></a></li>
<li><a class="reference internal" href="#evennia.server.portal.webclient.WebSocketClient.onMessage"><code class="docutils literal notranslate"><span class="pre">WebSocketClient.onMessage()</span></code></a></li>
<li><a class="reference internal" href="#evennia.server.portal.webclient.WebSocketClient.sendLine"><code class="docutils literal notranslate"><span class="pre">WebSocketClient.sendLine()</span></code></a></li>
<li><a class="reference internal" href="#evennia.server.portal.webclient.WebSocketClient.at_login"><code class="docutils literal notranslate"><span class="pre">WebSocketClient.at_login()</span></code></a></li>
<li><a class="reference internal" href="#evennia.server.portal.webclient.WebSocketClient.data_in"><code class="docutils literal notranslate"><span class="pre">WebSocketClient.data_in()</span></code></a></li>
<li><a class="reference internal" href="#evennia.server.portal.webclient.WebSocketClient.send_text"><code class="docutils literal notranslate"><span class="pre">WebSocketClient.send_text()</span></code></a></li>
<li><a class="reference internal" href="#evennia.server.portal.webclient.WebSocketClient.send_prompt"><code class="docutils literal notranslate"><span class="pre">WebSocketClient.send_prompt()</span></code></a></li>
<li><a class="reference internal" href="#evennia.server.portal.webclient.WebSocketClient.send_default"><code class="docutils literal notranslate"><span class="pre">WebSocketClient.send_default()</span></code></a></li>
</ul>
</li>
</ul>
</li>
</ul>
<div>
<h4>Previous topic</h4>
<p class="topless"><a href="evennia.server.portal.ttype.html"
title="previous chapter">evennia.server.portal.ttype</a></p>
</div>
<div>
<h4>Next topic</h4>
<p class="topless"><a href="evennia.server.portal.webclient_ajax.html"
title="next chapter">evennia.server.portal.webclient_ajax</a></p>
</div>
<div role="note" aria-label="source link">
<!--h3>This Page</h3-->
<ul class="this-page-menu">
<li><a href="../_sources/api/evennia.server.portal.webclient.md.txt"
rel="nofollow">Show Page Source</a></li>
</ul>
</div><h3>Links</h3>
<ul>
<li><a href="https://www.evennia.com/docs/latest/index.html">Documentation Top</a> </li>
<li><a href="https://www.evennia.com">Evennia Home</a> </li>
<li><a href="https://github.com/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>Doc Versions</h3>
<ul>
<li>
<a href="https://www.evennia.com/docs/latest/index.html">latest (main branch)</a>
</li>
<li>
<a href="https://www.evennia.com/docs/5.x/index.html">v5.0.0 branch (outdated)</a>
</li>
<li>
<a href="https://www.evennia.com/docs/4.x/index.html">v4.0.0 branch (outdated)</a>
</li>
<li>
<a href="https://www.evennia.com/docs/3.x/index.html">v3.0.0 branch (outdated)</a>
</li>
<li>
<a href="https://www.evennia.com/docs/2.x/index.html">v2.0.0 branch (outdated)</a>
</li>
<li>
<a href="https://www.evennia.com/docs/1.x/index.html">v1.0.0 branch (outdated)</a>
</li>
<li>
<a href="https://www.evennia.com/docs/0.x/index.html">v0.9.5 branch (outdated)</a>
</li>
</ul>
</div>
</div>
<div class="clearer"></div>
</div>
<div class="related" role="navigation" aria-label="Related">
<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.webclient_ajax.html" title="evennia.server.portal.webclient_ajax"
>next</a> |</li>
<li class="right" >
<a href="evennia.server.portal.ttype.html" title="evennia.server.portal.ttype"
>previous</a> |</li>
<li class="nav-item nav-item-0"><a href="../index.html">Evennia</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.webclient</a></li>
</ul>
</div>
<div class="footer" role="contentinfo">
&#169; Copyright 2024, The Evennia developer community.
Created using <a href="https://www.sphinx-doc.org/">Sphinx</a> 8.2.3.
</div>
</body>
</html>