evennia/docs/2.x/api/evennia.server.portal.telnet_oob.html
Evennia docbuilder action e535f5782a Updated HTML docs.
2023-10-19 20:22:27 +00:00

368 lines
No EOL
28 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>
<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.telnet_oob &#8212; Evennia 2.x 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.telnet_ssl" href="evennia.server.portal.telnet_ssl.html" />
<link rel="prev" title="evennia.server.portal.telnet" href="evennia.server.portal.telnet.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.telnet_ssl.html" title="evennia.server.portal.telnet_ssl"
accesskey="N">next</a> |</li>
<li class="right" >
<a href="evennia.server.portal.telnet.html" title="evennia.server.portal.telnet"
accesskey="P">previous</a> |</li>
<li class="nav-item nav-item-0"><a href="../index.html">Evennia 2.x</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.telnet_oob</a></li>
</ul>
</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.telnet.html"
title="previous chapter">evennia.server.portal.telnet</a></p>
<h4>Next topic</h4>
<p class="topless"><a href="evennia.server.portal.telnet_ssl.html"
title="next chapter">evennia.server.portal.telnet_ssl</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.telnet_oob.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="evennia.server.portal.telnet_oob.html">2.x (main branch)</a></li>
<ul>
<li><a href="../1.3.0/index.html">1.3.0 (v1.3.0 branch)</a></li>
<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.telnet_oob">
<span id="evennia-server-portal-telnet-oob"></span><h1>evennia.server.portal.telnet_oob<a class="headerlink" href="#module-evennia.server.portal.telnet_oob" title="Permalink to this headline"></a></h1>
<p>Telnet OOB (Out of band communication)</p>
<p>OOB protocols allow for asynchronous communication between Evennia and
compliant telnet clients. The “text” type of send command will always
be sent “in-band”, appearing in the clients main text output. OOB
commands, by contrast, can have many forms and it is up to the client
how and if they are handled. Examples of OOB instructions could be to
instruct the client to play sounds or to update a graphical health
bar.</p>
<p>Note that in Evennias Web client, all send commands are “OOB
commands”, (including the “text” one), there is no equivalence to
MSDP/GMCP for the webclient since it doesnt need it.</p>
<p>This implements the following telnet OOB communication protocols:</p>
<ul class="simple">
<li><p>MSDP (Mud Server Data Protocol), as per <a class="reference external" href="http://tintin.sourceforge.net/msdp/">http://tintin.sourceforge.net/msdp/</a></p></li>
<li><p>GMCP (Generic Mud Communication Protocol) as per
<a class="reference external" href="http://www.ironrealms.com/rapture/manual/files/FeatGMCP-txt.html#Generic_MUD_Communication_Protocol%28GMCP%29">http://www.ironrealms.com/rapture/manual/files/FeatGMCP-txt.html#Generic_MUD_Communication_Protocol%28GMCP%29</a></p></li>
</ul>
<hr class="docutils" />
<dl class="py class">
<dt id="evennia.server.portal.telnet_oob.TelnetOOB">
<em class="property">class </em><code class="sig-prename descclassname">evennia.server.portal.telnet_oob.</code><code class="sig-name descname">TelnetOOB</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">protocol</span></em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/server/portal/telnet_oob.html#TelnetOOB"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#evennia.server.portal.telnet_oob.TelnetOOB" title="Permalink to this definition"></a></dt>
<dd><p>Bases: <code class="xref py py-class docutils literal notranslate"><span class="pre">object</span></code></p>
<p>Implements the MSDP and GMCP protocols.</p>
<dl class="py method">
<dt id="evennia.server.portal.telnet_oob.TelnetOOB.__init__">
<code class="sig-name descname">__init__</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">protocol</span></em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/server/portal/telnet_oob.html#TelnetOOB.__init__"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#evennia.server.portal.telnet_oob.TelnetOOB.__init__" title="Permalink to this definition"></a></dt>
<dd><p>Initiates by storing the protocol on itself and trying to
determine if the client supports MSDP.</p>
<dl class="field-list simple">
<dt class="field-odd">Parameters</dt>
<dd class="field-odd"><p><strong>protocol</strong> (<em>Protocol</em>) The active protocol.</p>
</dd>
</dl>
</dd></dl>
<dl class="py method">
<dt id="evennia.server.portal.telnet_oob.TelnetOOB.no_msdp">
<code class="sig-name descname">no_msdp</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">option</span></em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/server/portal/telnet_oob.html#TelnetOOB.no_msdp"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#evennia.server.portal.telnet_oob.TelnetOOB.no_msdp" title="Permalink to this definition"></a></dt>
<dd><p>Client reports No msdp supported or wanted.</p>
<dl class="field-list simple">
<dt class="field-odd">Parameters</dt>
<dd class="field-odd"><p><strong>option</strong> (<em>Option</em>) Not used.</p>
</dd>
</dl>
</dd></dl>
<dl class="py method">
<dt id="evennia.server.portal.telnet_oob.TelnetOOB.do_msdp">
<code class="sig-name descname">do_msdp</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">option</span></em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/server/portal/telnet_oob.html#TelnetOOB.do_msdp"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#evennia.server.portal.telnet_oob.TelnetOOB.do_msdp" title="Permalink to this definition"></a></dt>
<dd><p>Client reports that it supports msdp.</p>
<dl class="field-list simple">
<dt class="field-odd">Parameters</dt>
<dd class="field-odd"><p><strong>option</strong> (<em>Option</em>) Not used.</p>
</dd>
</dl>
</dd></dl>
<dl class="py method">
<dt id="evennia.server.portal.telnet_oob.TelnetOOB.no_gmcp">
<code class="sig-name descname">no_gmcp</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">option</span></em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/server/portal/telnet_oob.html#TelnetOOB.no_gmcp"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#evennia.server.portal.telnet_oob.TelnetOOB.no_gmcp" title="Permalink to this definition"></a></dt>
<dd><p>If this is reached, it means neither MSDP nor GMCP is
supported.</p>
<dl class="field-list simple">
<dt class="field-odd">Parameters</dt>
<dd class="field-odd"><p><strong>option</strong> (<em>Option</em>) Not used.</p>
</dd>
</dl>
</dd></dl>
<dl class="py method">
<dt id="evennia.server.portal.telnet_oob.TelnetOOB.do_gmcp">
<code class="sig-name descname">do_gmcp</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">option</span></em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/server/portal/telnet_oob.html#TelnetOOB.do_gmcp"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#evennia.server.portal.telnet_oob.TelnetOOB.do_gmcp" title="Permalink to this definition"></a></dt>
<dd><p>Called when client confirms that it can do MSDP or GMCP.</p>
<dl class="field-list simple">
<dt class="field-odd">Parameters</dt>
<dd class="field-odd"><p><strong>option</strong> (<em>Option</em>) Not used.</p>
</dd>
</dl>
</dd></dl>
<dl class="py method">
<dt id="evennia.server.portal.telnet_oob.TelnetOOB.encode_msdp">
<code class="sig-name descname">encode_msdp</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">cmdname</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/telnet_oob.html#TelnetOOB.encode_msdp"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#evennia.server.portal.telnet_oob.TelnetOOB.encode_msdp" title="Permalink to this definition"></a></dt>
<dd><p>Encode into a valid MSDP command.</p>
<dl class="field-list simple">
<dt class="field-odd">Parameters</dt>
<dd class="field-odd"><ul class="simple">
<li><p><strong>cmdname</strong> (<em>str</em>) Name of send instruction.</p></li>
<li><p><strong>args</strong> (<em>any</em>) Arguments to OOB command.</p></li>
<li><p><strong>kwargs</strong> (<em>any</em>) Arguments to OOB command.</p></li>
</ul>
</dd>
</dl>
<p class="rubric">Notes</p>
<p>The output of this encoding will be
MSDP structures on these forms:</p>
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="p">[</span><span class="n">cmdname</span><span class="p">,</span> <span class="p">[],</span> <span class="p">{}]</span> <span class="o">-&gt;</span> <span class="n">VAR</span> <span class="n">cmdname</span> <span class="n">VAL</span> <span class="s2">&quot;&quot;</span>
<span class="p">[</span><span class="n">cmdname</span><span class="p">,</span> <span class="p">[</span><span class="n">arg</span><span class="p">],</span> <span class="p">{}]</span> <span class="o">-&gt;</span> <span class="n">VAR</span> <span class="n">cmdname</span> <span class="n">VAL</span> <span class="n">arg</span>
<span class="p">[</span><span class="n">cmdname</span><span class="p">,</span> <span class="p">[</span><span class="n">args</span><span class="p">],{}]</span> <span class="o">-&gt;</span> <span class="n">VAR</span> <span class="n">cmdname</span> <span class="n">VAL</span> <span class="n">ARRAYOPEN</span> <span class="n">VAL</span> <span class="n">arg</span> <span class="n">VAL</span> <span class="n">arg</span> <span class="o">...</span> <span class="n">ARRAYCLOSE</span>
<span class="p">[</span><span class="n">cmdname</span><span class="p">,</span> <span class="p">[],</span> <span class="p">{</span><span class="n">kwargs</span><span class="p">}]</span> <span class="o">-&gt;</span> <span class="n">VAR</span> <span class="n">cmdname</span> <span class="n">VAL</span> <span class="n">TABLEOPEN</span> <span class="n">VAR</span> <span class="n">key</span> <span class="n">VAL</span> <span class="n">val</span> <span class="o">...</span> <span class="n">TABLECLOSE</span>
<span class="p">[</span><span class="n">cmdname</span><span class="p">,</span> <span class="p">[</span><span class="n">args</span><span class="p">],</span> <span class="p">{</span><span class="n">kwargs</span><span class="p">}]</span> <span class="o">-&gt;</span> <span class="n">VAR</span> <span class="n">cmdname</span> <span class="n">VAL</span> <span class="n">ARRAYOPEN</span> <span class="n">VAL</span> <span class="n">arg</span> <span class="n">VAL</span> <span class="n">arg</span> <span class="o">...</span> <span class="n">ARRAYCLOSE</span>
<span class="n">VAR</span> <span class="n">cmdname</span> <span class="n">VAL</span> <span class="n">TABLEOPEN</span> <span class="n">VAR</span> <span class="n">key</span> <span class="n">VAL</span> <span class="n">val</span> <span class="o">...</span> <span class="n">TABLECLOSE</span>
</pre></div>
</div>
<p>Further nesting is not supported, so if an array argument
consists of an array (for example), that array will be
json-converted to a string.</p>
</dd></dl>
<dl class="py method">
<dt id="evennia.server.portal.telnet_oob.TelnetOOB.encode_gmcp">
<code class="sig-name descname">encode_gmcp</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">cmdname</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/telnet_oob.html#TelnetOOB.encode_gmcp"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#evennia.server.portal.telnet_oob.TelnetOOB.encode_gmcp" title="Permalink to this definition"></a></dt>
<dd><p>Encode into GMCP messages.</p>
<dl class="field-list simple">
<dt class="field-odd">Parameters</dt>
<dd class="field-odd"><ul class="simple">
<li><p><strong>cmdname</strong> (<em>str</em>) GMCP OOB command name.</p></li>
<li><p><strong>args</strong> (<em>any</em>) Arguments to OOB command.</p></li>
<li><p><strong>kwargs</strong> (<em>any</em>) Arguments to OOB command.</p></li>
</ul>
</dd>
</dl>
<p class="rubric">Notes</p>
<p>GMCP messages will be outgoing on the following
form (the non-JSON cmdname at the start is what
IRE games use, supposedly, and what clients appear
to have adopted). A cmdname without Package will end
up in the Core package, while Core package names will
be stripped on the Evennia side.</p>
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="p">[</span><span class="n">cmd_name</span><span class="p">,</span> <span class="p">[],</span> <span class="p">{}]</span> <span class="o">-&gt;</span> <span class="n">Cmd</span><span class="o">.</span><span class="n">Name</span>
<span class="p">[</span><span class="n">cmd_name</span><span class="p">,</span> <span class="p">[</span><span class="n">arg</span><span class="p">],</span> <span class="p">{}]</span> <span class="o">-&gt;</span> <span class="n">Cmd</span><span class="o">.</span><span class="n">Name</span> <span class="n">arg</span>
<span class="p">[</span><span class="n">cmd_name</span><span class="p">,</span> <span class="p">[</span><span class="n">args</span><span class="p">],{}]</span> <span class="o">-&gt;</span> <span class="n">Cmd</span><span class="o">.</span><span class="n">Name</span> <span class="p">[</span><span class="n">args</span><span class="p">]</span>
<span class="p">[</span><span class="n">cmd_name</span><span class="p">,</span> <span class="p">[],</span> <span class="p">{</span><span class="n">kwargs</span><span class="p">}]</span> <span class="o">-&gt;</span> <span class="n">Cmd</span><span class="o">.</span><span class="n">Name</span> <span class="p">{</span><span class="n">kwargs</span><span class="p">}</span>
<span class="p">[</span><span class="n">cmdname</span><span class="p">,</span> <span class="p">[</span><span class="n">args</span><span class="p">,</span> <span class="p">{</span><span class="n">kwargs</span><span class="p">}]</span> <span class="o">-&gt;</span> <span class="n">Core</span><span class="o">.</span><span class="n">Cmdname</span> <span class="p">[[</span><span class="n">args</span><span class="p">],{</span><span class="n">kwargs</span><span class="p">}]</span>
</pre></div>
</div>
<p>For more flexibility with certain clients, if <strong>cmd_name</strong> is capitalized,
Evennia will leave its current capitalization (So CMD_nAmE would be sent
as CMD.nAmE but cMD_Name would be Cmd.Name)</p>
<p class="rubric">Notes</p>
<p>There are also a few default mappings between evennia outputcmds and GMCP:</p>
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="n">client_options</span> <span class="o">-&gt;</span> <span class="n">Core</span><span class="o">.</span><span class="n">Supports</span><span class="o">.</span><span class="n">Get</span>
<span class="n">get_inputfuncs</span> <span class="o">-&gt;</span> <span class="n">Core</span><span class="o">.</span><span class="n">Commands</span><span class="o">.</span><span class="n">Get</span>
<span class="n">get_value</span> <span class="o">-&gt;</span> <span class="n">Char</span><span class="o">.</span><span class="n">Value</span><span class="o">.</span><span class="n">Get</span>
<span class="n">repeat</span> <span class="o">-&gt;</span> <span class="n">Char</span><span class="o">.</span><span class="n">Repeat</span><span class="o">.</span><span class="n">Update</span>
<span class="n">monitor</span> <span class="o">-&gt;</span> <span class="n">Char</span><span class="o">.</span><span class="n">Monitor</span><span class="o">.</span><span class="n">Update</span>
</pre></div>
</div>
</dd></dl>
<dl class="py method">
<dt id="evennia.server.portal.telnet_oob.TelnetOOB.decode_msdp">
<code class="sig-name descname">decode_msdp</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/telnet_oob.html#TelnetOOB.decode_msdp"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#evennia.server.portal.telnet_oob.TelnetOOB.decode_msdp" title="Permalink to this definition"></a></dt>
<dd><p>Decodes incoming MSDP data.</p>
<dl class="field-list simple">
<dt class="field-odd">Parameters</dt>
<dd class="field-odd"><p><strong>data</strong> (<em>str</em><em> or </em><em>list</em>) MSDP data.</p>
</dd>
</dl>
<p class="rubric">Notes</p>
<p>Clients should always send MSDP data on
one of the following forms:</p>
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="n">cmdname</span> <span class="s1">&#39;&#39;</span> <span class="o">-&gt;</span> <span class="p">[</span><span class="n">cmdname</span><span class="p">,</span> <span class="p">[],</span> <span class="p">{}]</span>
<span class="n">cmdname</span> <span class="n">val</span> <span class="o">-&gt;</span> <span class="p">[</span><span class="n">cmdname</span><span class="p">,</span> <span class="p">[</span><span class="n">val</span><span class="p">],</span> <span class="p">{}]</span>
<span class="n">cmdname</span> <span class="n">array</span> <span class="o">-&gt;</span> <span class="p">[</span><span class="n">cmdname</span><span class="p">,</span> <span class="p">[</span><span class="n">array</span><span class="p">],</span> <span class="p">{}]</span>
<span class="n">cmdname</span> <span class="n">table</span> <span class="o">-&gt;</span> <span class="p">[</span><span class="n">cmdname</span><span class="p">,</span> <span class="p">[],</span> <span class="p">{</span><span class="n">table</span><span class="p">}]</span>
<span class="n">cmdname</span> <span class="n">array</span> <span class="n">cmdname</span> <span class="n">table</span> <span class="o">-&gt;</span> <span class="p">[</span><span class="n">cmdname</span><span class="p">,</span> <span class="p">[</span><span class="n">array</span><span class="p">],</span> <span class="p">{</span><span class="n">table</span><span class="p">}]</span>
</pre></div>
</div>
<p>Observe that all MSDP_VARS are used to identify cmdnames,
so if there are multiple arrays with the same cmdname
given, they will be merged into one argument array, same
for tables. Different MSDP_VARS (outside tables) will be
identified as separate cmdnames.</p>
</dd></dl>
<dl class="py method">
<dt id="evennia.server.portal.telnet_oob.TelnetOOB.decode_gmcp">
<code class="sig-name descname">decode_gmcp</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/telnet_oob.html#TelnetOOB.decode_gmcp"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#evennia.server.portal.telnet_oob.TelnetOOB.decode_gmcp" title="Permalink to this definition"></a></dt>
<dd><p>Decodes incoming GMCP data on the form varname &lt;structure&gt;.</p>
<dl class="field-list simple">
<dt class="field-odd">Parameters</dt>
<dd class="field-odd"><p><strong>data</strong> (<em>str</em><em> or </em><em>list</em>) GMCP data.</p>
</dd>
</dl>
<p class="rubric">Notes</p>
<p>Clients send data on the form “Module.Submodule.Cmdname &lt;structure&gt;”.
We assume the structure is valid JSON.</p>
<p>The following is parsed into Evennias formal structure:</p>
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="n">Core</span><span class="o">.</span><span class="n">Name</span> <span class="o">-&gt;</span> <span class="p">[</span><span class="n">name</span><span class="p">,</span> <span class="p">[],</span> <span class="p">{}]</span>
<span class="n">Core</span><span class="o">.</span><span class="n">Name</span> <span class="n">string</span> <span class="o">-&gt;</span> <span class="p">[</span><span class="n">name</span><span class="p">,</span> <span class="p">[</span><span class="n">string</span><span class="p">],</span> <span class="p">{}]</span>
<span class="n">Core</span><span class="o">.</span><span class="n">Name</span> <span class="p">[</span><span class="n">arg</span><span class="p">,</span> <span class="n">arg</span><span class="p">,</span><span class="o">...</span><span class="p">]</span> <span class="o">-&gt;</span> <span class="p">[</span><span class="n">name</span><span class="p">,</span> <span class="p">[</span><span class="n">args</span><span class="p">],</span> <span class="p">{}]</span>
<span class="n">Core</span><span class="o">.</span><span class="n">Name</span> <span class="p">{</span><span class="n">key</span><span class="p">:</span><span class="n">arg</span><span class="p">,</span> <span class="n">key</span><span class="p">:</span><span class="n">arg</span><span class="p">,</span> <span class="o">...</span><span class="p">}</span> <span class="o">-&gt;</span> <span class="p">[</span><span class="n">name</span><span class="p">,</span> <span class="p">[],</span> <span class="p">{</span><span class="n">kwargs</span><span class="p">}]</span>
<span class="n">Core</span><span class="o">.</span><span class="n">Name</span> <span class="p">[[</span><span class="n">args</span><span class="p">],</span> <span class="p">{</span><span class="n">kwargs</span><span class="p">}]</span> <span class="o">-&gt;</span> <span class="p">[</span><span class="n">name</span><span class="p">,</span> <span class="p">[</span><span class="n">args</span><span class="p">],</span> <span class="p">{</span><span class="n">kwargs</span><span class="p">}]</span>
</pre></div>
</div>
</dd></dl>
<dl class="py method">
<dt id="evennia.server.portal.telnet_oob.TelnetOOB.data_out">
<code class="sig-name descname">data_out</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">cmdname</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/telnet_oob.html#TelnetOOB.data_out"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#evennia.server.portal.telnet_oob.TelnetOOB.data_out" title="Permalink to this definition"></a></dt>
<dd><p>Return a MSDP- or GMCP-valid subnegotiation across the protocol.</p>
<dl class="field-list simple">
<dt class="field-odd">Parameters</dt>
<dd class="field-odd"><ul class="simple">
<li><p><strong>cmdname</strong> (<em>str</em>) OOB-command name.</p></li>
<li><p><strong>args</strong> (<em>any</em>) Arguments to OOB command.</p></li>
<li><p><strong>kwargs</strong> (<em>any</em>) Arguments to OOB command.</p></li>
</ul>
</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.telnet_ssl.html" title="evennia.server.portal.telnet_ssl"
>next</a> |</li>
<li class="right" >
<a href="evennia.server.portal.telnet.html" title="evennia.server.portal.telnet"
>previous</a> |</li>
<li class="nav-item nav-item-0"><a href="../index.html">Evennia 2.x</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.telnet_oob</a></li>
</ul>
</div>
<div class="footer" role="contentinfo">
&#169; Copyright 2023, The Evennia developer community.
Created using <a href="https://www.sphinx-doc.org/">Sphinx</a> 3.2.1.
</div>
</body>
</html>