Updated HTML docs.

This commit is contained in:
Evennia docbuilder action 2022-11-30 23:00:41 +00:00
parent c4d635100d
commit 95fc796b1e
41 changed files with 1379 additions and 156 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: bc2bcabd6b04f6dd16043c03be952745
config: 5b20b972d42b3e19afd64d47dd30d4f9
tags: 645f666f9bcd5a90fca523b33c5a78b7

View file

@ -98,7 +98,7 @@
<section class="tex2jax_ignore mathjax_ignore" id="default-commands">
<h1>Default Commands<a class="headerlink" href="#default-commands" title="Permalink to this headline"></a></h1>
<p>The full set of default Evennia commands currently contains 88 commands in 9 source
<p>The full set of default Evennia commands currently contains 89 commands in 9 source
files. Our policy for adding default commands is outlined <a class="reference internal" href="../Coding/Default-Command-Syntax.html"><span class="doc std std-doc">here</span></a>. The
<a class="reference internal" href="Commands.html"><span class="doc std std-doc">Commands</span></a> documentation explains how Commands work as well as how to make new or customize
existing ones.</p>
@ -158,6 +158,7 @@ with <a class="reference internal" href="EvEditor.html"><span class="doc std std
<li><p><a class="reference internal" href="../api/evennia.commands.default.account.html#evennia.commands.default.account.CmdColorTest" title="evennia.commands.default.account.CmdColorTest"><span class="xref myst py py-class"><strong>color</strong></span></a> (cmdset: <a class="reference internal" href="../api/evennia.commands.default.cmdset_account.html#evennia.commands.default.cmdset_account.AccountCmdSet" title="evennia.commands.default.cmdset_account.AccountCmdSet"><span class="xref myst py py-class">AccountCmdSet</span></a>, help-category: <em>General</em>)</p></li>
<li><p><a class="reference internal" href="../api/evennia.commands.default.unloggedin.html#evennia.commands.default.unloggedin.CmdUnconnectedConnect" title="evennia.commands.default.unloggedin.CmdUnconnectedConnect"><span class="xref myst py py-class"><strong>connect</strong> [co, con, conn]</span></a> (cmdset: <a class="reference internal" href="../api/evennia.commands.default.cmdset_unloggedin.html#evennia.commands.default.cmdset_unloggedin.UnloggedinCmdSet" title="evennia.commands.default.cmdset_unloggedin.UnloggedinCmdSet"><span class="xref myst py py-class">UnloggedinCmdSet</span></a>, help-category: <em>General</em>)</p></li>
<li><p><a class="reference internal" href="../api/evennia.commands.default.unloggedin.html#evennia.commands.default.unloggedin.CmdUnconnectedCreate" title="evennia.commands.default.unloggedin.CmdUnconnectedCreate"><span class="xref myst py py-class"><strong>create</strong> [cr, cre]</span></a> (cmdset: <a class="reference internal" href="../api/evennia.commands.default.cmdset_unloggedin.html#evennia.commands.default.cmdset_unloggedin.UnloggedinCmdSet" title="evennia.commands.default.cmdset_unloggedin.UnloggedinCmdSet"><span class="xref myst py py-class">UnloggedinCmdSet</span></a>, help-category: <em>General</em>)</p></li>
<li><p><a class="reference internal" href="../api/evennia.commands.default.comms.html#evennia.commands.default.comms.CmdDiscord2Chan" title="evennia.commands.default.comms.CmdDiscord2Chan"><span class="xref myst py py-class"><strong>discord2chan</strong> [discord]</span></a> (cmdset: <a class="reference internal" href="../api/evennia.commands.default.cmdset_account.html#evennia.commands.default.cmdset_account.AccountCmdSet" title="evennia.commands.default.cmdset_account.AccountCmdSet"><span class="xref myst py py-class">AccountCmdSet</span></a>, help-category: <em>Comms</em>)</p></li>
<li><p><a class="reference internal" href="../api/evennia.commands.default.general.html#evennia.commands.default.general.CmdDrop" title="evennia.commands.default.general.CmdDrop"><span class="xref myst py py-class"><strong>drop</strong></span></a> (cmdset: <a class="reference internal" href="../api/evennia.commands.default.cmdset_character.html#evennia.commands.default.cmdset_character.CharacterCmdSet" title="evennia.commands.default.cmdset_character.CharacterCmdSet"><span class="xref myst py py-class">CharacterCmdSet</span></a>, help-category: <em>General</em>)</p></li>
<li><p><a class="reference internal" href="../api/evennia.commands.default.unloggedin.html#evennia.commands.default.unloggedin.CmdUnconnectedEncoding" title="evennia.commands.default.unloggedin.CmdUnconnectedEncoding"><span class="xref myst py py-class"><strong>encoding</strong> [encode]</span></a> (cmdset: <a class="reference internal" href="../api/evennia.commands.default.cmdset_unloggedin.html#evennia.commands.default.cmdset_unloggedin.UnloggedinCmdSet" title="evennia.commands.default.cmdset_unloggedin.UnloggedinCmdSet"><span class="xref myst py py-class">UnloggedinCmdSet</span></a>, help-category: <em>General</em>)</p></li>
<li><p><a class="reference internal" href="../api/evennia.commands.default.general.html#evennia.commands.default.general.CmdGet" title="evennia.commands.default.general.CmdGet"><span class="xref myst py py-class"><strong>get</strong> [grab]</span></a> (cmdset: <a class="reference internal" href="../api/evennia.commands.default.cmdset_character.html#evennia.commands.default.cmdset_character.CharacterCmdSet" title="evennia.commands.default.cmdset_character.CharacterCmdSet"><span class="xref myst py py-class">CharacterCmdSet</span></a>, help-category: <em>General</em>)</p></li>

View file

@ -0,0 +1,282 @@
<!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>Connect Evennia channels to 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-this"><a href="">Connect Evennia channels to 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><a href="../index.html">Table of Contents</a></h3>
<ul>
<li><a class="reference internal" href="#">Connect Evennia channels to Discord</a><ul>
<li><a class="reference internal" href="#configuring-discord">Configuring Discord</a></li>
<li><a class="reference internal" href="#step-by-step-discord-setup">Step-By-Step Discord Setup</a><ul>
<li><a class="reference internal" href="#creating-a-discord-bot-application">Creating a Discord Bot Application</a></li>
<li><a class="reference internal" href="#adding-your-bot-to-your-server">Adding your bot to your server</a></li>
<li><a class="reference internal" href="#activating-discord-in-evennia">Activating Discord in Evennia</a></li>
<li><a class="reference internal" href="#connecting-an-evennia-channel-to-a-discord-channel">Connecting an Evennia channel to a Discord channel</a></li>
<li><a class="reference internal" href="#further-customization">Further Customization</a></li>
</ul>
</li>
</ul>
</li>
</ul>
<div role="note" aria-label="source link">
<!--h3>This Page</h3-->
<ul class="this-page-menu">
<li><a href="../_sources/Setup/Channels-to-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="Channels-to-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 class="tex2jax_ignore mathjax_ignore" id="connect-evennia-channels-to-discord">
<h1>Connect Evennia channels to Discord<a class="headerlink" href="#connect-evennia-channels-to-discord" title="Permalink to this headline"></a></h1>
<p><a class="reference external" href="https://discord.com">Discord</a> is a popular chat service, especially for game
communities. If you have a discord server for your game, you can connect it
to your in-game channels to communicate between in-game and out.</p>
<section id="configuring-discord">
<h2>Configuring Discord<a class="headerlink" href="#configuring-discord" title="Permalink to this headline"></a></h2>
<p>The first thing youll need is to set up a Discord bot to connect to your game.
Go to the <a class="reference external" href="https://discord.com/developers/applications">bot applications</a> page and make a new application. Youll need the
“MESSAGE CONTENT” toggle flipped On, and to add your bot token to your settings.</p>
<div class="highlight-python notranslate"><div class="highlight"><pre><span></span><span class="c1"># mygame/server/conf/secret_settings.py</span>
<span class="n">DISCORD_BOT_TOKEN</span> <span class="o">=</span> <span class="s1">&#39;&lt;your Discord bot token&gt;&#39;</span>
</pre></div>
</div>
<p>You will also need the <code class="docutils literal notranslate"><span class="pre">pyopenssl</span></code> module, if it isnt already installed.
Install it into your Evennia python environment with</p>
<div class="highlight-none notranslate"><div class="highlight"><pre><span></span>pip install pyopenssl
</pre></div>
</div>
<p>Lastly, enable Discord in your settings</p>
<div class="highlight-python notranslate"><div class="highlight"><pre><span></span><span class="n">DISCORD_ENABLED</span> <span class="o">=</span> <span class="kc">True</span>
</pre></div>
</div>
<p>Start/reload Evennia and log in as a privileged user. You should now have a new
command available: <code class="docutils literal notranslate"><span class="pre">discord2chan</span></code>. Enter <code class="docutils literal notranslate"><span class="pre">help</span> <span class="pre">discord2chan</span></code> for an explanation
of its options.</p>
<p>Adding a new channel link is done with the following command:</p>
<div class="highlight-none notranslate"><div class="highlight"><pre><span></span> discord2chan &lt;evennia_channel&gt; = &lt;discord_channel_id&gt;
</pre></div>
</div>
<p>The <code class="docutils literal notranslate"><span class="pre">evennia_channel</span></code> argument must be the name of an existing Evennia channel,
and <code class="docutils literal notranslate"><span class="pre">discord_channel_id</span></code> is the full numeric ID of the Discord channel.</p>
<blockquote>
<div><p>Your bot needs to be added to the correct Discord server with access to the
channel in order to send or receive messages. This command does NOT verify that
your bot has Discord permissions!</p>
</div></blockquote>
</section>
<section id="step-by-step-discord-setup">
<h2>Step-By-Step Discord Setup<a class="headerlink" href="#step-by-step-discord-setup" title="Permalink to this headline"></a></h2>
<p>This section will walk through the entire process of setting up a Discord
connection to your Evennia game, step by step. If youve completed any of the
steps already, feel free to skip to the next.</p>
<section id="creating-a-discord-bot-application">
<h3>Creating a Discord Bot Application<a class="headerlink" href="#creating-a-discord-bot-application" title="Permalink to this headline"></a></h3>
<blockquote>
<div><p>You will need an active Discord account and admin access to a Discord server
in order to connect Evennia to it. This assumes you already do.</p>
</div></blockquote>
<p>Make sure youre logged in on the Discord website, then visit
<a class="reference external" href="https://discord.com/developers/applications">https://discord.com/developers/applications</a>. Click the “New Application”
button in the upper right corner, then enter the name for your new app - the
name of your Evennia game is a good option.</p>
<p>Youll next be brought to the settings page for the new application. Click “Bot”
on the sidebar menu, then “Build-a-Bot” to create your bot account.</p>
<p><strong>Save the displayed token!</strong> This will be the ONLY time that Discord will allow
you to see that token - if you lose it, you will have to reset it. This token is
how your bot confirms its identity, so its very important.</p>
<p>Next, add this token to your <em>secret</em> settings.</p>
<div class="highlight-python notranslate"><div class="highlight"><pre><span></span><span class="c1"># file: mygame/server/conf/secret_settings.py</span>
<span class="n">DISCORD_BOT_TOKEN</span> <span class="o">=</span> <span class="s1">&#39;&lt;token&gt;&#39;</span>
</pre></div>
</div>
<p>Once that is saved, scroll down the Bot page a little more and find the toggle for
“Message Content Intent”. Youll need this to be toggled to ON, or you bot wont
be able to read anyones messages.</p>
<p>Finally, you can add any additional settings to your new bot account: a display image,
display nickname, bio, etc. You can come back and change these at any time, so
dont worry about it too much now.</p>
</section>
<section id="adding-your-bot-to-your-server">
<h3>Adding your bot to your server<a class="headerlink" href="#adding-your-bot-to-your-server" title="Permalink to this headline"></a></h3>
<p>While still in your new application, click “OAuth2” on the side menu, then “URL
Generator”. On this page, youll generate an invite URL for your app, then visit
that URL to add it to your server.</p>
<p>In the top box, find the checkbox for <code class="docutils literal notranslate"><span class="pre">bot</span></code> and check it: this will make a second
permissions box appear. In that box, youll want to check off at least the
following boxes:</p>
<ul class="simple">
<li><p>Read Messages/View Channels (in “General Permissions”)</p></li>
<li><p>Send Messages (in “Text Permissions”)</p></li>
</ul>
<p>Lastly, scroll down to the bottom of the page and copy the resulting URL. It should
look something like this:</p>
<div class="highlight-none notranslate"><div class="highlight"><pre><span></span>https://discord.com/api/oauth2/authorize?client_id=55555555555555555&amp;permissions=3072&amp;scope=bot
</pre></div>
</div>
<p>Visit that link, select the server for your Evennia connection, and confirm.</p>
<p>After the bot is added to your server, you can fine-tune the permissions further
through the usual Discord server administration.</p>
</section>
<section id="activating-discord-in-evennia">
<h3>Activating Discord in Evennia<a class="headerlink" href="#activating-discord-in-evennia" title="Permalink to this headline"></a></h3>
<p>Youll need to do two additional things with your Evennia game before it can connect
to Discord.</p>
<p>First, install <code class="docutils literal notranslate"><span class="pre">pyopenssl</span></code> to your virtual environment, if you havent already.</p>
<div class="highlight-none notranslate"><div class="highlight"><pre><span></span>pip install pyopenssl
</pre></div>
</div>
<p>Second, enable the Discord integration in your settings file.</p>
<div class="highlight-python notranslate"><div class="highlight"><pre><span></span><span class="c1"># file: server/conf/settings.py</span>
<span class="n">DISCORD_ENABLED</span> <span class="o">=</span> <span class="kc">True</span>
</pre></div>
</div>
<p>Start or reload your game to apply the changed settings, then log in as an account
with at least <code class="docutils literal notranslate"><span class="pre">Developer</span></code> permissions and initialize the bot account on Evennia with
the <code class="docutils literal notranslate"><span class="pre">discord2chan</span></code> command. You should receive a message that the bot was created, and
that there are no active connections to Discord.</p>
</section>
<section id="connecting-an-evennia-channel-to-a-discord-channel">
<h3>Connecting an Evennia channel to a Discord channel<a class="headerlink" href="#connecting-an-evennia-channel-to-a-discord-channel" title="Permalink to this headline"></a></h3>
<p>You will need the name of your Evennia channel, and the channel ID for your Discord
channel. The channel ID is the last part of the URL when you visit a channel.</p>
<p>e.g. if the url is <code class="docutils literal notranslate"><span class="pre">https://discord.com/channels/55555555555555555/12345678901234567890</span></code>
then your channel ID is <code class="docutils literal notranslate"><span class="pre">12345678901234567890</span></code></p>
<p>Link the two channels with the following command:</p>
<div class="highlight-none notranslate"><div class="highlight"><pre><span></span>discord2chan &lt;evennia channel&gt; = &lt;discord channel id&gt;
</pre></div>
</div>
<p>The two channels should now relay to each other. Confirm this works by posting a
message on the evennia channel, and another on the Discord channel - they should
both show up on the other end.</p>
<blockquote>
<div><p>If you dont see any messages coming to or from Discord, make sure that your bot
has permission to read and send messages and that your application has the
“Message Content Intents” flag set.</p>
</div></blockquote>
</section>
<section id="further-customization">
<h3>Further Customization<a class="headerlink" href="#further-customization" title="Permalink to this headline"></a></h3>
<p>The help file for <code class="docutils literal notranslate"><span class="pre">discord2chan</span></code> has more information on how to use the command to
customize your relayed messages.</p>
<p>For anything more complex, however, you can create your own child class of
<code class="docutils literal notranslate"><span class="pre">DiscordBot</span></code> and add it to your settings.</p>
<div class="highlight-python notranslate"><div class="highlight"><pre><span></span><span class="c1"># file: mygame/server/conf/settings.py</span>
<span class="c1"># EXAMPLE</span>
<span class="n">DISCORD_BOT_CLASS</span> <span class="o">=</span> <span class="s1">&#39;accounts.bots.DiscordBot&#39;</span>
</pre></div>
</div>
<blockquote>
<div><p>If you had already set up a Discord relay and are changing this, make sure you
either delete the old bot account in Evennia or change its typeclass or it wont
take effect.</p>
</div></blockquote>
<p>The core DiscordBot account class has several useful hooks already set up for
processing and relaying channel messages between Discord and Evennia channels,
along with the (unused by default) <code class="docutils literal notranslate"><span class="pre">direct_msg</span></code> hook for processing DMs sent to
the bot on Discord.</p>
<p>Only messages and server updates are processed by default, but the Discord custom
protocol passes all other unprocessed dispatch data on to the Evennia bot account
so you can add additional handling yourself. However, <strong>this integration is not a full library</strong>
and does not document the full range of possible Discord events.</p>
</section>
</section>
</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="nav-item nav-item-0"><a href="../index.html">Evennia 1.0-dev</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>
</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

@ -985,6 +985,21 @@ to change into <code class="docutils literal notranslate"><span class="pre">myga
<span class="c1"># them. These are secret and should thus be overridden in secret_settings file</span>
<span class="n">GRAPEVINE_CLIENT_ID</span> <span class="o">=</span> <span class="s2">&quot;&quot;</span>
<span class="n">GRAPEVINE_CLIENT_SECRET</span> <span class="o">=</span> <span class="s2">&quot;&quot;</span>
<span class="c1"># Discord (discord.com) is a popular communication service for many, especially</span>
<span class="c1"># for game communities. Evennia&#39;s channels can be connected to Discord channels</span>
<span class="c1"># and relay messages between Evennia and Discord. To use, you will need to create</span>
<span class="c1"># your own Discord application and bot.</span>
<span class="c1"># Discord also requires installing the pyopenssl library.</span>
<span class="c1"># Full step-by-step instructions are available in the official Evennia documentation.</span>
<span class="n">DISCORD_ENABLED</span> <span class="o">=</span> <span class="kc">False</span>
<span class="c1"># The Intents bitmask required by Discord bots to request particular API permissions.</span>
<span class="c1"># By default, this includes the basic guild status and message read/write flags.</span>
<span class="n">DISCORD_BOT_INTENTS</span> <span class="o">=</span> <span class="mi">105985</span>
<span class="c1"># The authentication token for the Discord bot. This should be kept secret and</span>
<span class="c1"># put in your secret_settings file.</span>
<span class="n">DISCORD_BOT_TOKEN</span> <span class="o">=</span> <span class="kc">None</span>
<span class="c1"># The account typeclass which the Evennia-side Discord relay bot will use.</span>
<span class="n">DISCORD_BOT_CLASS</span> <span class="o">=</span> <span class="s2">&quot;evennia.accounts.bots.DiscordBot&quot;</span>
<span class="c1">######################################################################</span>
<span class="c1"># Django web features</span>

View file

@ -89,21 +89,19 @@
<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">search</span><span class="p">,</span> <span class="n">utils</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>
<span class="kn">from</span> <span class="nn">evennia.utils.ansi</span> <span class="kn">import</span> <span class="n">strip_ansi</span>
<span class="n">_IDLE_TIMEOUT</span> <span class="o">=</span> <span class="n">settings</span><span class="o">.</span><span class="n">IDLE_TIMEOUT</span>
<span class="n">_IRC_ENABLED</span> <span class="o">=</span> <span class="n">settings</span><span class="o">.</span><span class="n">IRC_ENABLED</span>
<span class="n">_RSS_ENABLED</span> <span class="o">=</span> <span class="n">settings</span><span class="o">.</span><span class="n">RSS_ENABLED</span>
<span class="n">_GRAPEVINE_ENABLED</span> <span class="o">=</span> <span class="n">settings</span><span class="o">.</span><span class="n">GRAPEVINE_ENABLED</span>
<span class="n">_DISCORD_ENABLED</span> <span class="o">=</span> <span class="n">settings</span><span class="o">.</span><span class="n">DISCORD_ENABLED</span> <span class="ow">and</span> <span class="nb">hasattr</span><span class="p">(</span><span class="n">settings</span><span class="p">,</span> <span class="s2">&quot;DISCORD_BOT_TOKEN&quot;</span><span class="p">)</span>
<span class="n">_SESSIONS</span> <span class="o">=</span> <span class="kc">None</span>
<span class="c1"># Bot helper utilities</span>
<div class="viewcode-block" id="BotStarter"><a class="viewcode-back" href="../../../api/evennia.accounts.bots.html#evennia.accounts.bots.BotStarter">[docs]</a><span class="k">class</span> <span class="nc">BotStarter</span><span class="p">(</span><span class="n">DefaultScript</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> This non-repeating script has the</span>
@ -119,17 +117,18 @@
<span class="sd"> &quot;&quot;&quot;</span>
<span class="bp">self</span><span class="o">.</span><span class="n">key</span> <span class="o">=</span> <span class="s2">&quot;botstarter&quot;</span>
<span class="bp">self</span><span class="o">.</span><span class="n">desc</span> <span class="o">=</span> <span class="s2">&quot;bot start/keepalive&quot;</span>
<span class="bp">self</span><span class="o">.</span><span class="n">persistent</span> <span class="o">=</span> <span class="kc">True</span>
<span class="bp">self</span><span class="o">.</span><span class="n">db</span><span class="o">.</span><span class="n">started</span> <span class="o">=</span> <span class="kc">False</span></div>
<span class="bp">self</span><span class="o">.</span><span class="n">persistent</span> <span class="o">=</span> <span class="kc">True</span></div>
<div class="viewcode-block" id="BotStarter.at_server_start"><a class="viewcode-back" href="../../../api/evennia.accounts.bots.html#evennia.accounts.bots.BotStarter.at_server_start">[docs]</a> <span class="k">def</span> <span class="nf">at_server_start</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">at_start</span><span class="p">()</span></div>
<div class="viewcode-block" id="BotStarter.at_start"><a class="viewcode-back" href="../../../api/evennia.accounts.bots.html#evennia.accounts.bots.BotStarter.at_start">[docs]</a> <span class="k">def</span> <span class="nf">at_start</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> Kick bot into gear.</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">db</span><span class="o">.</span><span class="n">started</span><span class="p">:</span>
<span class="bp">self</span><span class="o">.</span><span class="n">account</span><span class="o">.</span><span class="n">start</span><span class="p">()</span>
<span class="bp">self</span><span class="o">.</span><span class="n">db</span><span class="o">.</span><span class="n">started</span> <span class="o">=</span> <span class="kc">True</span></div>
<span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">account</span><span class="o">.</span><span class="n">sessions</span><span class="o">.</span><span class="n">all</span><span class="p">():</span>
<span class="bp">self</span><span class="o">.</span><span class="n">account</span><span class="o">.</span><span class="n">start</span><span class="p">()</span></div>
<div class="viewcode-block" id="BotStarter.at_repeat"><a class="viewcode-back" href="../../../api/evennia.accounts.bots.html#evennia.accounts.bots.BotStarter.at_repeat">[docs]</a> <span class="k">def</span> <span class="nf">at_repeat</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
@ -144,22 +143,7 @@
<span class="k">if</span> <span class="ow">not</span> <span class="n">_SESSIONS</span><span class="p">:</span>
<span class="kn">from</span> <span class="nn">evennia.server.sessionhandler</span> <span class="kn">import</span> <span class="n">SESSIONS</span> <span class="k">as</span> <span class="n">_SESSIONS</span>
<span class="k">for</span> <span class="n">session</span> <span class="ow">in</span> <span class="n">_SESSIONS</span><span class="o">.</span><span class="n">sessions_from_account</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">account</span><span class="p">):</span>
<span class="n">session</span><span class="o">.</span><span class="n">update_session_counters</span><span class="p">(</span><span class="n">idle</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span></div>
<div class="viewcode-block" id="BotStarter.at_server_reload"><a class="viewcode-back" href="../../../api/evennia.accounts.bots.html#evennia.accounts.bots.BotStarter.at_server_reload">[docs]</a> <span class="k">def</span> <span class="nf">at_server_reload</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> If server reloads we don&#39;t need to reconnect the protocol</span>
<span class="sd"> again, this is handled by the portal reconnect mechanism.</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="bp">self</span><span class="o">.</span><span class="n">db</span><span class="o">.</span><span class="n">started</span> <span class="o">=</span> <span class="kc">True</span></div>
<div class="viewcode-block" id="BotStarter.at_server_shutdown"><a class="viewcode-back" href="../../../api/evennia.accounts.bots.html#evennia.accounts.bots.BotStarter.at_server_shutdown">[docs]</a> <span class="k">def</span> <span class="nf">at_server_shutdown</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> Make sure we are shutdown.</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="bp">self</span><span class="o">.</span><span class="n">db</span><span class="o">.</span><span class="n">started</span> <span class="o">=</span> <span class="kc">False</span></div></div>
<span class="n">session</span><span class="o">.</span><span class="n">update_session_counters</span><span class="p">(</span><span class="n">idle</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span></div></div>
<span class="c1">#</span>
@ -188,8 +172,7 @@
<span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">locks</span><span class="o">.</span><span class="n">add</span><span class="p">(</span><span class="n">lockstring</span><span class="p">)</span>
<span class="c1"># set the basics of being a bot</span>
<span class="n">script_key</span> <span class="o">=</span> <span class="nb">str</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">key</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">scripts</span><span class="o">.</span><span class="n">add</span><span class="p">(</span><span class="n">BotStarter</span><span class="p">,</span> <span class="n">key</span><span class="o">=</span><span class="n">script_key</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">scripts</span><span class="o">.</span><span class="n">add</span><span class="p">(</span><span class="n">BotStarter</span><span class="p">,</span> <span class="n">key</span><span class="o">=</span><span class="s2">&quot;bot_starter&quot;</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">is_bot</span> <span class="o">=</span> <span class="kc">True</span></div>
<div class="viewcode-block" id="Bot.start"><a class="viewcode-back" href="../../../api/evennia.accounts.bots.html#evennia.accounts.bots.Bot.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="o">**</span><span class="n">kwargs</span><span class="p">):</span>
@ -654,6 +637,205 @@
<span class="bp">self</span><span class="o">.</span><span class="n">ndb</span><span class="o">.</span><span class="n">ev_channel</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">ev_channel</span>
<span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">ndb</span><span class="o">.</span><span class="n">ev_channel</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_channel</span><span class="o">.</span><span class="n">msg</span><span class="p">(</span><span class="n">text</span><span class="p">,</span> <span class="n">senders</span><span class="o">=</span><span class="bp">self</span><span class="p">)</span></div></div>
<span class="c1"># Discord</span>
<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"> &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>
<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"># 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>
<span class="k">for</span> <span class="n">channel_name</span> <span class="ow">in</span> <span class="nb">list</span><span class="p">(</span><span class="n">channel_set</span><span class="p">):</span>
<span class="n">channel</span> <span class="o">=</span> <span class="n">search</span><span class="o">.</span><span class="n">search_channel</span><span class="p">(</span><span class="n">channel_name</span><span class="p">)</span>
<span class="k">if</span> <span class="ow">not</span> <span class="n">channel</span><span class="p">:</span>
<span class="k">raise</span> <span class="ne">RuntimeError</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Evennia Channel </span><span class="si">{</span><span class="n">channel_name</span><span class="si">}</span><span class="s2"> not found.&quot;</span><span class="p">)</span>
<span class="n">channel</span> <span class="o">=</span> <span class="n">channel</span><span class="p">[</span><span class="mi">0</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="p">[</span><span class="n">channel_name</span><span class="p">]</span> <span class="o">=</span> <span class="n">channel</span></div>
<div class="viewcode-block" id="DiscordBot.start"><a class="viewcode-back" href="../../../api/evennia.accounts.bots.html#evennia.accounts.bots.DiscordBot.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="sd">&quot;&quot;&quot;</span>
<span class="sd"> Tell the Discord protocol to connect.</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="k">if</span> <span class="ow">not</span> <span class="n">_DISCORD_ENABLED</span><span class="p">:</span>
<span class="bp">self</span><span class="o">.</span><span class="n">delete</span><span class="p">()</span>
<span class="k">return</span>
<span class="k">if</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="p">:</span>
<span class="k">for</span> <span class="n">channel</span> <span class="ow">in</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="n">values</span><span class="p">():</span>
<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"># 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>
<span class="k">for</span> <span class="n">channel_name</span> <span class="ow">in</span> <span class="nb">list</span><span class="p">(</span><span class="n">channel_set</span><span class="p">):</span>
<span class="n">channel</span> <span class="o">=</span> <span class="n">search</span><span class="o">.</span><span class="n">search_channel</span><span class="p">(</span><span class="n">channel_name</span><span class="p">)</span>
<span class="k">if</span> <span class="ow">not</span> <span class="n">channel</span><span class="p">:</span>
<span class="k">raise</span> <span class="ne">RuntimeError</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Evennia Channel </span><span class="si">{</span><span class="n">channel_name</span><span class="si">}</span><span class="s2"> not found.&quot;</span><span class="p">)</span>
<span class="n">channel</span> <span class="o">=</span> <span class="n">channel</span><span class="p">[</span><span class="mi">0</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="p">[</span><span class="n">channel_name</span><span class="p">]</span> <span class="o">=</span> <span class="n">channel</span>
<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="c1"># connect</span>
<span class="k">global</span> <span class="n">_SESSIONS</span>
<span class="k">if</span> <span class="ow">not</span> <span class="n">_SESSIONS</span><span class="p">:</span>
<span class="kn">from</span> <span class="nn">evennia.server.sessionhandler</span> <span class="kn">import</span> <span class="n">SESSIONS</span> <span class="k">as</span> <span class="n">_SESSIONS</span>
<span class="c1"># these will be made available as properties on the protocol factory</span>
<span class="n">configdict</span> <span class="o">=</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">dbid</span><span class="p">}</span>
<span class="n">_SESSIONS</span><span class="o">.</span><span class="n">start_bot_session</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">factory_path</span><span class="p">,</span> <span class="n">configdict</span><span class="p">)</span></div>
<div class="viewcode-block" id="DiscordBot.at_pre_channel_msg"><a class="viewcode-back" href="../../../api/evennia.accounts.bots.html#evennia.accounts.bots.DiscordBot.at_pre_channel_msg">[docs]</a> <span class="k">def</span> <span class="nf">at_pre_channel_msg</span><span class="p">(</span><span class="bp">self</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="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"> 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>
<div class="viewcode-block" id="DiscordBot.channel_msg"><a class="viewcode-back" href="../../../api/evennia.accounts.bots.html#evennia.accounts.bots.DiscordBot.channel_msg">[docs]</a> <span class="k">def</span> <span class="nf">channel_msg</span><span class="p">(</span><span class="bp">self</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="kc">None</span><span class="p">,</span> <span class="n">relayed</span><span class="o">=</span><span class="kc">False</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"> Passes channel messages received on to discord</span>
<span class="sd"> Args:</span>
<span class="sd"> message (str) - Incoming text from channel.</span>
<span class="sd"> channel (Channel) - The channel the message is being received from</span>
<span class="sd"> Keyword Args:</span>
<span class="sd"> senders (list or None) - Object(s) sending the message</span>
<span class="sd"> relayed (bool) - A flag identifying whether the message was relayed by the bot.</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="k">if</span> <span class="n">kwargs</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;relayed&quot;</span><span class="p">):</span>
<span class="c1"># don&#39;t relay our own relayed messages</span>
<span class="k">return</span>
<span class="k">if</span> <span class="n">channel_list</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"># get all the discord channels connected to this evennia channel</span>
<span class="n">channel_name</span> <span class="o">=</span> <span class="n">channel</span><span class="o">.</span><span class="n">name</span>
<span class="k">for</span> <span class="n">dc_chan</span> <span class="ow">in</span> <span class="p">[</span><span class="n">dcid</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_list</span> <span class="k">if</span> <span class="n">evchan</span> <span class="o">==</span> <span class="n">channel_name</span><span class="p">]:</span>
<span class="c1"># send outputfunc channel(msg, discord channel)</span>
<span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">msg</span><span class="p">(</span><span class="n">channel</span><span class="o">=</span><span class="p">(</span><span class="n">strip_ansi</span><span class="p">(</span><span class="n">message</span><span class="o">.</span><span class="n">strip</span><span class="p">()),</span> <span class="n">dc_chan</span><span class="p">))</span></div>
<div class="viewcode-block" id="DiscordBot.direct_msg"><a class="viewcode-back" href="../../../api/evennia.accounts.bots.html#evennia.accounts.bots.DiscordBot.direct_msg">[docs]</a> <span class="k">def</span> <span class="nf">direct_msg</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">message</span><span class="p">,</span> <span class="n">sender</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"> Called when the Discord bot receives a direct message on Discord.</span>
<span class="sd"> Args:</span>
<span class="sd"> message (str) - Incoming text from Discord.</span>
<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"> &quot;&quot;&quot;</span>
<span class="k">pass</span></div>
<div class="viewcode-block" id="DiscordBot.relay_to_channel"><a class="viewcode-back" href="../../../api/evennia.accounts.bots.html#evennia.accounts.bots.DiscordBot.relay_to_channel">[docs]</a> <span class="k">def</span> <span class="nf">relay_to_channel</span><span class="p">(</span>
<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"> 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"> 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"> &quot;&quot;&quot;</span>
<span class="n">tag_str</span> <span class="o">=</span> <span class="s2">&quot;&quot;</span>
<span class="k">if</span> <span class="n">from_channel</span> <span class="ow">and</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="p">:</span>
<span class="n">tag_str</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;#</span><span class="si">{</span><span class="n">from_channel</span><span class="si">}</span><span class="s2">&quot;</span>
<span class="k">if</span> <span class="n">from_server</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">db</span><span class="o">.</span><span class="n">tag_guild</span><span class="p">:</span>
<span class="k">if</span> <span class="n">tag_str</span><span class="p">:</span>
<span class="n">tag_str</span> <span class="o">+=</span> <span class="sa">f</span><span class="s2">&quot;@</span><span class="si">{</span><span class="n">from_server</span><span class="si">}</span><span class="s2">&quot;</span>
<span class="k">else</span><span class="p">:</span>
<span class="n">tag_str</span> <span class="o">=</span> <span class="n">from_server</span>
<span class="k">if</span> <span class="n">tag_str</span><span class="p">:</span>
<span class="n">tag_str</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;[</span><span class="si">{</span><span class="n">tag_str</span><span class="si">}</span><span class="s2">] &quot;</span>
<span class="k">if</span> <span class="n">sender</span><span class="p">:</span>
<span class="n">sender_name</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;|c</span><span class="si">{</span><span class="n">sender</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span><span class="si">}</span><span class="s2">|n: &quot;</span>
<span class="n">message</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">tag_str</span><span class="si">}{</span><span class="n">sender_name</span><span class="si">}{</span><span class="n">message</span><span class="si">}</span><span class="s2">&quot;</span>
<span class="n">to_channel</span><span class="o">.</span><span class="n">msg</span><span class="p">(</span><span class="n">message</span><span class="p">,</span> <span class="n">senders</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">relayed</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span></div>
<div class="viewcode-block" id="DiscordBot.execute_cmd"><a class="viewcode-back" href="../../../api/evennia.accounts.bots.html#evennia.accounts.bots.DiscordBot.execute_cmd">[docs]</a> <span class="k">def</span> <span class="nf">execute_cmd</span><span class="p">(</span>
<span class="bp">self</span><span class="p">,</span>
<span class="n">content</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
<span class="n">session</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
<span class="nb">type</span><span class="o">=</span><span class="kc">None</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="o">**</span><span class="n">kwargs</span><span class="p">,</span>
<span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> Take incoming data from protocol and send it to connected channel. This is</span>
<span class="sd"> triggered by the bot_data_in Inputfunc.</span>
<span class="sd"> Keyword args:</span>
<span class="sd"> content (str) - The content of the message from Discord.</span>
<span class="sd"> session (Session) - The protocol session this command came from.</span>
<span class="sd"> type (str, optional) - Indicates the type of activity from Discord, if</span>
<span class="sd"> the protocol pre-processed it.</span>
<span class="sd"> sender (tuple) - Identifies the author of the Discord activity in a tuple of two</span>
<span class="sd"> strings, in the form of (id, nickname)</span>
<span class="sd"> kwargs - Any additional data specific to a particular type of actions. The data for</span>
<span class="sd"> any Discord actions not pre-processed by the protocol will also be passed via kwargs.</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="c1"># normal channel message</span>
<span class="k">if</span> <span class="nb">type</span> <span class="o">==</span> <span class="s2">&quot;channel&quot;</span><span class="p">:</span>
<span class="n">channel_id</span> <span class="o">=</span> <span class="n">kwargs</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;channel_id&quot;</span><span class="p">)</span>
<span class="n">channel_name</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">discord_channels</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">channel_id</span><span class="p">,</span> <span class="p">{})</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;name&quot;</span><span class="p">,</span> <span class="n">channel_id</span><span class="p">)</span>
<span class="n">guild_id</span> <span class="o">=</span> <span class="n">kwargs</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;guild_id&quot;</span><span class="p">)</span>
<span class="n">guild</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">guilds</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">guild_id</span><span class="p">)</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="k">for</span> <span class="n">ev_channel</span> <span class="ow">in</span> <span class="p">[</span>
<span class="n">ev_chan</span> <span class="k">for</span> <span class="n">ev_chan</span><span class="p">,</span> <span class="n">dc_id</span> <span class="ow">in</span> <span class="n">channel_links</span> <span class="k">if</span> <span class="n">dc_id</span> <span class="o">==</span> <span class="n">channel_id</span>
<span class="p">]:</span>
<span class="n">channel</span> <span class="o">=</span> <span class="n">search</span><span class="o">.</span><span class="n">channel_search</span><span class="p">(</span><span class="n">ev_channel</span><span class="p">)</span>
<span class="k">if</span> <span class="ow">not</span> <span class="n">channel</span><span class="p">:</span>
<span class="k">continue</span>
<span class="n">channel</span> <span class="o">=</span> <span class="n">channel</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span>
<span class="bp">self</span><span class="o">.</span><span class="n">relay_to_channel</span><span class="p">(</span><span class="n">content</span><span class="p">,</span> <span class="n">channel</span><span class="p">,</span> <span class="n">sender</span><span class="p">,</span> <span class="n">channel_name</span><span class="p">,</span> <span class="n">guild</span><span class="p">)</span>
<span class="c1"># direct message</span>
<span class="k">elif</span> <span class="nb">type</span> <span class="o">==</span> <span class="s2">&quot;direct&quot;</span><span class="p">:</span>
<span class="c1"># pass on to the DM hook</span>
<span class="bp">self</span><span class="o">.</span><span class="n">direct_msg</span><span class="p">(</span><span class="n">content</span><span class="p">,</span> <span class="n">sender</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">)</span>
<span class="c1"># guild info update</span>
<span class="k">elif</span> <span class="nb">type</span> <span class="o">==</span> <span class="s2">&quot;guild&quot;</span><span class="p">:</span>
<span class="k">if</span> <span class="n">guild_id</span> <span class="o">:=</span> <span class="n">kwargs</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;guild_id&quot;</span><span class="p">):</span>
<span class="k">if</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">guilds</span><span class="p">:</span>
<span class="bp">self</span><span class="o">.</span><span class="n">db</span><span class="o">.</span><span class="n">guilds</span> <span class="o">=</span> <span class="p">{}</span>
<span class="bp">self</span><span class="o">.</span><span class="n">db</span><span class="o">.</span><span class="n">guilds</span><span class="p">[</span><span class="n">guild_id</span><span class="p">]</span> <span class="o">=</span> <span class="n">kwargs</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;guild_name&quot;</span><span class="p">,</span> <span class="s2">&quot;Unidentified&quot;</span><span class="p">)</span>
<span class="k">if</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">discord_channels</span><span class="p">:</span>
<span class="bp">self</span><span class="o">.</span><span class="n">db</span><span class="o">.</span><span class="n">discord_channels</span> <span class="o">=</span> <span class="p">{}</span>
<span class="bp">self</span><span class="o">.</span><span class="n">db</span><span class="o">.</span><span class="n">discord_channels</span><span class="o">.</span><span class="n">update</span><span class="p">(</span><span class="n">kwargs</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;channels&quot;</span><span class="p">,</span> <span class="p">{}))</span></div></div>
</pre></div>
</div>

View file

@ -149,7 +149,8 @@
<span class="bp">self</span><span class="o">.</span><span class="n">add</span><span class="p">(</span><span class="n">comms</span><span class="o">.</span><span class="n">CmdIRC2Chan</span><span class="p">())</span>
<span class="bp">self</span><span class="o">.</span><span class="n">add</span><span class="p">(</span><span class="n">comms</span><span class="o">.</span><span class="n">CmdIRCStatus</span><span class="p">())</span>
<span class="bp">self</span><span class="o">.</span><span class="n">add</span><span class="p">(</span><span class="n">comms</span><span class="o">.</span><span class="n">CmdRSS2Chan</span><span class="p">())</span>
<span class="bp">self</span><span class="o">.</span><span class="n">add</span><span class="p">(</span><span class="n">comms</span><span class="o">.</span><span class="n">CmdGrapevine2Chan</span><span class="p">())</span></div></div>
<span class="bp">self</span><span class="o">.</span><span class="n">add</span><span class="p">(</span><span class="n">comms</span><span class="o">.</span><span class="n">CmdGrapevine2Chan</span><span class="p">())</span>
<span class="bp">self</span><span class="o">.</span><span class="n">add</span><span class="p">(</span><span class="n">comms</span><span class="o">.</span><span class="n">CmdDiscord2Chan</span><span class="p">())</span></div></div>
<span class="c1"># self.add(comms.CmdChannels())</span>
<span class="c1"># self.add(comms.CmdAddCom())</span>
<span class="c1"># self.add(comms.CmdDelCom())</span>

View file

@ -81,7 +81,7 @@
<span class="sd">- channel</span>
<span class="sd">- page</span>
<span class="sd">- irc/rss/grapevine linking</span>
<span class="sd">- irc/rss/grapevine/discord linking</span>
<span class="sd">&quot;&quot;&quot;</span>
@ -92,7 +92,7 @@
<span class="kn">from</span> <span class="nn">evennia.comms.comms</span> <span class="kn">import</span> <span class="n">DefaultChannel</span>
<span class="kn">from</span> <span class="nn">evennia.comms.models</span> <span class="kn">import</span> <span class="n">Msg</span>
<span class="kn">from</span> <span class="nn">evennia.locks.lockhandler</span> <span class="kn">import</span> <span class="n">LockException</span>
<span class="kn">from</span> <span class="nn">evennia.utils</span> <span class="kn">import</span> <span class="n">create</span><span class="p">,</span> <span class="n">logger</span><span class="p">,</span> <span class="n">utils</span>
<span class="kn">from</span> <span class="nn">evennia.utils</span> <span class="kn">import</span> <span class="n">create</span><span class="p">,</span> <span class="n">logger</span><span class="p">,</span> <span class="n">search</span><span class="p">,</span> <span class="n">utils</span>
<span class="kn">from</span> <span class="nn">evennia.utils.evmenu</span> <span class="kn">import</span> <span class="n">ask_yes_no</span>
<span class="kn">from</span> <span class="nn">evennia.utils.logger</span> <span class="kn">import</span> <span class="n">tail_log_file</span>
<span class="kn">from</span> <span class="nn">evennia.utils.utils</span> <span class="kn">import</span> <span class="n">class_from_module</span><span class="p">,</span> <span class="n">strip_unsafe_input</span>
@ -112,6 +112,7 @@
<span class="s2">&quot;CmdIRCStatus&quot;</span><span class="p">,</span>
<span class="s2">&quot;CmdRSS2Chan&quot;</span><span class="p">,</span>
<span class="s2">&quot;CmdGrapevine2Chan&quot;</span><span class="p">,</span>
<span class="s2">&quot;CmdDiscord2Chan&quot;</span><span class="p">,</span>
<span class="p">)</span>
<span class="n">_DEFAULT_WIDTH</span> <span class="o">=</span> <span class="n">settings</span><span class="o">.</span><span class="n">CLIENT_DEFAULT_WIDTH</span>
@ -1986,6 +1987,176 @@
<span class="n">bot</span><span class="o">.</span><span class="n">start</span><span class="p">(</span><span class="n">ev_channel</span><span class="o">=</span><span class="n">channel</span><span class="p">,</span> <span class="n">grapevine_channel</span><span class="o">=</span><span class="n">grapevine_channel</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">msg</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Grapevine connection created </span><span class="si">{</span><span class="n">channel</span><span class="si">}</span><span class="s2"> &lt;-&gt; </span><span class="si">{</span><span class="n">grapevine_channel</span><span class="si">}</span><span class="s2">.&quot;</span><span class="p">)</span></div></div>
<div class="viewcode-block" id="CmdDiscord2Chan"><a class="viewcode-back" href="../../../../api/evennia.commands.default.comms.html#evennia.commands.default.comms.CmdDiscord2Chan">[docs]</a><span class="k">class</span> <span class="nc">CmdDiscord2Chan</span><span class="p">(</span><span class="n">COMMAND_DEFAULT_CLASS</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> Link an Evennia channel to an external Discord channel</span>
<span class="sd"> Usage:</span>
<span class="sd"> discord2chan[/switches]</span>
<span class="sd"> discord2chan[/switches] &lt;evennia_channel&gt; [= &lt;discord_channel_id&gt;]</span>
<span class="sd"> discord2chan/name &lt;bot_name&gt;</span>
<span class="sd"> Switches:</span>
<span class="sd"> /list - (or no switch) show existing Evennia &lt;-&gt; Discord links</span>
<span class="sd"> /remove - remove an existing link by link ID</span>
<span class="sd"> /delete - alias to remove</span>
<span class="sd"> /guild - toggle the Discord server tag on/off</span>
<span class="sd"> /channel - toggle the Evennia/Discord channel tags on/off</span>
<span class="sd"> Example:</span>
<span class="sd"> discord2chan mydiscord = 555555555555555</span>
<span class="sd"> This creates a link between an in-game Evennia channel and an external</span>
<span class="sd"> Discord channel. You must have a valid Discord bot application</span>
<span class="sd"> (https://discord.com/developers/applications)) and your DISCORD_BOT_TOKEN</span>
<span class="sd"> must be added to settings. (Please put it in secret_settings !)</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="n">key</span> <span class="o">=</span> <span class="s2">&quot;discord2chan&quot;</span>
<span class="n">aliases</span> <span class="o">=</span> <span class="p">(</span><span class="s2">&quot;discord&quot;</span><span class="p">,)</span>
<span class="n">switch_options</span> <span class="o">=</span> <span class="p">(</span>
<span class="s2">&quot;channel&quot;</span><span class="p">,</span>
<span class="s2">&quot;delete&quot;</span><span class="p">,</span>
<span class="s2">&quot;guild&quot;</span><span class="p">,</span>
<span class="s2">&quot;list&quot;</span><span class="p">,</span>
<span class="s2">&quot;remove&quot;</span><span class="p">,</span>
<span class="p">)</span>
<span class="n">locks</span> <span class="o">=</span> <span class="s2">&quot;cmd:serversetting(DISCORD_ENABLED) and pperm(Developer)&quot;</span>
<span class="n">help_category</span> <span class="o">=</span> <span class="s2">&quot;Comms&quot;</span>
<div class="viewcode-block" id="CmdDiscord2Chan.func"><a class="viewcode-back" href="../../../../api/evennia.commands.default.comms.html#evennia.commands.default.comms.CmdDiscord2Chan.func">[docs]</a> <span class="k">def</span> <span class="nf">func</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;Manage the Evennia&lt;-&gt;Discord channel links&quot;&quot;&quot;</span>
<span class="k">if</span> <span class="ow">not</span> <span class="n">settings</span><span class="o">.</span><span class="n">DISCORD_BOT_TOKEN</span><span class="p">:</span>
<span class="bp">self</span><span class="o">.</span><span class="n">msg</span><span class="p">(</span>
<span class="s2">&quot;You must add your Discord bot application token to settings as DISCORD_BOT_TOKEN&quot;</span>
<span class="p">)</span>
<span class="k">return</span>
<span class="n">discord_bot</span> <span class="o">=</span> <span class="p">[</span>
<span class="n">bot</span> <span class="k">for</span> <span class="n">bot</span> <span class="ow">in</span> <span class="n">AccountDB</span><span class="o">.</span><span class="n">objects</span><span class="o">.</span><span class="n">filter</span><span class="p">(</span><span class="n">db_is_bot</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="n">username</span><span class="o">=</span><span class="s2">&quot;DiscordBot&quot;</span><span class="p">)</span>
<span class="p">]</span>
<span class="k">if</span> <span class="ow">not</span> <span class="n">discord_bot</span><span class="p">:</span>
<span class="c1"># create a new discord bot</span>
<span class="n">bot_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_BOT_CLASS</span><span class="p">,</span> <span class="n">fallback</span><span class="o">=</span><span class="n">bots</span><span class="o">.</span><span class="n">DiscordBot</span><span class="p">)</span>
<span class="n">discord_bot</span> <span class="o">=</span> <span class="n">create</span><span class="o">.</span><span class="n">create_account</span><span class="p">(</span><span class="s2">&quot;DiscordBot&quot;</span><span class="p">,</span> <span class="kc">None</span><span class="p">,</span> <span class="kc">None</span><span class="p">,</span> <span class="n">typeclass</span><span class="o">=</span><span class="n">bot_class</span><span class="p">)</span>
<span class="n">discord_bot</span><span class="o">.</span><span class="n">start</span><span class="p">()</span>
<span class="bp">self</span><span class="o">.</span><span class="n">msg</span><span class="p">(</span><span class="s2">&quot;Created and initialized a new Discord relay bot.&quot;</span><span class="p">)</span>
<span class="k">else</span><span class="p">:</span>
<span class="n">discord_bot</span> <span class="o">=</span> <span class="n">discord_bot</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span>
<span class="k">if</span> <span class="ow">not</span> <span class="n">discord_bot</span><span class="o">.</span><span class="n">is_typeclass</span><span class="p">(</span><span class="n">settings</span><span class="o">.</span><span class="n">DISCORD_BOT_CLASS</span><span class="p">,</span> <span class="n">exact</span><span class="o">=</span><span class="kc">True</span><span class="p">):</span>
<span class="bp">self</span><span class="o">.</span><span class="n">msg</span><span class="p">(</span>
<span class="sa">f</span><span class="s2">&quot;WARNING: The Discord bot&#39;s typeclass is &#39;</span><span class="si">{</span><span class="n">discord_bot</span><span class="o">.</span><span class="n">typeclass_path</span><span class="si">}</span><span class="s2">&#39;. This does not match </span><span class="si">{</span><span class="n">settings</span><span class="o">.</span><span class="n">DISCORD_BOT_CLASS</span><span class="si">}</span><span class="s2"> in settings!&quot;</span>
<span class="p">)</span>
<span class="k">if</span> <span class="s2">&quot;guild&quot;</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">switches</span><span class="p">:</span>
<span class="n">discord_bot</span><span class="o">.</span><span class="n">db</span><span class="o">.</span><span class="n">tag_guild</span> <span class="o">=</span> <span class="ow">not</span> <span class="n">discord_bot</span><span class="o">.</span><span class="n">db</span><span class="o">.</span><span class="n">tag_guild</span>
<span class="bp">self</span><span class="o">.</span><span class="n">msg</span><span class="p">(</span>
<span class="sa">f</span><span class="s2">&quot;Messages to Evennia |wwill </span><span class="si">{</span><span class="s1">&#39;&#39;</span> <span class="k">if</span> <span class="n">discord_bot</span><span class="o">.</span><span class="n">db</span><span class="o">.</span><span class="n">tag_guild</span> <span class="k">else</span> <span class="s1">&#39;not &#39;</span><span class="si">}</span><span class="s2">|ninclude the Discord server.&quot;</span>
<span class="p">)</span>
<span class="k">return</span>
<span class="k">if</span> <span class="s2">&quot;channel&quot;</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">switches</span><span class="p">:</span>
<span class="n">discord_bot</span><span class="o">.</span><span class="n">db</span><span class="o">.</span><span class="n">tag_channel</span> <span class="o">=</span> <span class="ow">not</span> <span class="n">discord_bot</span><span class="o">.</span><span class="n">db</span><span class="o">.</span><span class="n">tag_channel</span>
<span class="bp">self</span><span class="o">.</span><span class="n">msg</span><span class="p">(</span>
<span class="sa">f</span><span class="s2">&quot;Relayed messages |wwill </span><span class="si">{</span><span class="s1">&#39;&#39;</span> <span class="k">if</span> <span class="n">discord_bot</span><span class="o">.</span><span class="n">db</span><span class="o">.</span><span class="n">tag_channel</span> <span class="k">else</span> <span class="s1">&#39;not &#39;</span><span class="si">}</span><span class="s2">|ninclude the originating channel.&quot;</span>
<span class="p">)</span>
<span class="k">return</span>
<span class="k">if</span> <span class="s2">&quot;list&quot;</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">switches</span> <span class="ow">or</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">args</span><span class="p">:</span>
<span class="c1"># show all connections</span>
<span class="k">if</span> <span class="n">channel_list</span> <span class="o">:=</span> <span class="n">discord_bot</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="n">table</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">styled_table</span><span class="p">(</span>
<span class="s2">&quot;|wLink ID|n&quot;</span><span class="p">,</span>
<span class="s2">&quot;|wEvennia|n&quot;</span><span class="p">,</span>
<span class="s2">&quot;|wDiscord|n&quot;</span><span class="p">,</span>
<span class="n">border</span><span class="o">=</span><span class="s2">&quot;cells&quot;</span><span class="p">,</span>
<span class="n">maxwidth</span><span class="o">=</span><span class="n">_DEFAULT_WIDTH</span><span class="p">,</span>
<span class="p">)</span>
<span class="c1"># iterate through the channel links</span>
<span class="c1"># load in the pretty names for the discord channels from cache</span>
<span class="n">dc_chan_names</span> <span class="o">=</span> <span class="n">discord_bot</span><span class="o">.</span><span class="n">attributes</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;discord_channels&quot;</span><span class="p">,</span> <span class="p">{})</span>
<span class="k">for</span> <span class="n">i</span><span class="p">,</span> <span class="p">(</span><span class="n">evchan</span><span class="p">,</span> <span class="n">dcchan</span><span class="p">)</span> <span class="ow">in</span> <span class="nb">enumerate</span><span class="p">(</span><span class="n">channel_list</span><span class="p">):</span>
<span class="n">dc_info</span> <span class="o">=</span> <span class="n">dc_chan_names</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">dcchan</span><span class="p">,</span> <span class="p">{</span><span class="s2">&quot;name&quot;</span><span class="p">:</span> <span class="n">dcchan</span><span class="p">,</span> <span class="s2">&quot;guild&quot;</span><span class="p">:</span> <span class="s2">&quot;unknown&quot;</span><span class="p">})</span>
<span class="n">table</span><span class="o">.</span><span class="n">add_row</span><span class="p">(</span>
<span class="n">i</span><span class="p">,</span> <span class="n">evchan</span><span class="p">,</span> <span class="sa">f</span><span class="s2">&quot;#</span><span class="si">{</span><span class="n">dc_info</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s1">&#39;name&#39;</span><span class="p">,</span><span class="s1">&#39;?&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">@</span><span class="si">{</span><span class="n">dc_info</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s1">&#39;guild&#39;</span><span class="p">,</span><span class="s1">&#39;?&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">&quot;</span>
<span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">msg</span><span class="p">(</span><span class="n">table</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">msg</span><span class="p">(</span><span class="s2">&quot;No Discord connections found.&quot;</span><span class="p">)</span>
<span class="k">return</span>
<span class="k">if</span> <span class="s2">&quot;disconnect&quot;</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">switches</span> <span class="ow">or</span> <span class="s2">&quot;remove&quot;</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">switches</span> <span class="ow">or</span> <span class="s2">&quot;delete&quot;</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">switches</span><span class="p">:</span>
<span class="k">if</span> <span class="n">channel_list</span> <span class="o">:=</span> <span class="n">discord_bot</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="k">try</span><span class="p">:</span>
<span class="n">lid</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">args</span><span class="o">.</span><span class="n">strip</span><span class="p">())</span>
<span class="k">except</span> <span class="ne">ValueError</span><span class="p">:</span>
<span class="bp">self</span><span class="o">.</span><span class="n">msg</span><span class="p">(</span><span class="s2">&quot;Usage: discord2chan/remove &lt;link id&gt;&quot;</span><span class="p">)</span>
<span class="k">return</span>
<span class="k">if</span> <span class="n">lid</span> <span class="o">&lt;</span> <span class="nb">len</span><span class="p">(</span><span class="n">channel_list</span><span class="p">):</span>
<span class="n">ev_chan</span><span class="p">,</span> <span class="n">dc_chan</span> <span class="o">=</span> <span class="n">discord_bot</span><span class="o">.</span><span class="n">db</span><span class="o">.</span><span class="n">channels</span><span class="o">.</span><span class="n">pop</span><span class="p">(</span><span class="n">lid</span><span class="p">)</span>
<span class="n">dc_chan_names</span> <span class="o">=</span> <span class="n">discord_bot</span><span class="o">.</span><span class="n">attributes</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;discord_channels&quot;</span><span class="p">,</span> <span class="p">{})</span>
<span class="n">dc_info</span> <span class="o">=</span> <span class="n">dc_chan_names</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">dc_chan</span><span class="p">,</span> <span class="p">{</span><span class="s2">&quot;name&quot;</span><span class="p">:</span> <span class="s2">&quot;unknown&quot;</span><span class="p">,</span> <span class="s2">&quot;guild&quot;</span><span class="p">:</span> <span class="s2">&quot;unknown&quot;</span><span class="p">})</span>
<span class="bp">self</span><span class="o">.</span><span class="n">msg</span><span class="p">(</span>
<span class="sa">f</span><span class="s2">&quot;Removed link between </span><span class="si">{</span><span class="n">ev_chan</span><span class="si">}</span><span class="s2"> and #</span><span class="si">{</span><span class="n">dc_info</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s1">&#39;name&#39;</span><span class="p">,</span><span class="s1">&#39;?&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">@</span><span class="si">{</span><span class="n">dc_info</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s1">&#39;guild&#39;</span><span class="p">,</span><span class="s1">&#39;?&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">&quot;</span>
<span class="p">)</span>
<span class="k">return</span>
<span class="k">else</span><span class="p">:</span>
<span class="bp">self</span><span class="o">.</span><span class="n">msg</span><span class="p">(</span><span class="s2">&quot;There are no active connections to Discord.&quot;</span><span class="p">)</span>
<span class="k">return</span>
<span class="n">ev_channel</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">lhs</span>
<span class="n">dc_channel</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">rhs</span>
<span class="k">if</span> <span class="n">ev_channel</span> <span class="ow">and</span> <span class="ow">not</span> <span class="n">dc_channel</span><span class="p">:</span>
<span class="c1"># show all discord channels linked to self.lhs</span>
<span class="k">if</span> <span class="n">channel_list</span> <span class="o">:=</span> <span class="n">discord_bot</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="n">table</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">styled_table</span><span class="p">(</span>
<span class="s2">&quot;|wLink ID|n&quot;</span><span class="p">,</span>
<span class="s2">&quot;|wEvennia|n&quot;</span><span class="p">,</span>
<span class="s2">&quot;|wDiscord|n&quot;</span><span class="p">,</span>
<span class="n">border</span><span class="o">=</span><span class="s2">&quot;cells&quot;</span><span class="p">,</span>
<span class="n">maxwidth</span><span class="o">=</span><span class="n">_DEFAULT_WIDTH</span><span class="p">,</span>
<span class="p">)</span>
<span class="c1"># iterate through the channel links</span>
<span class="c1"># load in the pretty names for the discord channels from cache</span>
<span class="n">dc_chan_names</span> <span class="o">=</span> <span class="n">discord_bot</span><span class="o">.</span><span class="n">attributes</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;discord_channels&quot;</span><span class="p">,</span> <span class="p">{})</span>
<span class="n">results</span> <span class="o">=</span> <span class="kc">False</span>
<span class="k">for</span> <span class="n">i</span><span class="p">,</span> <span class="p">(</span><span class="n">evchan</span><span class="p">,</span> <span class="n">dcchan</span><span class="p">)</span> <span class="ow">in</span> <span class="nb">enumerate</span><span class="p">(</span><span class="n">channel_list</span><span class="p">):</span>
<span class="k">if</span> <span class="n">evchan</span><span class="o">.</span><span class="n">lower</span><span class="p">()</span> <span class="o">==</span> <span class="n">ev_channel</span><span class="o">.</span><span class="n">lower</span><span class="p">():</span>
<span class="n">dc_info</span> <span class="o">=</span> <span class="n">dc_chan_names</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">dcchan</span><span class="p">,</span> <span class="p">{</span><span class="s2">&quot;name&quot;</span><span class="p">:</span> <span class="n">dcchan</span><span class="p">,</span> <span class="s2">&quot;guild&quot;</span><span class="p">:</span> <span class="s2">&quot;unknown&quot;</span><span class="p">})</span>
<span class="n">table</span><span class="o">.</span><span class="n">add_row</span><span class="p">(</span><span class="n">i</span><span class="p">,</span> <span class="n">evchan</span><span class="p">,</span> <span class="sa">f</span><span class="s2">&quot;#</span><span class="si">{</span><span class="n">dc_info</span><span class="p">[</span><span class="s1">&#39;name&#39;</span><span class="p">]</span><span class="si">}</span><span class="s2">@</span><span class="si">{</span><span class="n">dc_info</span><span class="p">[</span><span class="s1">&#39;guild&#39;</span><span class="p">]</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
<span class="n">results</span> <span class="o">=</span> <span class="kc">True</span>
<span class="k">if</span> <span class="n">results</span><span class="p">:</span>
<span class="bp">self</span><span class="o">.</span><span class="n">msg</span><span class="p">(</span><span class="n">table</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">msg</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;There are no Discord channels connected to </span><span class="si">{</span><span class="n">ev_channel</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="bp">self</span><span class="o">.</span><span class="n">msg</span><span class="p">(</span><span class="s2">&quot;There are no active connections to Discord.&quot;</span><span class="p">)</span>
<span class="k">return</span>
<span class="c1"># check if link already exists</span>
<span class="k">if</span> <span class="n">channel_list</span> <span class="o">:=</span> <span class="n">discord_bot</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="k">if</span> <span class="p">(</span><span class="n">ev_channel</span><span class="p">,</span> <span class="n">dc_channel</span><span class="p">)</span> <span class="ow">in</span> <span class="n">channel_list</span><span class="p">:</span>
<span class="bp">self</span><span class="o">.</span><span class="n">msg</span><span class="p">(</span><span class="s2">&quot;Those channels are already linked.&quot;</span><span class="p">)</span>
<span class="k">return</span>
<span class="k">else</span><span class="p">:</span>
<span class="n">discord_bot</span><span class="o">.</span><span class="n">db</span><span class="o">.</span><span class="n">channels</span> <span class="o">=</span> <span class="p">[]</span>
<span class="c1"># create the new link</span>
<span class="n">channel_obj</span> <span class="o">=</span> <span class="n">search</span><span class="o">.</span><span class="n">search_channel</span><span class="p">(</span><span class="n">ev_channel</span><span class="p">)</span>
<span class="k">if</span> <span class="ow">not</span> <span class="n">channel_obj</span><span class="p">:</span>
<span class="bp">self</span><span class="o">.</span><span class="n">msg</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;There is no channel &#39;</span><span class="si">{</span><span class="n">ev_channel</span><span class="si">}</span><span class="s2">&#39;&quot;</span><span class="p">)</span>
<span class="k">return</span>
<span class="n">channel_obj</span> <span class="o">=</span> <span class="n">channel_obj</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span>
<span class="n">discord_bot</span><span class="o">.</span><span class="n">db</span><span class="o">.</span><span class="n">channels</span><span class="o">.</span><span class="n">append</span><span class="p">((</span><span class="n">channel_obj</span><span class="o">.</span><span class="n">name</span><span class="p">,</span> <span class="n">dc_channel</span><span class="p">))</span>
<span class="n">channel_obj</span><span class="o">.</span><span class="n">connect</span><span class="p">(</span><span class="n">discord_bot</span><span class="p">)</span>
<span class="k">if</span> <span class="n">dc_chans</span> <span class="o">:=</span> <span class="n">discord_bot</span><span class="o">.</span><span class="n">db</span><span class="o">.</span><span class="n">discord_channels</span><span class="p">:</span>
<span class="n">dc_channel_name</span> <span class="o">=</span> <span class="n">dc_chans</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">dc_channel</span><span class="p">,</span> <span class="p">{})</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;name&quot;</span><span class="p">,</span> <span class="n">dc_channel</span><span class="p">)</span>
<span class="k">else</span><span class="p">:</span>
<span class="n">dc_channel_name</span> <span class="o">=</span> <span class="n">dc_channel</span>
<span class="bp">self</span><span class="o">.</span><span class="n">msg</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Discord connection created: </span><span class="si">{</span><span class="n">channel_obj</span><span class="o">.</span><span class="n">name</span><span class="si">}</span><span class="s2"> &lt;-&gt; #</span><span class="si">{</span><span class="n">dc_channel_name</span><span class="si">}</span><span class="s2">.&quot;</span><span class="p">)</span></div></div>
</pre></div>
</div>

View file

@ -326,7 +326,7 @@
<span class="k">if</span> <span class="n">strings</span><span class="p">:</span>
<span class="n">caller</span><span class="o">.</span><span class="n">msg</span><span class="p">(</span><span class="s2">&quot;</span><span class="se">\n</span><span class="s2">&quot;</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">strings</span><span class="p">))</span>
<span class="k">else</span><span class="p">:</span>
<span class="n">caller</span><span class="o">.</span><span class="n">msg</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;No nicks found matching &#39;</span><span class="si">{</span><span class="bp">self</span><span class="p">,</span><span class="n">lhs</span><span class="si">}</span><span class="s2">&#39;&quot;</span><span class="p">)</span>
<span class="n">caller</span><span class="o">.</span><span class="n">msg</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;No nicks found matching &#39;</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">lhs</span><span class="si">}</span><span class="s2">&#39;&quot;</span><span class="p">)</span>
<span class="k">return</span>
<span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">rhs</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">lhs</span><span class="p">:</span>

View file

@ -2080,6 +2080,58 @@
<span class="p">)</span></div></div>
<div class="viewcode-block" id="TestDiscord"><a class="viewcode-back" href="../../../../api/evennia.commands.default.tests.html#evennia.commands.default.tests.TestDiscord">[docs]</a><span class="nd">@override_settings</span><span class="p">(</span><span class="n">DISCORD_BOT_TOKEN</span><span class="o">=</span><span class="s2">&quot;notarealtoken&quot;</span><span class="p">,</span> <span class="n">DISCORD_ENABLED</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
<span class="k">class</span> <span class="nc">TestDiscord</span><span class="p">(</span><span class="n">BaseEvenniaCommandTest</span><span class="p">):</span>
<div class="viewcode-block" id="TestDiscord.setUp"><a class="viewcode-back" href="../../../../api/evennia.commands.default.tests.html#evennia.commands.default.tests.TestDiscord.setUp">[docs]</a> <span class="k">def</span> <span class="nf">setUp</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">setUp</span><span class="p">()</span>
<span class="bp">self</span><span class="o">.</span><span class="n">channel</span> <span class="o">=</span> <span class="n">create</span><span class="o">.</span><span class="n">create_channel</span><span class="p">(</span><span class="n">key</span><span class="o">=</span><span class="s2">&quot;testchannel&quot;</span><span class="p">,</span> <span class="n">desc</span><span class="o">=</span><span class="s2">&quot;A test channel&quot;</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">cmddiscord</span> <span class="o">=</span> <span class="n">cmd_comms</span><span class="o">.</span><span class="n">CmdDiscord2Chan</span>
<span class="bp">self</span><span class="o">.</span><span class="n">cmddiscord</span><span class="o">.</span><span class="n">account_caller</span> <span class="o">=</span> <span class="kc">False</span>
<span class="c1"># create bot manually so it doesn&#39;t get started</span>
<span class="bp">self</span><span class="o">.</span><span class="n">discordbot</span> <span class="o">=</span> <span class="n">create</span><span class="o">.</span><span class="n">create_account</span><span class="p">(</span>
<span class="s2">&quot;DiscordBot&quot;</span><span class="p">,</span> <span class="kc">None</span><span class="p">,</span> <span class="kc">None</span><span class="p">,</span> <span class="n">typeclass</span><span class="o">=</span><span class="s2">&quot;evennia.accounts.bots.DiscordBot&quot;</span>
<span class="p">)</span></div>
<div class="viewcode-block" id="TestDiscord.tearDown"><a class="viewcode-back" href="../../../../api/evennia.commands.default.tests.html#evennia.commands.default.tests.TestDiscord.tearDown">[docs]</a> <span class="k">def</span> <span class="nf">tearDown</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">channel</span><span class="o">.</span><span class="n">pk</span><span class="p">:</span>
<span class="bp">self</span><span class="o">.</span><span class="n">channel</span><span class="o">.</span><span class="n">delete</span><span class="p">()</span></div>
<span class="nd">@parameterized</span><span class="o">.</span><span class="n">expand</span><span class="p">(</span>
<span class="p">[</span>
<span class="p">(</span><span class="s2">&quot;&quot;</span><span class="p">,</span> <span class="s2">&quot;No Discord connections found.&quot;</span><span class="p">),</span>
<span class="p">(</span><span class="s2">&quot;/list&quot;</span><span class="p">,</span> <span class="s2">&quot;No Discord connections found.&quot;</span><span class="p">),</span>
<span class="p">(</span><span class="s2">&quot;/guild&quot;</span><span class="p">,</span> <span class="s2">&quot;Messages to Evennia will include the Discord server.&quot;</span><span class="p">),</span>
<span class="p">(</span><span class="s2">&quot;/channel&quot;</span><span class="p">,</span> <span class="s2">&quot;Relayed messages will include the originating channel.&quot;</span><span class="p">),</span>
<span class="p">]</span>
<span class="p">)</span>
<span class="k">def</span> <span class="nf">test_discord__switches</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">cmd_args</span><span class="p">,</span> <span class="n">expected</span><span class="p">):</span>
<span class="bp">self</span><span class="o">.</span><span class="n">call</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">cmddiscord</span><span class="p">(),</span> <span class="n">cmd_args</span><span class="p">,</span> <span class="n">expected</span><span class="p">)</span>
<div class="viewcode-block" id="TestDiscord.test_discord__linking"><a class="viewcode-back" href="../../../../api/evennia.commands.default.tests.html#evennia.commands.default.tests.TestDiscord.test_discord__linking">[docs]</a> <span class="k">def</span> <span class="nf">test_discord__linking</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">call</span><span class="p">(</span>
<span class="bp">self</span><span class="o">.</span><span class="n">cmddiscord</span><span class="p">(),</span> <span class="s2">&quot;nosuchchannel = 5555555&quot;</span><span class="p">,</span> <span class="s2">&quot;There is no channel &#39;nosuchchannel&#39;&quot;</span>
<span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">call</span><span class="p">(</span>
<span class="bp">self</span><span class="o">.</span><span class="n">cmddiscord</span><span class="p">(),</span>
<span class="s2">&quot;testchannel = 5555555&quot;</span><span class="p">,</span>
<span class="s2">&quot;Discord connection created: testchannel &lt;-&gt; #5555555&quot;</span><span class="p">,</span>
<span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">assertTrue</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">discordbot</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">channel</span><span class="o">.</span><span class="n">subscriptions</span><span class="o">.</span><span class="n">all</span><span class="p">())</span>
<span class="bp">self</span><span class="o">.</span><span class="n">assertTrue</span><span class="p">((</span><span class="s2">&quot;testchannel&quot;</span><span class="p">,</span> <span class="s2">&quot;5555555&quot;</span><span class="p">)</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">discordbot</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="bp">self</span><span class="o">.</span><span class="n">call</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">cmddiscord</span><span class="p">(),</span> <span class="s2">&quot;testchannel = 5555555&quot;</span><span class="p">,</span> <span class="s2">&quot;Those channels are already linked.&quot;</span><span class="p">)</span></div>
<div class="viewcode-block" id="TestDiscord.test_discord__list"><a class="viewcode-back" href="../../../../api/evennia.commands.default.tests.html#evennia.commands.default.tests.TestDiscord.test_discord__list">[docs]</a> <span class="k">def</span> <span class="nf">test_discord__list</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">discordbot</span><span class="o">.</span><span class="n">db</span><span class="o">.</span><span class="n">channels</span> <span class="o">=</span> <span class="p">[(</span><span class="s2">&quot;testchannel&quot;</span><span class="p">,</span> <span class="s2">&quot;5555555&quot;</span><span class="p">)]</span>
<span class="n">cmdobj</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">cmddiscord</span><span class="p">()</span>
<span class="n">cmdobj</span><span class="o">.</span><span class="n">msg</span> <span class="o">=</span> <span class="k">lambda</span> <span class="n">text</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">:</span> <span class="nb">setattr</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="s2">&quot;out&quot;</span><span class="p">,</span> <span class="nb">str</span><span class="p">(</span><span class="n">text</span><span class="p">))</span>
<span class="bp">self</span><span class="o">.</span><span class="n">call</span><span class="p">(</span><span class="n">cmdobj</span><span class="p">,</span> <span class="s2">&quot;&quot;</span><span class="p">,</span> <span class="kc">None</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">assertIn</span><span class="p">(</span><span class="s2">&quot;testchannel&quot;</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">out</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">assertIn</span><span class="p">(</span><span class="s2">&quot;5555555&quot;</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">out</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">call</span><span class="p">(</span><span class="n">cmdobj</span><span class="p">,</span> <span class="s2">&quot;testchannel&quot;</span><span class="p">,</span> <span class="kc">None</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">assertIn</span><span class="p">(</span><span class="s2">&quot;testchannel&quot;</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">out</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">assertIn</span><span class="p">(</span><span class="s2">&quot;5555555&quot;</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">out</span><span class="p">)</span></div></div>
<div class="viewcode-block" id="TestBatchProcess"><a class="viewcode-back" href="../../../../api/evennia.commands.default.tests.html#evennia.commands.default.tests.TestBatchProcess">[docs]</a><span class="k">class</span> <span class="nc">TestBatchProcess</span><span class="p">(</span><span class="n">BaseEvenniaCommandTest</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> Test the batch processor.</span>

View file

@ -543,7 +543,8 @@
<span class="c1"># included in location.contents</span>
<span class="n">candidates</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span>
<span class="n">tags</span> <span class="o">=</span> <span class="p">[(</span><span class="n">tagkey</span><span class="p">,</span> <span class="n">tagcat</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="k">if</span> <span class="n">tagcat</span> <span class="k">else</span> <span class="kc">None</span><span class="p">)</span> <span class="k">for</span> <span class="n">tagkey</span><span class="p">,</span> <span class="o">*</span><span class="n">tagcat</span> <span class="ow">in</span> <span class="n">make_iter</span><span class="p">(</span><span class="n">tags</span><span class="p">)]</span>
<span class="k">if</span> <span class="n">tags</span><span class="p">:</span>
<span class="n">tags</span> <span class="o">=</span> <span class="p">[(</span><span class="n">tagkey</span><span class="p">,</span> <span class="n">tagcat</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="k">if</span> <span class="n">tagcat</span> <span class="k">else</span> <span class="kc">None</span><span class="p">)</span> <span class="k">for</span> <span class="n">tagkey</span><span class="p">,</span> <span class="o">*</span><span class="n">tagcat</span> <span class="ow">in</span> <span class="n">make_iter</span><span class="p">(</span><span class="n">tags</span><span class="p">)]</span>
<span class="n">results</span> <span class="o">=</span> <span class="n">ObjectDB</span><span class="o">.</span><span class="n">objects</span><span class="o">.</span><span class="n">search_object</span><span class="p">(</span>
<span class="n">searchdata</span><span class="p">,</span>

View file

@ -1,6 +1,6 @@
# Default Commands
The full set of default Evennia commands currently contains 88 commands in 9 source
The full set of default Evennia commands currently contains 89 commands in 9 source
files. Our policy for adding default commands is outlined [here](../Coding/Default-Command-Syntax.md). The
[Commands](./Commands.md) documentation explains how Commands work as well as how to make new or customize
existing ones.
@ -59,6 +59,7 @@ with [EvEditor](./EvEditor.md), flipping pages in [EvMore](./EvMore.md) or using
- [**color**](CmdColorTest) (cmdset: [AccountCmdSet](AccountCmdSet), help-category: _General_)
- [**connect** [co, con, conn]](CmdUnconnectedConnect) (cmdset: [UnloggedinCmdSet](UnloggedinCmdSet), help-category: _General_)
- [**create** [cr, cre]](CmdUnconnectedCreate) (cmdset: [UnloggedinCmdSet](UnloggedinCmdSet), help-category: _General_)
- [**discord2chan** [discord]](CmdDiscord2Chan) (cmdset: [AccountCmdSet](AccountCmdSet), help-category: _Comms_)
- [**drop**](CmdDrop) (cmdset: [CharacterCmdSet](CharacterCmdSet), help-category: _General_)
- [**encoding** [encode]](CmdUnconnectedEncoding) (cmdset: [UnloggedinCmdSet](UnloggedinCmdSet), help-category: _General_)
- [**get** [grab]](CmdGet) (cmdset: [CharacterCmdSet](CharacterCmdSet), help-category: _General_)

View file

@ -0,0 +1,173 @@
# Connect Evennia channels to Discord
[Discord](https://discord.com) is a popular chat service, especially for game
communities. If you have a discord server for your game, you can connect it
to your in-game channels to communicate between in-game and out.
## Configuring Discord
The first thing you'll need is to set up a Discord bot to connect to your game.
Go to the [bot applications](https://discord.com/developers/applications) page and make a new application. You'll need the
"MESSAGE CONTENT" toggle flipped On, and to add your bot token to your settings.
```python
# mygame/server/conf/secret_settings.py
DISCORD_BOT_TOKEN = '<your Discord bot token>'
```
You will also need the `pyopenssl` module, if it isn't already installed.
Install it into your Evennia python environment with
pip install pyopenssl
Lastly, enable Discord in your settings
```python
DISCORD_ENABLED = True
```
Start/reload Evennia and log in as a privileged user. You should now have a new
command available: `discord2chan`. Enter `help discord2chan` for an explanation
of its options.
Adding a new channel link is done with the following command:
discord2chan <evennia_channel> = <discord_channel_id>
The `evennia_channel` argument must be the name of an existing Evennia channel,
and `discord_channel_id` is the full numeric ID of the Discord channel.
> Your bot needs to be added to the correct Discord server with access to the
> channel in order to send or receive messages. This command does NOT verify that
> your bot has Discord permissions!
## Step-By-Step Discord Setup
This section will walk through the entire process of setting up a Discord
connection to your Evennia game, step by step. If you've completed any of the
steps already, feel free to skip to the next.
### Creating a Discord Bot Application
> You will need an active Discord account and admin access to a Discord server
> in order to connect Evennia to it. This assumes you already do.
Make sure you're logged in on the Discord website, then visit
https://discord.com/developers/applications. Click the "New Application"
button in the upper right corner, then enter the name for your new app - the
name of your Evennia game is a good option.
You'll next be brought to the settings page for the new application. Click "Bot"
on the sidebar menu, then "Build-a-Bot" to create your bot account.
**Save the displayed token!** This will be the ONLY time that Discord will allow
you to see that token - if you lose it, you will have to reset it. This token is
how your bot confirms its identity, so it's very important.
Next, add this token to your _secret_ settings.
```python
# file: mygame/server/conf/secret_settings.py
DISCORD_BOT_TOKEN = '<token>'
```
Once that is saved, scroll down the Bot page a little more and find the toggle for
"Message Content Intent". You'll need this to be toggled to ON, or you bot won't
be able to read anyone's messages.
Finally, you can add any additional settings to your new bot account: a display image,
display nickname, bio, etc. You can come back and change these at any time, so
don't worry about it too much now.
### Adding your bot to your server
While still in your new application, click "OAuth2" on the side menu, then "URL
Generator". On this page, you'll generate an invite URL for your app, then visit
that URL to add it to your server.
In the top box, find the checkbox for `bot` and check it: this will make a second
permissions box appear. In that box, you'll want to check off at least the
following boxes:
- Read Messages/View Channels (in "General Permissions")
- Send Messages (in "Text Permissions")
Lastly, scroll down to the bottom of the page and copy the resulting URL. It should
look something like this:
https://discord.com/api/oauth2/authorize?client_id=55555555555555555&permissions=3072&scope=bot
Visit that link, select the server for your Evennia connection, and confirm.
After the bot is added to your server, you can fine-tune the permissions further
through the usual Discord server administration.
### Activating Discord in Evennia
You'll need to do two additional things with your Evennia game before it can connect
to Discord.
First, install `pyopenssl` to your virtual environment, if you haven't already.
pip install pyopenssl
Second, enable the Discord integration in your settings file.
```python
# file: server/conf/settings.py
DISCORD_ENABLED = True
```
Start or reload your game to apply the changed settings, then log in as an account
with at least `Developer` permissions and initialize the bot account on Evennia with
the `discord2chan` command. You should receive a message that the bot was created, and
that there are no active connections to Discord.
### Connecting an Evennia channel to a Discord channel
You will need the name of your Evennia channel, and the channel ID for your Discord
channel. The channel ID is the last part of the URL when you visit a channel.
e.g. if the url is `https://discord.com/channels/55555555555555555/12345678901234567890`
then your channel ID is `12345678901234567890`
Link the two channels with the following command:
discord2chan <evennia channel> = <discord channel id>
The two channels should now relay to each other. Confirm this works by posting a
message on the evennia channel, and another on the Discord channel - they should
both show up on the other end.
> If you don't see any messages coming to or from Discord, make sure that your bot
> has permission to read and send messages and that your application has the
> "Message Content Intents" flag set.
### Further Customization
The help file for `discord2chan` has more information on how to use the command to
customize your relayed messages.
For anything more complex, however, you can create your own child class of
`DiscordBot` and add it to your settings.
```python
# file: mygame/server/conf/settings.py
# EXAMPLE
DISCORD_BOT_CLASS = 'accounts.bots.DiscordBot'
```
> If you had already set up a Discord relay and are changing this, make sure you
> either delete the old bot account in Evennia or change its typeclass or it won't
> take effect.
The core DiscordBot account class has several useful hooks already set up for
processing and relaying channel messages between Discord and Evennia channels,
along with the (unused by default) `direct_msg` hook for processing DMs sent to
the bot on Discord.
Only messages and server updates are processed by default, but the Discord custom
protocol passes all other unprocessed dispatch data on to the Evennia bot account
so you can add additional handling yourself. However, **this integration is not a full library**
and does not document the full range of possible Discord events.

View file

@ -893,6 +893,21 @@ GRAPEVINE_CHANNELS = ["gossip", "testing"]
# them. These are secret and should thus be overridden in secret_settings file
GRAPEVINE_CLIENT_ID = ""
GRAPEVINE_CLIENT_SECRET = ""
# Discord (discord.com) is a popular communication service for many, especially
# for game communities. Evennia's channels can be connected to Discord channels
# and relay messages between Evennia and Discord. To use, you will need to create
# your own Discord application and bot.
# Discord also requires installing the pyopenssl library.
# Full step-by-step instructions are available in the official Evennia documentation.
DISCORD_ENABLED = False
# The Intents bitmask required by Discord bots to request particular API permissions.
# By default, this includes the basic guild status and message read/write flags.
DISCORD_BOT_INTENTS = 105985
# The authentication token for the Discord bot. This should be kept secret and
# put in your secret_settings file.
DISCORD_BOT_TOKEN = None
# The account typeclass which the Evennia-side Discord relay bot will use.
DISCORD_BOT_CLASS = "evennia.accounts.bots.DiscordBot"
######################################################################
# Django web features

View file

@ -116,6 +116,14 @@ into gear when it is initialized.</p>
<dd><p>Called once, when script is created.</p>
</dd></dl>
<dl class="py method">
<dt id="evennia.accounts.bots.BotStarter.at_server_start">
<code class="sig-name descname">at_server_start</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/accounts/bots.html#BotStarter.at_server_start"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#evennia.accounts.bots.BotStarter.at_server_start" title="Permalink to this definition"></a></dt>
<dd><p>This hook is called after the server has started. It can be used to add
post-startup setup for Scripts without a timer component (for which at_start
could be used).</p>
</dd></dl>
<dl class="py method">
<dt id="evennia.accounts.bots.BotStarter.at_start">
<code class="sig-name descname">at_start</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/accounts/bots.html#BotStarter.at_start"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#evennia.accounts.bots.BotStarter.at_start" title="Permalink to this definition"></a></dt>
@ -132,19 +140,6 @@ has no sessions). So we update the idle counter manually here
instead. This keeps the bot getting hit by IDLE_TIMEOUT.</p>
</dd></dl>
<dl class="py method">
<dt id="evennia.accounts.bots.BotStarter.at_server_reload">
<code class="sig-name descname">at_server_reload</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/accounts/bots.html#BotStarter.at_server_reload"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#evennia.accounts.bots.BotStarter.at_server_reload" title="Permalink to this definition"></a></dt>
<dd><p>If server reloads we dont need to reconnect the protocol
again, this is handled by the portal reconnect mechanism.</p>
</dd></dl>
<dl class="py method">
<dt id="evennia.accounts.bots.BotStarter.at_server_shutdown">
<code class="sig-name descname">at_server_shutdown</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/accounts/bots.html#BotStarter.at_server_shutdown"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#evennia.accounts.bots.BotStarter.at_server_shutdown" title="Permalink to this definition"></a></dt>
<dd><p>Make sure we are shutdown.</p>
</dd></dl>
<dl class="py exception">
<dt id="evennia.accounts.bots.BotStarter.DoesNotExist">
<em class="property">exception </em><code class="sig-name descname">DoesNotExist</code><a class="headerlink" href="#evennia.accounts.bots.BotStarter.DoesNotExist" title="Permalink to this definition"></a></dt>
@ -511,6 +506,137 @@ triggered by the bot_data_in Inputfunc.</p>
</dd></dl>
<dl class="py class">
<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>
<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>
<dd></dd></dl>
<dl class="py method">
<dt id="evennia.accounts.bots.DiscordBot.at_init">
<code class="sig-name descname">at_init</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/accounts/bots.html#DiscordBot.at_init"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#evennia.accounts.bots.DiscordBot.at_init" title="Permalink to this definition"></a></dt>
<dd><p>Load required channels back into memory</p>
</dd></dl>
<dl class="py method">
<dt id="evennia.accounts.bots.DiscordBot.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/accounts/bots.html#DiscordBot.start"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#evennia.accounts.bots.DiscordBot.start" title="Permalink to this definition"></a></dt>
<dd><p>Tell the Discord protocol to connect.</p>
</dd></dl>
<dl class="py method">
<dt id="evennia.accounts.bots.DiscordBot.at_pre_channel_msg">
<code class="sig-name descname">at_pre_channel_msg</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">message</span></em>, <em class="sig-param"><span class="n">channel</span></em>, <em class="sig-param"><span class="n">senders</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.at_pre_channel_msg"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#evennia.accounts.bots.DiscordBot.at_pre_channel_msg" title="Permalink to this definition"></a></dt>
<dd><p>Called by the Channel just before passing a message into <strong>channel_msg</strong>.</p>
<p>We overload this to set the channel tag prefix.</p>
</dd></dl>
<dl class="py method">
<dt id="evennia.accounts.bots.DiscordBot.channel_msg">
<code class="sig-name descname">channel_msg</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">message</span></em>, <em class="sig-param"><span class="n">channel</span></em>, <em class="sig-param"><span class="n">senders</span><span class="o">=</span><span class="default_value">None</span></em>, <em class="sig-param"><span class="n">relayed</span><span class="o">=</span><span class="default_value">False</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.channel_msg"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#evennia.accounts.bots.DiscordBot.channel_msg" title="Permalink to this definition"></a></dt>
<dd><p>Passes channel messages received on to discord</p>
<dl class="field-list simple">
<dt class="field-odd">Parameters</dt>
<dd class="field-odd"><ul class="simple">
<li><p><strong>message</strong> (<em>str</em>) </p></li>
<li><p><strong>channel</strong> (<em>Channel</em>) </p></li>
</ul>
</dd>
<dt class="field-even">Keyword Arguments</dt>
<dd class="field-even"><ul class="simple">
<li><p><strong>senders</strong> (<a class="reference internal" href="evennia.contrib.game_systems.barter.barter.html#evennia.contrib.game_systems.barter.barter.TradeHandler.list" title="evennia.contrib.game_systems.barter.barter.TradeHandler.list"><em>list</em></a><em> or </em><em>None</em><em>) </em><em>- Object</em><em>(</em><em>s</em>) </p></li>
<li><p><strong>relayed</strong> (<em>bool</em>) </p></li>
</ul>
</dd>
</dl>
</dd></dl>
<dl class="py method">
<dt id="evennia.accounts.bots.DiscordBot.direct_msg">
<code class="sig-name descname">direct_msg</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">message</span></em>, <em class="sig-param"><span class="n">sender</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.direct_msg"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#evennia.accounts.bots.DiscordBot.direct_msg" title="Permalink to this definition"></a></dt>
<dd><p>Called when the Discord bot receives a direct message on Discord.</p>
<dl class="field-list simple">
<dt class="field-odd">Parameters</dt>
<dd class="field-odd"><ul class="simple">
<li><p><strong>message</strong> (<em>str</em>) </p></li>
<li><p><strong>sender</strong> (<em>tuple</em><em>) </em><em>- The Discord info for the sender in the form</em><em> (</em><em>id</em><em>, </em><em>nickname</em>) </p></li>
</ul>
</dd>
<dt class="field-even">Keyword Arguments</dt>
<dd class="field-even"><p><strong>kwargs</strong> (<em>optional</em>) </p>
</dd>
</dl>
</dd></dl>
<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>
<dl class="field-list simple">
<dt class="field-odd">Parameters</dt>
<dd class="field-odd"><ul class="simple">
<li><p><strong>message</strong> (<em>str</em>) </p></li>
<li><p><strong>to_channel</strong> (<em>Channel</em>) </p></li>
</ul>
</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>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>
</ul>
</dd>
</dl>
</dd></dl>
<dl class="py method">
<dt id="evennia.accounts.bots.DiscordBot.execute_cmd">
<code class="sig-name descname">execute_cmd</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">content</span><span class="o">=</span><span class="default_value">None</span></em>, <em class="sig-param"><span class="n">session</span><span class="o">=</span><span class="default_value">None</span></em>, <em class="sig-param"><span class="n">type</span><span class="o">=</span><span class="default_value">None</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="o">**</span><span class="n">kwargs</span></em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/accounts/bots.html#DiscordBot.execute_cmd"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#evennia.accounts.bots.DiscordBot.execute_cmd" title="Permalink to this definition"></a></dt>
<dd><p>Take incoming data from protocol and send it to connected channel. This is
triggered by the bot_data_in Inputfunc.</p>
<dl class="field-list simple">
<dt class="field-odd">Keyword Arguments</dt>
<dd class="field-odd"><ul class="simple">
<li><p><strong>content</strong> (<em>str</em>) </p></li>
<li><p><strong>session</strong> (<a class="reference internal" href="evennia.server.session.html#evennia.server.session.Session" title="evennia.server.session.Session"><em>Session</em></a>) </p></li>
<li><p><strong>type</strong> (<em>str</em><em>, </em><em>optional</em>) the protocol pre-processed it.</p></li>
<li><p><strong>sender</strong> (<em>tuple</em>) strings, in the form of (id, nickname)</p></li>
<li><p><strong>- Any additional data specific to a particular type of actions. The data for</strong> (<em>kwargs</em>) any Discord actions not pre-processed by the protocol will also be passed via kwargs.</p></li>
</ul>
</dd>
</dl>
</dd></dl>
<dl class="py exception">
<dt id="evennia.accounts.bots.DiscordBot.DoesNotExist">
<em class="property">exception </em><code class="sig-name descname">DoesNotExist</code><a class="headerlink" href="#evennia.accounts.bots.DiscordBot.DoesNotExist" title="Permalink to this definition"></a></dt>
<dd><p>Bases: <a class="reference internal" href="#evennia.accounts.bots.Bot.DoesNotExist" title="evennia.accounts.bots.Bot.DoesNotExist"><code class="xref py py-class docutils literal notranslate"><span class="pre">evennia.accounts.bots.Bot.DoesNotExist</span></code></a></p>
</dd></dl>
<dl class="py exception">
<dt id="evennia.accounts.bots.DiscordBot.MultipleObjectsReturned">
<em class="property">exception </em><code class="sig-name descname">MultipleObjectsReturned</code><a class="headerlink" href="#evennia.accounts.bots.DiscordBot.MultipleObjectsReturned" title="Permalink to this definition"></a></dt>
<dd><p>Bases: <a class="reference internal" href="#evennia.accounts.bots.Bot.MultipleObjectsReturned" title="evennia.accounts.bots.Bot.MultipleObjectsReturned"><code class="xref py py-class docutils literal notranslate"><span class="pre">evennia.accounts.bots.Bot.MultipleObjectsReturned</span></code></a></p>
</dd></dl>
<dl class="py attribute">
<dt id="evennia.accounts.bots.DiscordBot.path">
<code class="sig-name descname">path</code><em class="property"> = 'evennia.accounts.bots.DiscordBot'</em><a class="headerlink" href="#evennia.accounts.bots.DiscordBot.path" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
<dl class="py attribute">
<dt id="evennia.accounts.bots.DiscordBot.typename">
<code class="sig-name descname">typename</code><em class="property"> = 'DiscordBot'</em><a class="headerlink" href="#evennia.accounts.bots.DiscordBot.typename" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
</dd></dl>
</section>

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"> = ['ls', 'l']</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"> = ['l', 'ls']</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': '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>
<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>
<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"> = ['pemit', 'remit']</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"> = ['remit', 'pemit']</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': '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>
<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>
<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"> = ['batchcommand', 'batchcmd']</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"> = ['batchcmd', 'batchcommand']</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': '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>
<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>
<dd></dd></dl>
</dd></dl>

View file

@ -592,7 +592,7 @@ You can specify the /force switch to bypass this confirmation.</p>
<dl class="py attribute">
<dt id="evennia.commands.default.building.CmdDestroy.aliases">
<code class="sig-name descname">aliases</code><em class="property"> = ['&#64;delete', '&#64;del']</em><a class="headerlink" href="#evennia.commands.default.building.CmdDestroy.aliases" title="Permalink to this definition"></a></dt>
<code class="sig-name descname">aliases</code><em class="property"> = ['&#64;del', '&#64;delete']</em><a class="headerlink" href="#evennia.commands.default.building.CmdDestroy.aliases" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
<dl class="py attribute">
@ -633,7 +633,7 @@ You can specify the /force switch to bypass this confirmation.</p>
<dl class="py attribute">
<dt id="evennia.commands.default.building.CmdDestroy.search_index_entry">
<code class="sig-name descname">search_index_entry</code><em class="property"> = {'aliases': '&#64;delete &#64;del', 'category': 'building', 'key': '&#64;destroy', 'no_prefix': 'destroy delete del', 'tags': '', 'text': '\n permanently delete objects\n\n Usage:\n destroy[/switches] [obj, obj2, obj3, [dbref-dbref], ...]\n\n Switches:\n override - The destroy command will usually avoid accidentally\n destroying account objects. This switch overrides this safety.\n force - destroy without confirmation.\n Examples:\n destroy house, roof, door, 44-78\n destroy 5-10, flower, 45\n destroy/force north\n\n Destroys one or many objects. If dbrefs are used, a range to delete can be\n given, e.g. 4-10. Also the end points will be deleted. This command\n displays a confirmation before destroying, to make sure of your choice.\n You can specify the /force switch to bypass this confirmation.\n '}</em><a class="headerlink" href="#evennia.commands.default.building.CmdDestroy.search_index_entry" title="Permalink to this definition"></a></dt>
<code class="sig-name descname">search_index_entry</code><em class="property"> = {'aliases': '&#64;del &#64;delete', 'category': 'building', 'key': '&#64;destroy', 'no_prefix': 'destroy del delete', 'tags': '', 'text': '\n permanently delete objects\n\n Usage:\n destroy[/switches] [obj, obj2, obj3, [dbref-dbref], ...]\n\n Switches:\n override - The destroy command will usually avoid accidentally\n destroying account objects. This switch overrides this safety.\n force - destroy without confirmation.\n Examples:\n destroy house, roof, door, 44-78\n destroy 5-10, flower, 45\n destroy/force north\n\n Destroys one or many objects. If dbrefs are used, a range to delete can be\n given, e.g. 4-10. Also the end points will be deleted. This command\n displays a confirmation before destroying, to make sure of your choice.\n You can specify the /force switch to bypass this confirmation.\n '}</em><a class="headerlink" href="#evennia.commands.default.building.CmdDestroy.search_index_entry" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
</dd></dl>
@ -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;parent', '&#64;type', '&#64;swap', '&#64;update', '&#64;typeclasses']</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;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>
<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;parent &#64;type &#64;swap &#64;update &#64;typeclasses', 'category': 'building', 'key': '&#64;typeclass', 'no_prefix': 'typeclass parent type swap update 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>
<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>
<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;ex', '&#64;exam']</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;exam', '&#64;ex']</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;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>
<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>
<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"> = ['ls', 'l']</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"> = ['l', 'ls']</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': '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>
<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>
<dd></dd></dl>
</dd></dl>
@ -268,7 +268,7 @@ for everyone to use, you need build privileges and the alias command.</p>
<dl class="py attribute">
<dt id="evennia.commands.default.general.CmdNick.aliases">
<code class="sig-name descname">aliases</code><em class="property"> = ['nickname', 'nicks']</em><a class="headerlink" href="#evennia.commands.default.general.CmdNick.aliases" title="Permalink to this definition"></a></dt>
<code class="sig-name descname">aliases</code><em class="property"> = ['nicks', 'nickname']</em><a class="headerlink" href="#evennia.commands.default.general.CmdNick.aliases" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
<dl class="py attribute">
@ -300,7 +300,7 @@ for everyone to use, you need build privileges and the alias command.</p>
<dl class="py attribute">
<dt id="evennia.commands.default.general.CmdNick.search_index_entry">
<code class="sig-name descname">search_index_entry</code><em class="property"> = {'aliases': 'nickname nicks', 'category': 'general', 'key': 'nick', 'no_prefix': ' nickname nicks', 'tags': '', 'text': '\n define a personal alias/nick by defining a string to\n match and replace it with another on the fly\n\n Usage:\n nick[/switches] &lt;string&gt; [= [replacement_string]]\n nick[/switches] &lt;template&gt; = &lt;replacement_template&gt;\n nick/delete &lt;string&gt; or number\n nicks\n\n Switches:\n inputline - replace on the inputline (default)\n object - replace on object-lookup\n account - replace on account-lookup\n list - show all defined aliases (also &quot;nicks&quot; works)\n delete - remove nick by index in /list\n clearall - clear all nicks\n\n Examples:\n nick hi = say Hello, I\'m Sarah!\n nick/object tom = the tall man\n nick build $1 $2 = create/drop $1;$2\n nick tell $1 $2=page $1=$2\n nick tm?$1=page tallman=$1\n nick tm\\=$1=page tallman=$1\n\n A \'nick\' is a personal string replacement. Use $1, $2, ... to catch arguments.\n Put the last $-marker without an ending space to catch all remaining text. You\n can also use unix-glob matching for the left-hand side &lt;string&gt;:\n\n * - matches everything\n ? - matches 0 or 1 single characters\n [abcd] - matches these chars in any order\n [!abcd] - matches everything not among these chars\n \\= - escape literal \'=\' you want in your &lt;string&gt;\n\n Note that no objects are actually renamed or changed by this command - your nicks\n are only available to you. If you want to permanently add keywords to an object\n for everyone to use, you need build privileges and the alias command.\n\n '}</em><a class="headerlink" href="#evennia.commands.default.general.CmdNick.search_index_entry" title="Permalink to this definition"></a></dt>
<code class="sig-name descname">search_index_entry</code><em class="property"> = {'aliases': 'nicks nickname', 'category': 'general', 'key': 'nick', 'no_prefix': ' nicks nickname', 'tags': '', 'text': '\n define a personal alias/nick by defining a string to\n match and replace it with another on the fly\n\n Usage:\n nick[/switches] &lt;string&gt; [= [replacement_string]]\n nick[/switches] &lt;template&gt; = &lt;replacement_template&gt;\n nick/delete &lt;string&gt; or number\n nicks\n\n Switches:\n inputline - replace on the inputline (default)\n object - replace on object-lookup\n account - replace on account-lookup\n list - show all defined aliases (also &quot;nicks&quot; works)\n delete - remove nick by index in /list\n clearall - clear all nicks\n\n Examples:\n nick hi = say Hello, I\'m Sarah!\n nick/object tom = the tall man\n nick build $1 $2 = create/drop $1;$2\n nick tell $1 $2=page $1=$2\n nick tm?$1=page tallman=$1\n nick tm\\=$1=page tallman=$1\n\n A \'nick\' is a personal string replacement. Use $1, $2, ... to catch arguments.\n Put the last $-marker without an ending space to catch all remaining text. You\n can also use unix-glob matching for the left-hand side &lt;string&gt;:\n\n * - matches everything\n ? - matches 0 or 1 single characters\n [abcd] - matches these chars in any order\n [!abcd] - matches everything not among these chars\n \\= - escape literal \'=\' you want in your &lt;string&gt;\n\n Note that no objects are actually renamed or changed by this command - your nicks\n are only available to you. If you want to permanently add keywords to an object\n for everyone to use, you need build privileges and the alias command.\n\n '}</em><a class="headerlink" href="#evennia.commands.default.general.CmdNick.search_index_entry" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
</dd></dl>
@ -323,7 +323,7 @@ inv</p>
<dl class="py attribute">
<dt id="evennia.commands.default.general.CmdInventory.aliases">
<code class="sig-name descname">aliases</code><em class="property"> = ['inv', 'i']</em><a class="headerlink" href="#evennia.commands.default.general.CmdInventory.aliases" title="Permalink to this definition"></a></dt>
<code class="sig-name descname">aliases</code><em class="property"> = ['i', 'inv']</em><a class="headerlink" href="#evennia.commands.default.general.CmdInventory.aliases" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
<dl class="py attribute">
@ -354,7 +354,7 @@ inv</p>
<dl class="py attribute">
<dt id="evennia.commands.default.general.CmdInventory.search_index_entry">
<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 inventory\n\n Usage:\n inventory\n inv\n\n Shows your inventory.\n '}</em><a class="headerlink" href="#evennia.commands.default.general.CmdInventory.search_index_entry" title="Permalink to this definition"></a></dt>
<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 inventory\n\n Usage:\n inventory\n inv\n\n Shows your inventory.\n '}</em><a class="headerlink" href="#evennia.commands.default.general.CmdInventory.search_index_entry" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
</dd></dl>
@ -709,7 +709,7 @@ automatically begin with your name.</p>
<dl class="py attribute">
<dt id="evennia.commands.default.general.CmdPose.aliases">
<code class="sig-name descname">aliases</code><em class="property"> = ['emote', ':']</em><a class="headerlink" href="#evennia.commands.default.general.CmdPose.aliases" title="Permalink to this definition"></a></dt>
<code class="sig-name descname">aliases</code><em class="property"> = [':', 'emote']</em><a class="headerlink" href="#evennia.commands.default.general.CmdPose.aliases" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
<dl class="py attribute">
@ -750,7 +750,7 @@ space.</p>
<dl class="py attribute">
<dt id="evennia.commands.default.general.CmdPose.search_index_entry">
<code class="sig-name descname">search_index_entry</code><em class="property"> = {'aliases': 'emote :', 'category': 'general', 'key': 'pose', 'no_prefix': ' emote :', 'tags': '', 'text': &quot;\n strike a pose\n\n Usage:\n pose &lt;pose text&gt;\n pose's &lt;pose text&gt;\n\n Example:\n pose is standing by the wall, smiling.\n -&gt; others will see:\n Tom is standing by the wall, smiling.\n\n Describe an action being taken. The pose text will\n automatically begin with your name.\n &quot;}</em><a class="headerlink" href="#evennia.commands.default.general.CmdPose.search_index_entry" title="Permalink to this definition"></a></dt>
<code class="sig-name descname">search_index_entry</code><em class="property"> = {'aliases': ': emote', 'category': 'general', 'key': 'pose', 'no_prefix': ' : emote', 'tags': '', 'text': &quot;\n strike a pose\n\n Usage:\n pose &lt;pose text&gt;\n pose's &lt;pose text&gt;\n\n Example:\n pose is standing by the wall, smiling.\n -&gt; others will see:\n Tom is standing by the wall, smiling.\n\n Describe an action being taken. The pose text will\n automatically begin with your name.\n &quot;}</em><a class="headerlink" href="#evennia.commands.default.general.CmdPose.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"> = ['hierarchy', 'groups']</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"> = ['groups', 'hierarchy']</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': '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>
<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>
<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;task', '&#64;delays']</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;delays', '&#64;task']</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;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>
<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>
<dd></dd></dl>
</dd></dl>

View file

@ -895,6 +895,59 @@ main test suite started with</p>
</dd></dl>
<dl class="py class">
<dt id="evennia.commands.default.tests.TestDiscord">
<em class="property">class </em><code class="sig-prename descclassname">evennia.commands.default.tests.</code><code class="sig-name descname">TestDiscord</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">methodName</span><span class="o">=</span><span class="default_value">'runTest'</span></em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/commands/default/tests.html#TestDiscord"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#evennia.commands.default.tests.TestDiscord" title="Permalink to this definition"></a></dt>
<dd><p>Bases: <a class="reference internal" href="evennia.utils.test_resources.html#evennia.utils.test_resources.BaseEvenniaCommandTest" title="evennia.utils.test_resources.BaseEvenniaCommandTest"><code class="xref py py-class docutils literal notranslate"><span class="pre">evennia.utils.test_resources.BaseEvenniaCommandTest</span></code></a></p>
<dl class="py method">
<dt id="evennia.commands.default.tests.TestDiscord.setUp">
<code class="sig-name descname">setUp</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/commands/default/tests.html#TestDiscord.setUp"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#evennia.commands.default.tests.TestDiscord.setUp" title="Permalink to this definition"></a></dt>
<dd><p>Sets up testing environment</p>
</dd></dl>
<dl class="py method">
<dt id="evennia.commands.default.tests.TestDiscord.tearDown">
<code class="sig-name descname">tearDown</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/commands/default/tests.html#TestDiscord.tearDown"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#evennia.commands.default.tests.TestDiscord.tearDown" title="Permalink to this definition"></a></dt>
<dd><p>Hook method for deconstructing the test fixture after testing it.</p>
</dd></dl>
<dl class="py attribute">
<dt id="evennia.commands.default.tests.TestDiscord.test_discord__switches">
<code class="sig-name descname">test_discord__switches</code><em class="property"> = None</em><a class="headerlink" href="#evennia.commands.default.tests.TestDiscord.test_discord__switches" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
<dl class="py method">
<dt id="evennia.commands.default.tests.TestDiscord.test_discord__linking">
<code class="sig-name descname">test_discord__linking</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/commands/default/tests.html#TestDiscord.test_discord__linking"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#evennia.commands.default.tests.TestDiscord.test_discord__linking" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
<dl class="py method">
<dt id="evennia.commands.default.tests.TestDiscord.test_discord__list">
<code class="sig-name descname">test_discord__list</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/commands/default/tests.html#TestDiscord.test_discord__list"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#evennia.commands.default.tests.TestDiscord.test_discord__list" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
<dl class="py method">
<dt id="evennia.commands.default.tests.TestDiscord.test_discord__switches_0_">
<code class="sig-name descname">test_discord__switches_0_</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#evennia.commands.default.tests.TestDiscord.test_discord__switches_0_" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
<dl class="py method">
<dt id="evennia.commands.default.tests.TestDiscord.test_discord__switches_1__list">
<code class="sig-name descname">test_discord__switches_1__list</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#evennia.commands.default.tests.TestDiscord.test_discord__switches_1__list" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
<dl class="py method">
<dt id="evennia.commands.default.tests.TestDiscord.test_discord__switches_2__guild">
<code class="sig-name descname">test_discord__switches_2__guild</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#evennia.commands.default.tests.TestDiscord.test_discord__switches_2__guild" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
<dl class="py method">
<dt id="evennia.commands.default.tests.TestDiscord.test_discord__switches_3__channel">
<code class="sig-name descname">test_discord__switches_3__channel</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#evennia.commands.default.tests.TestDiscord.test_discord__switches_3__channel" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
</dd></dl>
<dl class="py class">
<dt id="evennia.commands.default.tests.TestBatchProcess">
<em class="property">class </em><code class="sig-prename descclassname">evennia.commands.default.tests.</code><code class="sig-name descname">TestBatchProcess</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">methodName</span><span class="o">=</span><span class="default_value">'runTest'</span></em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/commands/default/tests.html#TestBatchProcess"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#evennia.commands.default.tests.TestBatchProcess" title="Permalink to this definition"></a></dt>
@ -902,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/tmpafrw2374/f3d7ea4c805fcdf0ad01b98ff1b451eadeea2455/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/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>
<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', 'co', 'con']</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"> = ['conn', 'con', '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 co con', 'category': 'general', 'key': 'connect', 'no_prefix': ' conn co con', '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': '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>
<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"> = ['q', 'qu']</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"> = ['qu', 'q']</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': '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>
<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>
<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"> = ['look', 'l']</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"> = ['l', 'look']</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': '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>
<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>
<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', 'co', 'con']</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"> = ['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>
<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 co con', 'category': 'general', 'key': 'connect', 'no_prefix': ' conn co con', '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': '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>
<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"> = ['q', 'qu']</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"> = ['qu', 'q']</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': '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>
<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>
<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"> = ['look', 'l']</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"> = ['l', 'look']</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': '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>
<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>
<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;callback', '&#64;callbacks', '&#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;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>
<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;callback &#64;callbacks &#64;calls', 'category': 'building', 'key': '&#64;call', 'no_prefix': 'call callback callbacks 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;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>
<dd></dd></dl>
</dd></dl>

View file

@ -160,7 +160,7 @@ aliases to an already joined channel.</p>
<dl class="py attribute">
<dt id="evennia.contrib.base_systems.mux_comms_cmds.mux_comms_cmds.CmdAddCom.aliases">
<code class="sig-name descname">aliases</code><em class="property"> = ['aliaschan', 'chanalias']</em><a class="headerlink" href="#evennia.contrib.base_systems.mux_comms_cmds.mux_comms_cmds.CmdAddCom.aliases" title="Permalink to this definition"></a></dt>
<code class="sig-name descname">aliases</code><em class="property"> = ['chanalias', 'aliaschan']</em><a class="headerlink" href="#evennia.contrib.base_systems.mux_comms_cmds.mux_comms_cmds.CmdAddCom.aliases" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
<dl class="py attribute">
@ -191,7 +191,7 @@ aliases to an already joined channel.</p>
<dl class="py attribute">
<dt id="evennia.contrib.base_systems.mux_comms_cmds.mux_comms_cmds.CmdAddCom.search_index_entry">
<code class="sig-name descname">search_index_entry</code><em class="property"> = {'aliases': 'aliaschan chanalias', 'category': 'comms', 'key': 'addcom', 'no_prefix': ' aliaschan chanalias', 'tags': '', 'text': '\n Add a channel alias and/or subscribe to a channel\n\n Usage:\n addcom [alias=] &lt;channel&gt;\n\n Joins a given channel. If alias is given, this will allow you to\n refer to the channel by this alias rather than the full channel\n name. Subsequent calls of this command can be used to add multiple\n aliases to an already joined channel.\n '}</em><a class="headerlink" href="#evennia.contrib.base_systems.mux_comms_cmds.mux_comms_cmds.CmdAddCom.search_index_entry" title="Permalink to this definition"></a></dt>
<code class="sig-name descname">search_index_entry</code><em class="property"> = {'aliases': 'chanalias aliaschan', 'category': 'comms', 'key': 'addcom', 'no_prefix': ' chanalias aliaschan', 'tags': '', 'text': '\n Add a channel alias and/or subscribe to a channel\n\n Usage:\n addcom [alias=] &lt;channel&gt;\n\n Joins a given channel. If alias is given, this will allow you to\n refer to the channel by this alias rather than the full channel\n name. Subsequent calls of this command can be used to add multiple\n aliases to an already joined channel.\n '}</em><a class="headerlink" href="#evennia.contrib.base_systems.mux_comms_cmds.mux_comms_cmds.CmdAddCom.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', 'q', 'quit', 'abort']</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"> = ['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>
<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 q quit abort', 'category': 'evscaperoom', 'key': 'give up', 'no_prefix': ' chicken out q quit abort', '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': '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>
<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"> = ['ls', 'l']</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"> = ['l', 'ls']</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': '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>
<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>
<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"> = [';', 'shout', 'whisper']</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"> = ['whisper', 'shout', ';']</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': '; 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>
<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>
<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', 'ex', 'examine', 'unfocus']</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', 'unfocus', 'examine', 'ex']</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 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>
<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>
<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', 'give', 'inv', '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"> = ['inventory', 'inv', 'give', 'i']</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 give inv i', 'category': 'evscaperoom', 'key': 'get', 'no_prefix': ' inventory give inv 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': '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>
<dd></dd></dl>
</dd></dl>

View file

@ -622,7 +622,7 @@ inv</p>
<dl class="py attribute">
<dt id="evennia.contrib.game_systems.clothing.clothing.CmdInventory.aliases">
<code class="sig-name descname">aliases</code><em class="property"> = ['inv', 'i']</em><a class="headerlink" href="#evennia.contrib.game_systems.clothing.clothing.CmdInventory.aliases" title="Permalink to this definition"></a></dt>
<code class="sig-name descname">aliases</code><em class="property"> = ['i', 'inv']</em><a class="headerlink" href="#evennia.contrib.game_systems.clothing.clothing.CmdInventory.aliases" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
<dl class="py attribute">
@ -653,7 +653,7 @@ inv</p>
<dl class="py attribute">
<dt id="evennia.contrib.game_systems.clothing.clothing.CmdInventory.search_index_entry">
<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 inventory\n\n Usage:\n inventory\n inv\n\n Shows your inventory.\n '}</em><a class="headerlink" href="#evennia.contrib.game_systems.clothing.clothing.CmdInventory.search_index_entry" title="Permalink to this definition"></a></dt>
<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 inventory\n\n Usage:\n inventory\n inv\n\n Shows your inventory.\n '}</em><a class="headerlink" href="#evennia.contrib.game_systems.clothing.clothing.CmdInventory.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"> = ['ls', 'l']</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"> = ['l', 'ls']</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': '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>
<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>
<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"> = ['roll', '&#64;dice']</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"> = ['&#64;dice', 'roll']</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': '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>
<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>
<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"> = ['inv', 'i']</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"> = ['i', 'inv']</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': '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>
<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>
<dd></dd></dl>
</dd></dl>

View file

@ -153,7 +153,7 @@ such as when closing the lid and un-blinding a character.</p>
<dl class="py attribute">
<dt id="evennia.contrib.tutorials.red_button.red_button.CmdPushLidClosed.aliases">
<code class="sig-name descname">aliases</code><em class="property"> = ['push', 'press button', 'press']</em><a class="headerlink" href="#evennia.contrib.tutorials.red_button.red_button.CmdPushLidClosed.aliases" title="Permalink to this definition"></a></dt>
<code class="sig-name descname">aliases</code><em class="property"> = ['push', 'press', 'press button']</em><a class="headerlink" href="#evennia.contrib.tutorials.red_button.red_button.CmdPushLidClosed.aliases" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
<dl class="py attribute">
@ -182,7 +182,7 @@ check if the lid is open or closed.</p>
<dl class="py attribute">
<dt id="evennia.contrib.tutorials.red_button.red_button.CmdPushLidClosed.search_index_entry">
<code class="sig-name descname">search_index_entry</code><em class="property"> = {'aliases': 'push press button press', 'category': 'general', 'key': 'push button', 'no_prefix': ' push press button press', 'tags': '', 'text': '\n Push the red button (lid closed)\n\n Usage:\n push button\n\n '}</em><a class="headerlink" href="#evennia.contrib.tutorials.red_button.red_button.CmdPushLidClosed.search_index_entry" title="Permalink to this definition"></a></dt>
<code class="sig-name descname">search_index_entry</code><em class="property"> = {'aliases': 'push press press button', 'category': 'general', 'key': 'push button', 'no_prefix': ' push press press button', 'tags': '', 'text': '\n Push the red button (lid closed)\n\n Usage:\n push button\n\n '}</em><a class="headerlink" href="#evennia.contrib.tutorials.red_button.red_button.CmdPushLidClosed.search_index_entry" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
</dd></dl>
@ -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"> = ['break lid', 'smash 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', 'break lid', 'smash']</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': 'break lid smash lid smash', 'category': 'general', 'key': 'smash glass', 'no_prefix': ' break lid smash 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 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>
<dd></dd></dl>
</dd></dl>
@ -379,7 +379,7 @@ be mutually exclusive.</p>
<dl class="py attribute">
<dt id="evennia.contrib.tutorials.red_button.red_button.CmdPushLidOpen.aliases">
<code class="sig-name descname">aliases</code><em class="property"> = ['push', 'press button', 'press']</em><a class="headerlink" href="#evennia.contrib.tutorials.red_button.red_button.CmdPushLidOpen.aliases" title="Permalink to this definition"></a></dt>
<code class="sig-name descname">aliases</code><em class="property"> = ['push', 'press', 'press button']</em><a class="headerlink" href="#evennia.contrib.tutorials.red_button.red_button.CmdPushLidOpen.aliases" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
<dl class="py attribute">
@ -408,7 +408,7 @@ set in self.parse())</p>
<dl class="py attribute">
<dt id="evennia.contrib.tutorials.red_button.red_button.CmdPushLidOpen.search_index_entry">
<code class="sig-name descname">search_index_entry</code><em class="property"> = {'aliases': 'push press button press', 'category': 'general', 'key': 'push button', 'no_prefix': ' push press button press', 'tags': '', 'text': '\n Push the red button\n\n Usage:\n push button\n\n '}</em><a class="headerlink" href="#evennia.contrib.tutorials.red_button.red_button.CmdPushLidOpen.search_index_entry" title="Permalink to this definition"></a></dt>
<code class="sig-name descname">search_index_entry</code><em class="property"> = {'aliases': 'push press press button', 'category': 'general', 'key': 'push button', 'no_prefix': ' push press press button', 'tags': '', 'text': '\n Push the red button\n\n Usage:\n push button\n\n '}</em><a class="headerlink" href="#evennia.contrib.tutorials.red_button.red_button.CmdPushLidOpen.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', 'get', 'l', 'feel', 'ex', 'listen']</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"> = ['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>
<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 get l feel ex listen', 'category': 'general', 'key': 'look', 'no_prefix': ' examine get l feel ex listen', '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': '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>
<dd></dd></dl>
</dd></dl>

View file

@ -425,7 +425,7 @@ of the object. We overload it with our own version.</p>
<dl class="py attribute">
<dt id="evennia.contrib.tutorials.tutorial_world.objects.CmdLight.aliases">
<code class="sig-name descname">aliases</code><em class="property"> = ['light', 'burn']</em><a class="headerlink" href="#evennia.contrib.tutorials.tutorial_world.objects.CmdLight.aliases" title="Permalink to this definition"></a></dt>
<code class="sig-name descname">aliases</code><em class="property"> = ['burn', 'light']</em><a class="headerlink" href="#evennia.contrib.tutorials.tutorial_world.objects.CmdLight.aliases" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
<dl class="py attribute">
@ -452,7 +452,7 @@ to sit on a “lightable” object, we operate only on self.obj.</p>
<dl class="py attribute">
<dt id="evennia.contrib.tutorials.tutorial_world.objects.CmdLight.search_index_entry">
<code class="sig-name descname">search_index_entry</code><em class="property"> = {'aliases': 'light burn', 'category': 'tutorialworld', 'key': 'on', 'no_prefix': ' light burn', 'tags': '', 'text': '\n Creates light where there was none. Something to burn.\n '}</em><a class="headerlink" href="#evennia.contrib.tutorials.tutorial_world.objects.CmdLight.search_index_entry" title="Permalink to this definition"></a></dt>
<code class="sig-name descname">search_index_entry</code><em class="property"> = {'aliases': 'burn light', 'category': 'tutorialworld', 'key': 'on', 'no_prefix': ' burn light', 'tags': '', 'text': '\n Creates light where there was none. Something to burn.\n '}</em><a class="headerlink" href="#evennia.contrib.tutorials.tutorial_world.objects.CmdLight.search_index_entry" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
</dd></dl>
@ -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"> = ['push', 'pull', 'shiftroot', 'move']</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"> = ['pull', 'push', 'move', 'shiftroot']</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': 'push pull shiftroot move', 'category': 'tutorialworld', 'key': 'shift', 'no_prefix': ' push pull shiftroot move', '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': '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>
<dd></dd></dl>
</dd></dl>
@ -609,7 +609,7 @@ yellow/green - horizontal roots</p>
<dl class="py attribute">
<dt id="evennia.contrib.tutorials.tutorial_world.objects.CmdPressButton.aliases">
<code class="sig-name descname">aliases</code><em class="property"> = ['push button', 'press button', 'button']</em><a class="headerlink" href="#evennia.contrib.tutorials.tutorial_world.objects.CmdPressButton.aliases" title="Permalink to this definition"></a></dt>
<code class="sig-name descname">aliases</code><em class="property"> = ['button', 'push button', 'press button']</em><a class="headerlink" href="#evennia.contrib.tutorials.tutorial_world.objects.CmdPressButton.aliases" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
<dl class="py attribute">
@ -635,7 +635,7 @@ yellow/green - horizontal roots</p>
<dl class="py attribute">
<dt id="evennia.contrib.tutorials.tutorial_world.objects.CmdPressButton.search_index_entry">
<code class="sig-name descname">search_index_entry</code><em class="property"> = {'aliases': 'push button press button button', 'category': 'tutorialworld', 'key': 'press', 'no_prefix': ' push button press button button', 'tags': '', 'text': '\n Presses a button.\n '}</em><a class="headerlink" href="#evennia.contrib.tutorials.tutorial_world.objects.CmdPressButton.search_index_entry" title="Permalink to this definition"></a></dt>
<code class="sig-name descname">search_index_entry</code><em class="property"> = {'aliases': 'button push button press button', 'category': 'tutorialworld', 'key': 'press', 'no_prefix': ' button push button press button', 'tags': '', 'text': '\n Presses a button.\n '}</em><a class="headerlink" href="#evennia.contrib.tutorials.tutorial_world.objects.CmdPressButton.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"> = ['fight', 'bash', 'slash', 'defend', 'parry', 'thrust', 'hit', 'chop', 'kill', 'pierce', 'stab']</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"> = ['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>
<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': 'fight bash slash defend parry thrust hit chop kill pierce stab', 'category': 'tutorialworld', 'key': 'attack', 'no_prefix': ' fight bash slash defend parry thrust hit chop kill pierce 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>
<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>
<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"> = ['ls', 'l']</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"> = ['l', 'ls']</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': '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>
<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>
<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"> = ['feel around', 'fiddle', 'l', 'feel', 'search']</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"> = ['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>
<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': 'feel around fiddle l feel search', 'category': 'tutorialworld', 'key': 'look', 'no_prefix': ' feel around fiddle 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>
<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>
<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/tmpafrw2374/f3d7ea4c805fcdf0ad01b98ff1b451eadeea2455/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/tmpufizbudc/1cfd6a0289a457111e4d075a7beca6e9cf84c4e0/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/tmpafrw2374/f3d7ea4c805fcdf0ad01b98ff1b451eadeea2455/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/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>
<dd></dd></dl>
<dl class="py attribute">

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"> = [':dw', ':r', ':fd', ':s', ':p', ':f', ':=', ':w', ':::', ':wq', ':UU', ':S', ':uu', ':&gt;', '::', ':!', ':&lt;', ':A', ':fi', ':x', ':y', ':echo', ':j', ':u', ':q!', ':q', ':i', ':', ':h', ':dd', ':DD', ':I']</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"> = [':::', ':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>
<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': ':dw :r :fd :s :p :f := :w ::: :wq :UU :S :uu :&gt; :: :! :&lt; :A :fi :x :y :echo :j :u :q! :q :i : :h :dd :DD :I', 'category': 'general', 'key': ':editor_command_group', 'no_prefix': ' :dw :r :fd :s :p :f := :w ::: :wq :UU :S :uu :&gt; :: :! :&lt; :A :fi :x :y :echo :j :u :q! :q :i : :h :dd :DD :I', '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': '::: :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>
<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"> = ['n', '__nomatch_command', 'yes', 'y', 'a', 'abort', 'no']</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', '__nomatch_command', 'a', 'y', 'no', 'abort', 'n']</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': 'n __nomatch_command yes y a abort no', 'category': 'general', 'key': '__noinput_command', 'no_prefix': ' n __nomatch_command yes y a abort no', '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 __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>
<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', 'previous', 'end', 'p', 'quit', 'e', 'top', 'q', 'a', 'abort', 't', 'next']</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"> = ['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>
<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 previous end p quit e top q a abort t next', 'category': 'general', 'key': '__noinput_command', 'no_prefix': ' n previous end p quit e top q a abort t next', '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': '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>
<dd></dd></dl>
</dd></dl>

View file

@ -855,6 +855,8 @@
<li><a href="api/evennia.commands.default.building.html#evennia.commands.default.building.ObjManipCommand.aliases">(evennia.commands.default.building.ObjManipCommand attribute)</a>
</li>
<li><a href="api/evennia.commands.default.comms.html#evennia.commands.default.comms.CmdChannel.aliases">(evennia.commands.default.comms.CmdChannel attribute)</a>
</li>
<li><a href="api/evennia.commands.default.comms.html#evennia.commands.default.comms.CmdDiscord2Chan.aliases">(evennia.commands.default.comms.CmdDiscord2Chan attribute)</a>
</li>
<li><a href="api/evennia.commands.default.comms.html#evennia.commands.default.comms.CmdGrapevine2Chan.aliases">(evennia.commands.default.comms.CmdGrapevine2Chan attribute)</a>
</li>
@ -2030,6 +2032,8 @@
<li><a href="api/evennia.accounts.accounts.html#evennia.accounts.accounts.DefaultAccount.at_init">at_init() (evennia.accounts.accounts.DefaultAccount method)</a>
<ul>
<li><a href="api/evennia.accounts.bots.html#evennia.accounts.bots.DiscordBot.at_init">(evennia.accounts.bots.DiscordBot method)</a>
</li>
<li><a href="api/evennia.comms.comms.html#evennia.comms.comms.DefaultChannel.at_init">(evennia.comms.comms.DefaultChannel method)</a>
</li>
<li><a href="api/evennia.contrib.base_systems.components.holder.html#evennia.contrib.base_systems.components.holder.ComponentHolderMixin.at_init">(evennia.contrib.base_systems.components.holder.ComponentHolderMixin method)</a>
@ -2342,7 +2346,11 @@
</li>
</ul></li>
<li><a href="api/evennia.accounts.accounts.html#evennia.accounts.accounts.DefaultAccount.at_pre_channel_msg">at_pre_channel_msg() (evennia.accounts.accounts.DefaultAccount method)</a>
<ul>
<li><a href="api/evennia.accounts.bots.html#evennia.accounts.bots.DiscordBot.at_pre_channel_msg">(evennia.accounts.bots.DiscordBot method)</a>
</li>
</ul></li>
<li><a href="api/evennia.contrib.rpg.buffs.buff.html#evennia.contrib.rpg.buffs.buff.BaseBuff.at_pre_check">at_pre_check() (evennia.contrib.rpg.buffs.buff.BaseBuff method)</a>
</li>
<li><a href="api/evennia.commands.command.html#evennia.commands.command.Command.at_pre_cmd">at_pre_cmd() (evennia.commands.command.Command method)</a>
@ -2526,8 +2534,6 @@
<li><a href="api/evennia.accounts.accounts.html#evennia.accounts.accounts.DefaultAccount.at_server_reload">at_server_reload() (evennia.accounts.accounts.DefaultAccount method)</a>
<ul>
<li><a href="api/evennia.accounts.bots.html#evennia.accounts.bots.BotStarter.at_server_reload">(evennia.accounts.bots.BotStarter method)</a>
</li>
<li><a href="api/evennia.objects.objects.html#evennia.objects.objects.DefaultObject.at_server_reload">(evennia.objects.objects.DefaultObject method)</a>
</li>
<li><a href="api/evennia.scripts.scripts.html#evennia.scripts.scripts.DefaultScript.at_server_reload">(evennia.scripts.scripts.DefaultScript method)</a>
@ -2543,17 +2549,17 @@
<li><a href="api/evennia.accounts.accounts.html#evennia.accounts.accounts.DefaultGuest.at_server_shutdown">(evennia.accounts.accounts.DefaultGuest method)</a>
</li>
<li><a href="api/evennia.accounts.bots.html#evennia.accounts.bots.Bot.at_server_shutdown">(evennia.accounts.bots.Bot method)</a>
</li>
<li><a href="api/evennia.accounts.bots.html#evennia.accounts.bots.BotStarter.at_server_shutdown">(evennia.accounts.bots.BotStarter method)</a>
</li>
<li><a href="api/evennia.objects.objects.html#evennia.objects.objects.DefaultObject.at_server_shutdown">(evennia.objects.objects.DefaultObject method)</a>
</li>
<li><a href="api/evennia.scripts.scripts.html#evennia.scripts.scripts.DefaultScript.at_server_shutdown">(evennia.scripts.scripts.DefaultScript method)</a>
</li>
</ul></li>
<li><a href="api/evennia.contrib.base_systems.ingame_python.scripts.html#evennia.contrib.base_systems.ingame_python.scripts.EventHandler.at_server_start">at_server_start() (evennia.contrib.base_systems.ingame_python.scripts.EventHandler method)</a>
<li><a href="api/evennia.accounts.bots.html#evennia.accounts.bots.BotStarter.at_server_start">at_server_start() (evennia.accounts.bots.BotStarter method)</a>
<ul>
<li><a href="api/evennia.contrib.base_systems.ingame_python.scripts.html#evennia.contrib.base_systems.ingame_python.scripts.EventHandler.at_server_start">(evennia.contrib.base_systems.ingame_python.scripts.EventHandler method)</a>
</li>
<li><a href="api/evennia.contrib.grid.wilderness.wilderness.html#evennia.contrib.grid.wilderness.wilderness.WildernessScript.at_server_start">(evennia.contrib.grid.wilderness.wilderness.WildernessScript method)</a>
</li>
<li><a href="api/evennia.scripts.scripts.html#evennia.scripts.scripts.DefaultScript.at_server_start">(evennia.scripts.scripts.DefaultScript method)</a>
@ -3182,7 +3188,11 @@
<li><a href="api/evennia.commands.default.comms.html#evennia.commands.default.comms.CmdChannel.channel_list_who">channel_list_who() (evennia.commands.default.comms.CmdChannel method)</a>
</li>
<li><a href="api/evennia.accounts.accounts.html#evennia.accounts.accounts.DefaultAccount.channel_msg">channel_msg() (evennia.accounts.accounts.DefaultAccount method)</a>
<ul>
<li><a href="api/evennia.accounts.bots.html#evennia.accounts.bots.DiscordBot.channel_msg">(evennia.accounts.bots.DiscordBot method)</a>
</li>
</ul></li>
<li><a href="api/evennia.comms.comms.html#evennia.comms.comms.DefaultChannel.channel_msg_nick_pattern">channel_msg_nick_pattern (evennia.comms.comms.DefaultChannel attribute)</a>
</li>
<li><a href="api/evennia.comms.comms.html#evennia.comms.comms.DefaultChannel.channel_msg_nick_replacement">channel_msg_nick_replacement (evennia.comms.comms.DefaultChannel attribute)</a>
@ -3638,6 +3648,8 @@
<li><a href="api/evennia.contrib.rpg.dice.dice.html#evennia.contrib.rpg.dice.dice.CmdDice">CmdDice (class in evennia.contrib.rpg.dice.dice)</a>
</li>
<li><a href="api/evennia.commands.default.building.html#evennia.commands.default.building.CmdDig">CmdDig (class in evennia.commands.default.building)</a>
</li>
<li><a href="api/evennia.commands.default.comms.html#evennia.commands.default.comms.CmdDiscord2Chan">CmdDiscord2Chan (class in evennia.commands.default.comms)</a>
</li>
<li><a href="api/evennia.contrib.game_systems.turnbattle.tb_basic.html#evennia.contrib.game_systems.turnbattle.tb_basic.CmdDisengage">CmdDisengage (class in evennia.contrib.game_systems.turnbattle.tb_basic)</a>
@ -3840,11 +3852,11 @@
<li><a href="api/evennia.commands.default.building.html#evennia.commands.default.building.CmdObjects">CmdObjects (class in evennia.commands.default.building)</a>
</li>
<li><a href="api/evennia.contrib.game_systems.barter.barter.html#evennia.contrib.game_systems.barter.barter.CmdOffer">CmdOffer (class in evennia.contrib.game_systems.barter.barter)</a>
</li>
<li><a href="api/evennia.commands.default.account.html#evennia.commands.default.account.CmdOOC">CmdOOC (class in evennia.commands.default.account)</a>
</li>
</ul></td>
<td style="width: 33%; vertical-align: top;"><ul>
<li><a href="api/evennia.commands.default.account.html#evennia.commands.default.account.CmdOOC">CmdOOC (class in evennia.commands.default.account)</a>
</li>
<li><a href="api/evennia.commands.default.account.html#evennia.commands.default.account.CmdOOCLook">CmdOOCLook (class in evennia.commands.default.account)</a>
</li>
<li><a href="api/evennia.commands.default.building.html#evennia.commands.default.building.CmdOpen">CmdOpen (class in evennia.commands.default.building)</a>
@ -5179,12 +5191,12 @@
</li>
<li><a href="api/evennia.objects.objects.html#evennia.objects.objects.DefaultRoom">DefaultRoom (class in evennia.objects.objects)</a>
</li>
</ul></td>
<td style="width: 33%; vertical-align: top;"><ul>
<li><a href="api/evennia.objects.objects.html#evennia.objects.objects.DefaultRoom.DoesNotExist">DefaultRoom.DoesNotExist</a>
</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>
@ -5386,6 +5398,8 @@
<li><a href="api/evennia.contrib.tutorials.evadventure.npcs.html#evennia.contrib.tutorials.evadventure.npcs.EvAdventureNPC.dexterity">dexterity() (evennia.contrib.tutorials.evadventure.npcs.EvAdventureNPC property)</a>
</li>
<li><a href="api/evennia.contrib.rpg.dice.dice.html#evennia.contrib.rpg.dice.dice.DiceCmdSet">DiceCmdSet (class in evennia.contrib.rpg.dice.dice)</a>
</li>
<li><a href="api/evennia.accounts.bots.html#evennia.accounts.bots.DiscordBot.direct_msg">direct_msg() (evennia.accounts.bots.DiscordBot method)</a>
</li>
<li><a href="api/evennia.contrib.grid.xyzgrid.xymap_legend.html#evennia.contrib.grid.xyzgrid.xymap_legend.DownMapLink.direction_aliases">direction_aliases (evennia.contrib.grid.xyzgrid.xymap_legend.DownMapLink attribute)</a>
@ -5474,6 +5488,12 @@
<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.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.contrib.rpg.buffs.buff.html#evennia.contrib.rpg.buffs.buff.BaseBuff.dispel">dispel() (evennia.contrib.rpg.buffs.buff.BaseBuff method)</a>
</li>
@ -8771,6 +8791,8 @@
<ul>
<li><a href="api/evennia.accounts.bots.html#evennia.accounts.bots.Bot.execute_cmd">(evennia.accounts.bots.Bot method)</a>
</li>
<li><a href="api/evennia.accounts.bots.html#evennia.accounts.bots.DiscordBot.execute_cmd">(evennia.accounts.bots.DiscordBot method)</a>
</li>
<li><a href="api/evennia.accounts.bots.html#evennia.accounts.bots.GrapevineBot.execute_cmd">(evennia.accounts.bots.GrapevineBot method)</a>
</li>
@ -8859,9 +8881,11 @@
</ul></li>
<li><a href="api/evennia.server.portal.irc.html#evennia.server.portal.irc.IRCBot.factory">factory (evennia.server.portal.irc.IRCBot attribute)</a>
</li>
<li><a href="api/evennia.accounts.bots.html#evennia.accounts.bots.GrapevineBot.factory_path">factory_path (evennia.accounts.bots.GrapevineBot attribute)</a>
<li><a href="api/evennia.accounts.bots.html#evennia.accounts.bots.DiscordBot.factory_path">factory_path (evennia.accounts.bots.DiscordBot attribute)</a>
<ul>
<li><a href="api/evennia.accounts.bots.html#evennia.accounts.bots.GrapevineBot.factory_path">(evennia.accounts.bots.GrapevineBot attribute)</a>
</li>
<li><a href="api/evennia.accounts.bots.html#evennia.accounts.bots.IRCBot.factory_path">(evennia.accounts.bots.IRCBot attribute)</a>
</li>
</ul></li>
@ -9325,6 +9349,8 @@
<li><a href="api/evennia.commands.default.building.html#evennia.commands.default.building.CmdWipe.func">(evennia.commands.default.building.CmdWipe method)</a>
</li>
<li><a href="api/evennia.commands.default.comms.html#evennia.commands.default.comms.CmdChannel.func">(evennia.commands.default.comms.CmdChannel method)</a>
</li>
<li><a href="api/evennia.commands.default.comms.html#evennia.commands.default.comms.CmdDiscord2Chan.func">(evennia.commands.default.comms.CmdDiscord2Chan method)</a>
</li>
<li><a href="api/evennia.commands.default.comms.html#evennia.commands.default.comms.CmdGrapevine2Chan.func">(evennia.commands.default.comms.CmdGrapevine2Chan method)</a>
</li>
@ -10821,6 +10847,8 @@
<li><a href="api/evennia.commands.default.building.html#evennia.commands.default.building.ObjManipCommand.help_category">(evennia.commands.default.building.ObjManipCommand attribute)</a>
</li>
<li><a href="api/evennia.commands.default.comms.html#evennia.commands.default.comms.CmdChannel.help_category">(evennia.commands.default.comms.CmdChannel attribute)</a>
</li>
<li><a href="api/evennia.commands.default.comms.html#evennia.commands.default.comms.CmdDiscord2Chan.help_category">(evennia.commands.default.comms.CmdDiscord2Chan attribute)</a>
</li>
<li><a href="api/evennia.commands.default.comms.html#evennia.commands.default.comms.CmdGrapevine2Chan.help_category">(evennia.commands.default.comms.CmdGrapevine2Chan attribute)</a>
</li>
@ -11927,6 +11955,8 @@
<li><a href="api/evennia.commands.default.cmdset_unloggedin.html#evennia.commands.default.cmdset_unloggedin.UnloggedinCmdSet.key">(evennia.commands.default.cmdset_unloggedin.UnloggedinCmdSet attribute)</a>
</li>
<li><a href="api/evennia.commands.default.comms.html#evennia.commands.default.comms.CmdChannel.key">(evennia.commands.default.comms.CmdChannel attribute)</a>
</li>
<li><a href="api/evennia.commands.default.comms.html#evennia.commands.default.comms.CmdDiscord2Chan.key">(evennia.commands.default.comms.CmdDiscord2Chan attribute)</a>
</li>
<li><a href="api/evennia.commands.default.comms.html#evennia.commands.default.comms.CmdGrapevine2Chan.key">(evennia.commands.default.comms.CmdGrapevine2Chan attribute)</a>
</li>
@ -12861,6 +12891,8 @@
<li><a href="api/evennia.commands.default.building.html#evennia.commands.default.building.ObjManipCommand.lock_storage">(evennia.commands.default.building.ObjManipCommand attribute)</a>
</li>
<li><a href="api/evennia.commands.default.comms.html#evennia.commands.default.comms.CmdChannel.lock_storage">(evennia.commands.default.comms.CmdChannel attribute)</a>
</li>
<li><a href="api/evennia.commands.default.comms.html#evennia.commands.default.comms.CmdDiscord2Chan.lock_storage">(evennia.commands.default.comms.CmdDiscord2Chan attribute)</a>
</li>
<li><a href="api/evennia.commands.default.comms.html#evennia.commands.default.comms.CmdGrapevine2Chan.lock_storage">(evennia.commands.default.comms.CmdGrapevine2Chan attribute)</a>
</li>
@ -13437,6 +13469,8 @@
<li><a href="api/evennia.commands.default.building.html#evennia.commands.default.building.CmdWipe.locks">(evennia.commands.default.building.CmdWipe attribute)</a>
</li>
<li><a href="api/evennia.commands.default.comms.html#evennia.commands.default.comms.CmdChannel.locks">(evennia.commands.default.comms.CmdChannel attribute)</a>
</li>
<li><a href="api/evennia.commands.default.comms.html#evennia.commands.default.comms.CmdDiscord2Chan.locks">(evennia.commands.default.comms.CmdDiscord2Chan attribute)</a>
</li>
<li><a href="api/evennia.commands.default.comms.html#evennia.commands.default.comms.CmdGrapevine2Chan.locks">(evennia.commands.default.comms.CmdGrapevine2Chan attribute)</a>
</li>
@ -16206,6 +16240,8 @@
<li><a href="api/evennia.accounts.bots.html#evennia.accounts.bots.Bot.path">(evennia.accounts.bots.Bot attribute)</a>
</li>
<li><a href="api/evennia.accounts.bots.html#evennia.accounts.bots.BotStarter.path">(evennia.accounts.bots.BotStarter attribute)</a>
</li>
<li><a href="api/evennia.accounts.bots.html#evennia.accounts.bots.DiscordBot.path">(evennia.accounts.bots.DiscordBot attribute)</a>
</li>
<li><a href="api/evennia.accounts.bots.html#evennia.accounts.bots.GrapevineBot.path">(evennia.accounts.bots.GrapevineBot attribute)</a>
</li>
@ -17262,6 +17298,8 @@
<li><a href="api/evennia.web.admin.tags.html#evennia.web.admin.tags.TagInline.related_field">(evennia.web.admin.tags.TagInline attribute)</a>
</li>
</ul></li>
<li><a href="api/evennia.accounts.bots.html#evennia.accounts.bots.DiscordBot.relay_to_channel">relay_to_channel() (evennia.accounts.bots.DiscordBot method)</a>
</li>
<li><a href="api/evennia.contrib.base_systems.building_menu.building_menu.html#evennia.contrib.base_systems.building_menu.building_menu.BuildingMenu.relevant_choices">relevant_choices() (evennia.contrib.base_systems.building_menu.building_menu.BuildingMenu property)</a>
</li>
<li><a href="api/evennia.contrib.grid.xyzgrid.xymap.html#evennia.contrib.grid.xyzgrid.xymap.XYMap.reload">reload() (evennia.contrib.grid.xyzgrid.xymap.XYMap method)</a>
@ -18110,6 +18148,8 @@
<li><a href="api/evennia.commands.default.building.html#evennia.commands.default.building.ObjManipCommand.search_index_entry">(evennia.commands.default.building.ObjManipCommand attribute)</a>
</li>
<li><a href="api/evennia.commands.default.comms.html#evennia.commands.default.comms.CmdChannel.search_index_entry">(evennia.commands.default.comms.CmdChannel attribute)</a>
</li>
<li><a href="api/evennia.commands.default.comms.html#evennia.commands.default.comms.CmdDiscord2Chan.search_index_entry">(evennia.commands.default.comms.CmdDiscord2Chan attribute)</a>
</li>
<li><a href="api/evennia.commands.default.comms.html#evennia.commands.default.comms.CmdGrapevine2Chan.search_index_entry">(evennia.commands.default.comms.CmdGrapevine2Chan attribute)</a>
</li>
@ -18714,10 +18754,10 @@
</li>
<li><a href="api/evennia.contrib.grid.xyzgrid.xymap_legend.html#evennia.contrib.grid.xyzgrid.xymap_legend.SENWMapLink">SENWMapLink (class in evennia.contrib.grid.xyzgrid.xymap_legend)</a>
</li>
</ul></td>
<td style="width: 33%; vertical-align: top;"><ul>
<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>
<li><a href="api/evennia.utils.optionclasses.html#evennia.utils.optionclasses.BaseOption.serialize">serialize() (evennia.utils.optionclasses.BaseOption method)</a>
@ -18894,6 +18934,8 @@
<ul>
<li><a href="api/evennia.commands.default.tests.html#evennia.commands.default.tests.TestCommsChannel.setUp">(evennia.commands.default.tests.TestCommsChannel method)</a>
</li>
<li><a href="api/evennia.commands.default.tests.html#evennia.commands.default.tests.TestDiscord.setUp">(evennia.commands.default.tests.TestDiscord method)</a>
</li>
<li><a href="api/evennia.commands.default.tests.html#evennia.commands.default.tests.TestHelp.setUp">(evennia.commands.default.tests.TestHelp method)</a>
</li>
@ -19233,6 +19275,8 @@
<li><a href="api/evennia.accounts.bots.html#evennia.accounts.bots.Bot.start">start() (evennia.accounts.bots.Bot method)</a>
<ul>
<li><a href="api/evennia.accounts.bots.html#evennia.accounts.bots.DiscordBot.start">(evennia.accounts.bots.DiscordBot method)</a>
</li>
<li><a href="api/evennia.accounts.bots.html#evennia.accounts.bots.GrapevineBot.start">(evennia.accounts.bots.GrapevineBot method)</a>
</li>
<li><a href="api/evennia.accounts.bots.html#evennia.accounts.bots.IRCBot.start">(evennia.accounts.bots.IRCBot method)</a>
@ -19568,6 +19612,8 @@
<li><a href="api/evennia.commands.default.building.html#evennia.commands.default.building.CmdTypeclass.switch_options">(evennia.commands.default.building.CmdTypeclass attribute)</a>
</li>
<li><a href="api/evennia.commands.default.comms.html#evennia.commands.default.comms.CmdChannel.switch_options">(evennia.commands.default.comms.CmdChannel attribute)</a>
</li>
<li><a href="api/evennia.commands.default.comms.html#evennia.commands.default.comms.CmdDiscord2Chan.switch_options">(evennia.commands.default.comms.CmdDiscord2Chan attribute)</a>
</li>
<li><a href="api/evennia.commands.default.comms.html#evennia.commands.default.comms.CmdGrapevine2Chan.switch_options">(evennia.commands.default.comms.CmdGrapevine2Chan attribute)</a>
</li>
@ -19880,6 +19926,8 @@
<ul>
<li><a href="api/evennia.commands.default.tests.html#evennia.commands.default.tests.TestCommsChannel.tearDown">(evennia.commands.default.tests.TestCommsChannel method)</a>
</li>
<li><a href="api/evennia.commands.default.tests.html#evennia.commands.default.tests.TestDiscord.tearDown">(evennia.commands.default.tests.TestDiscord method)</a>
</li>
<li><a href="api/evennia.commands.default.tests.html#evennia.commands.default.tests.TestHelp.tearDown">(evennia.commands.default.tests.TestHelp method)</a>
</li>
@ -20479,6 +20527,20 @@
<li><a href="api/evennia.contrib.tutorials.evadventure.tests.test_dungeon.html#evennia.contrib.tutorials.evadventure.tests.test_dungeon.TestDungeon.test_different_start_directions">test_different_start_directions() (evennia.contrib.tutorials.evadventure.tests.test_dungeon.TestDungeon method)</a>
</li>
<li><a href="api/evennia.commands.default.tests.html#evennia.commands.default.tests.TestBuilding.test_dig">test_dig() (evennia.commands.default.tests.TestBuilding method)</a>
</li>
<li><a href="api/evennia.commands.default.tests.html#evennia.commands.default.tests.TestDiscord.test_discord__linking">test_discord__linking() (evennia.commands.default.tests.TestDiscord method)</a>
</li>
<li><a href="api/evennia.commands.default.tests.html#evennia.commands.default.tests.TestDiscord.test_discord__list">test_discord__list() (evennia.commands.default.tests.TestDiscord method)</a>
</li>
<li><a href="api/evennia.commands.default.tests.html#evennia.commands.default.tests.TestDiscord.test_discord__switches">test_discord__switches (evennia.commands.default.tests.TestDiscord attribute)</a>
</li>
<li><a href="api/evennia.commands.default.tests.html#evennia.commands.default.tests.TestDiscord.test_discord__switches_0_">test_discord__switches_0_() (evennia.commands.default.tests.TestDiscord method)</a>
</li>
<li><a href="api/evennia.commands.default.tests.html#evennia.commands.default.tests.TestDiscord.test_discord__switches_1__list">test_discord__switches_1__list() (evennia.commands.default.tests.TestDiscord method)</a>
</li>
<li><a href="api/evennia.commands.default.tests.html#evennia.commands.default.tests.TestDiscord.test_discord__switches_2__guild">test_discord__switches_2__guild() (evennia.commands.default.tests.TestDiscord method)</a>
</li>
<li><a href="api/evennia.commands.default.tests.html#evennia.commands.default.tests.TestDiscord.test_discord__switches_3__channel">test_discord__switches_3__channel() (evennia.commands.default.tests.TestDiscord method)</a>
</li>
<li><a href="api/evennia.commands.default.tests.html#evennia.commands.default.tests.TestBuilding.test_do_nested_lookup">test_do_nested_lookup() (evennia.commands.default.tests.TestBuilding method)</a>
</li>
@ -21260,6 +21322,8 @@
<li><a href="api/evennia.contrib.grid.xyzgrid.tests.html#evennia.contrib.grid.xyzgrid.tests.TestXYZGridTransition.test_shortest_path">(evennia.contrib.grid.xyzgrid.tests.TestXYZGridTransition attribute)</a>
</li>
</ul></li>
</ul></td>
<td style="width: 33%; vertical-align: top;"><ul>
<li><a href="api/evennia.contrib.grid.xyzgrid.tests.html#evennia.contrib.grid.xyzgrid.tests.TestMap10.test_shortest_path_0">test_shortest_path_0() (evennia.contrib.grid.xyzgrid.tests.TestMap10 method)</a>
<ul>
@ -21282,8 +21346,6 @@
<li><a href="api/evennia.contrib.grid.xyzgrid.tests.html#evennia.contrib.grid.xyzgrid.tests.TestXYZGridTransition.test_shortest_path_0">(evennia.contrib.grid.xyzgrid.tests.TestXYZGridTransition method)</a>
</li>
</ul></li>
</ul></td>
<td style="width: 33%; vertical-align: top;"><ul>
<li><a href="api/evennia.contrib.grid.xyzgrid.tests.html#evennia.contrib.grid.xyzgrid.tests.TestMap3.test_shortest_path_00">test_shortest_path_00() (evennia.contrib.grid.xyzgrid.tests.TestMap3 method)</a>
</li>
<li><a href="api/evennia.contrib.grid.xyzgrid.tests.html#evennia.contrib.grid.xyzgrid.tests.TestMap3.test_shortest_path_01">test_shortest_path_01() (evennia.contrib.grid.xyzgrid.tests.TestMap3 method)</a>
@ -22031,6 +22093,8 @@
<li><a href="api/evennia.contrib.base_systems.ingame_python.tests.html#evennia.contrib.base_systems.ingame_python.tests.TestDefaultCallbacks">TestDefaultCallbacks (class in evennia.contrib.base_systems.ingame_python.tests)</a>
</li>
<li><a href="api/evennia.contrib.rpg.dice.tests.html#evennia.contrib.rpg.dice.tests.TestDice">TestDice (class in evennia.contrib.rpg.dice.tests)</a>
</li>
<li><a href="api/evennia.commands.default.tests.html#evennia.commands.default.tests.TestDiscord">TestDiscord (class in evennia.commands.default.tests)</a>
</li>
<li><a href="api/evennia.server.profiling.tests.html#evennia.server.profiling.tests.TestDummyrunnerSettings">TestDummyrunnerSettings (class in evennia.server.profiling.tests)</a>
</li>
@ -22502,6 +22566,8 @@
<li><a href="api/evennia.accounts.bots.html#evennia.accounts.bots.Bot.typename">(evennia.accounts.bots.Bot attribute)</a>
</li>
<li><a href="api/evennia.accounts.bots.html#evennia.accounts.bots.BotStarter.typename">(evennia.accounts.bots.BotStarter attribute)</a>
</li>
<li><a href="api/evennia.accounts.bots.html#evennia.accounts.bots.DiscordBot.typename">(evennia.accounts.bots.DiscordBot attribute)</a>
</li>
<li><a href="api/evennia.accounts.bots.html#evennia.accounts.bots.GrapevineBot.typename">(evennia.accounts.bots.GrapevineBot attribute)</a>
</li>

Binary file not shown.

File diff suppressed because one or more lines are too long