mirror of
https://github.com/evennia/evennia.git
synced 2026-03-26 01:36:32 +01:00
1452 lines
No EOL
181 KiB
HTML
1452 lines
No EOL
181 KiB
HTML
|
|
<!DOCTYPE html>
|
|
|
|
<html>
|
|
<head>
|
|
<meta charset="utf-8" />
|
|
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
|
<title>evennia.commands.default.comms — 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> »</li>
|
|
<li class="nav-item nav-item-1"><a href="../../../index.html" >Module code</a> »</li>
|
|
<li class="nav-item nav-item-2"><a href="../../../evennia.html" accesskey="U">evennia</a> »</li>
|
|
<li class="nav-item nav-item-this"><a href="">evennia.commands.default.comms</a></li>
|
|
</ul>
|
|
<div class="develop">develop branch</div>
|
|
</div>
|
|
|
|
<div class="document">
|
|
<div class="documentwrapper">
|
|
<div class="bodywrapper">
|
|
<div class="body" role="main">
|
|
|
|
<h1>Source code for evennia.commands.default.comms</h1><div class="highlight"><pre>
|
|
<span></span><span class="sd">"""</span>
|
|
<span class="sd">Comsystem command module.</span>
|
|
|
|
<span class="sd">Comm commands are OOC commands and intended to be made available to</span>
|
|
<span class="sd">the Account at all times (they go into the AccountCmdSet). So we</span>
|
|
<span class="sd">make sure to homogenize self.caller to always be the account object</span>
|
|
<span class="sd">for easy handling.</span>
|
|
|
|
<span class="sd">"""</span>
|
|
<span class="kn">import</span> <span class="nn">hashlib</span>
|
|
<span class="kn">import</span> <span class="nn">time</span>
|
|
<span class="kn">from</span> <span class="nn">django.conf</span> <span class="k">import</span> <span class="n">settings</span>
|
|
<span class="kn">from</span> <span class="nn">evennia.comms.models</span> <span class="k">import</span> <span class="n">ChannelDB</span><span class="p">,</span> <span class="n">Msg</span>
|
|
<span class="kn">from</span> <span class="nn">evennia.accounts.models</span> <span class="k">import</span> <span class="n">AccountDB</span>
|
|
<span class="kn">from</span> <span class="nn">evennia.accounts</span> <span class="k">import</span> <span class="n">bots</span>
|
|
<span class="kn">from</span> <span class="nn">evennia.comms.channelhandler</span> <span class="k">import</span> <span class="n">CHANNELHANDLER</span>
|
|
<span class="kn">from</span> <span class="nn">evennia.locks.lockhandler</span> <span class="k">import</span> <span class="n">LockException</span>
|
|
<span class="kn">from</span> <span class="nn">evennia.utils</span> <span class="k">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="p">,</span> <span class="n">evtable</span>
|
|
<span class="kn">from</span> <span class="nn">evennia.utils.utils</span> <span class="k">import</span> <span class="n">make_iter</span><span class="p">,</span> <span class="n">class_from_module</span>
|
|
|
|
<span class="n">COMMAND_DEFAULT_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">COMMAND_DEFAULT_CLASS</span><span class="p">)</span>
|
|
<span class="n">CHANNEL_DEFAULT_TYPECLASS</span> <span class="o">=</span> <span class="n">class_from_module</span><span class="p">(</span><span class="n">settings</span><span class="o">.</span><span class="n">BASE_CHANNEL_TYPECLASS</span><span class="p">)</span>
|
|
|
|
|
|
<span class="c1"># limit symbol import for API</span>
|
|
<span class="n">__all__</span> <span class="o">=</span> <span class="p">(</span>
|
|
<span class="s2">"CmdAddCom"</span><span class="p">,</span>
|
|
<span class="s2">"CmdDelCom"</span><span class="p">,</span>
|
|
<span class="s2">"CmdAllCom"</span><span class="p">,</span>
|
|
<span class="s2">"CmdChannels"</span><span class="p">,</span>
|
|
<span class="s2">"CmdCdestroy"</span><span class="p">,</span>
|
|
<span class="s2">"CmdCBoot"</span><span class="p">,</span>
|
|
<span class="s2">"CmdCemit"</span><span class="p">,</span>
|
|
<span class="s2">"CmdCWho"</span><span class="p">,</span>
|
|
<span class="s2">"CmdChannelCreate"</span><span class="p">,</span>
|
|
<span class="s2">"CmdClock"</span><span class="p">,</span>
|
|
<span class="s2">"CmdCdesc"</span><span class="p">,</span>
|
|
<span class="s2">"CmdPage"</span><span class="p">,</span>
|
|
<span class="s2">"CmdIRC2Chan"</span><span class="p">,</span>
|
|
<span class="s2">"CmdIRCStatus"</span><span class="p">,</span>
|
|
<span class="s2">"CmdRSS2Chan"</span><span class="p">,</span>
|
|
<span class="s2">"CmdGrapevine2Chan"</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>
|
|
|
|
|
|
<span class="k">def</span> <span class="nf">find_channel</span><span class="p">(</span><span class="n">caller</span><span class="p">,</span> <span class="n">channelname</span><span class="p">,</span> <span class="n">silent</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span> <span class="n">noaliases</span><span class="o">=</span><span class="kc">False</span><span class="p">):</span>
|
|
<span class="sd">"""</span>
|
|
<span class="sd"> Helper function for searching for a single channel with</span>
|
|
<span class="sd"> some error handling.</span>
|
|
<span class="sd"> """</span>
|
|
<span class="n">channels</span> <span class="o">=</span> <span class="n">CHANNEL_DEFAULT_TYPECLASS</span><span class="o">.</span><span class="n">objects</span><span class="o">.</span><span class="n">channel_search</span><span class="p">(</span><span class="n">channelname</span><span class="p">)</span>
|
|
<span class="k">if</span> <span class="ow">not</span> <span class="n">channels</span><span class="p">:</span>
|
|
<span class="k">if</span> <span class="ow">not</span> <span class="n">noaliases</span><span class="p">:</span>
|
|
<span class="n">channels</span> <span class="o">=</span> <span class="p">[</span>
|
|
<span class="n">chan</span>
|
|
<span class="k">for</span> <span class="n">chan</span> <span class="ow">in</span> <span class="n">CHANNEL_DEFAULT_TYPECLASS</span><span class="o">.</span><span class="n">objects</span><span class="o">.</span><span class="n">get_all_channels</span><span class="p">()</span>
|
|
<span class="k">if</span> <span class="n">channelname</span> <span class="ow">in</span> <span class="n">chan</span><span class="o">.</span><span class="n">aliases</span><span class="o">.</span><span class="n">all</span><span class="p">()</span>
|
|
<span class="p">]</span>
|
|
<span class="k">if</span> <span class="n">channels</span><span class="p">:</span>
|
|
<span class="k">return</span> <span class="n">channels</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">silent</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">"Channel '</span><span class="si">%s</span><span class="s2">' not found."</span> <span class="o">%</span> <span class="n">channelname</span><span class="p">)</span>
|
|
<span class="k">return</span> <span class="kc">None</span>
|
|
<span class="k">elif</span> <span class="nb">len</span><span class="p">(</span><span class="n">channels</span><span class="p">)</span> <span class="o">></span> <span class="mi">1</span><span class="p">:</span>
|
|
<span class="n">matches</span> <span class="o">=</span> <span class="s2">", "</span><span class="o">.</span><span class="n">join</span><span class="p">([</span><span class="s2">"</span><span class="si">%s</span><span class="s2">(</span><span class="si">%s</span><span class="s2">)"</span> <span class="o">%</span> <span class="p">(</span><span class="n">chan</span><span class="o">.</span><span class="n">key</span><span class="p">,</span> <span class="n">chan</span><span class="o">.</span><span class="n">id</span><span class="p">)</span> <span class="k">for</span> <span class="n">chan</span> <span class="ow">in</span> <span class="n">channels</span><span class="p">])</span>
|
|
<span class="k">if</span> <span class="ow">not</span> <span class="n">silent</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">"Multiple channels match (be more specific): </span><span class="se">\n</span><span class="si">%s</span><span class="s2">"</span> <span class="o">%</span> <span class="n">matches</span><span class="p">)</span>
|
|
<span class="k">return</span> <span class="kc">None</span>
|
|
<span class="k">return</span> <span class="n">channels</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span>
|
|
|
|
|
|
<div class="viewcode-block" id="CmdAddCom"><a class="viewcode-back" href="../../../../api/evennia.commands.default.comms.html#evennia.commands.default.comms.CmdAddCom">[docs]</a><span class="k">class</span> <span class="nc">CmdAddCom</span><span class="p">(</span><span class="n">COMMAND_DEFAULT_CLASS</span><span class="p">):</span>
|
|
<span class="sd">"""</span>
|
|
<span class="sd"> add a channel alias and/or subscribe to a channel</span>
|
|
|
|
<span class="sd"> Usage:</span>
|
|
<span class="sd"> addcom [alias=] <channel></span>
|
|
|
|
<span class="sd"> Joins a given channel. If alias is given, this will allow you to</span>
|
|
<span class="sd"> refer to the channel by this alias rather than the full channel</span>
|
|
<span class="sd"> name. Subsequent calls of this command can be used to add multiple</span>
|
|
<span class="sd"> aliases to an already joined channel.</span>
|
|
<span class="sd"> """</span>
|
|
|
|
<span class="n">key</span> <span class="o">=</span> <span class="s2">"addcom"</span>
|
|
<span class="n">aliases</span> <span class="o">=</span> <span class="p">[</span><span class="s2">"aliaschan"</span><span class="p">,</span> <span class="s2">"chanalias"</span><span class="p">]</span>
|
|
<span class="n">help_category</span> <span class="o">=</span> <span class="s2">"Comms"</span>
|
|
<span class="n">locks</span> <span class="o">=</span> <span class="s2">"cmd:not pperm(channel_banned)"</span>
|
|
|
|
<span class="c1"># this is used by the COMMAND_DEFAULT_CLASS parent</span>
|
|
<span class="n">account_caller</span> <span class="o">=</span> <span class="kc">True</span>
|
|
|
|
<div class="viewcode-block" id="CmdAddCom.func"><a class="viewcode-back" href="../../../../api/evennia.commands.default.comms.html#evennia.commands.default.comms.CmdAddCom.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">"""Implement the command"""</span>
|
|
|
|
<span class="n">caller</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">caller</span>
|
|
<span class="n">args</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">args</span>
|
|
<span class="n">account</span> <span class="o">=</span> <span class="n">caller</span>
|
|
|
|
<span class="k">if</span> <span class="ow">not</span> <span class="n">args</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">"Usage: addcom [alias =] channelname."</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">rhs</span><span class="p">:</span>
|
|
<span class="c1"># rhs holds the channelname</span>
|
|
<span class="n">channelname</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">rhs</span>
|
|
<span class="n">alias</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">lhs</span>
|
|
<span class="k">else</span><span class="p">:</span>
|
|
<span class="n">channelname</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">args</span>
|
|
<span class="n">alias</span> <span class="o">=</span> <span class="kc">None</span>
|
|
|
|
<span class="n">channel</span> <span class="o">=</span> <span class="n">find_channel</span><span class="p">(</span><span class="n">caller</span><span class="p">,</span> <span class="n">channelname</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="c1"># we use the custom search method to handle errors.</span>
|
|
<span class="k">return</span>
|
|
|
|
<span class="c1"># check permissions</span>
|
|
<span class="k">if</span> <span class="ow">not</span> <span class="n">channel</span><span class="o">.</span><span class="n">access</span><span class="p">(</span><span class="n">account</span><span class="p">,</span> <span class="s2">"listen"</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">"</span><span class="si">%s</span><span class="s2">: You are not allowed to listen to this channel."</span> <span class="o">%</span> <span class="n">channel</span><span class="o">.</span><span class="n">key</span><span class="p">)</span>
|
|
<span class="k">return</span>
|
|
|
|
<span class="n">string</span> <span class="o">=</span> <span class="s2">""</span>
|
|
<span class="k">if</span> <span class="ow">not</span> <span class="n">channel</span><span class="o">.</span><span class="n">has_connection</span><span class="p">(</span><span class="n">account</span><span class="p">):</span>
|
|
<span class="c1"># we want to connect as well.</span>
|
|
<span class="k">if</span> <span class="ow">not</span> <span class="n">channel</span><span class="o">.</span><span class="n">connect</span><span class="p">(</span><span class="n">account</span><span class="p">):</span>
|
|
<span class="c1"># if this would have returned True, the account is connected</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">msg</span><span class="p">(</span><span class="s2">"</span><span class="si">%s</span><span class="s2">: You are not allowed to join this channel."</span> <span class="o">%</span> <span class="n">channel</span><span class="o">.</span><span class="n">key</span><span class="p">)</span>
|
|
<span class="k">return</span>
|
|
<span class="k">else</span><span class="p">:</span>
|
|
<span class="n">string</span> <span class="o">+=</span> <span class="s2">"You now listen to the channel </span><span class="si">%s</span><span class="s2">. "</span> <span class="o">%</span> <span class="n">channel</span><span class="o">.</span><span class="n">key</span>
|
|
<span class="k">else</span><span class="p">:</span>
|
|
<span class="k">if</span> <span class="n">channel</span><span class="o">.</span><span class="n">unmute</span><span class="p">(</span><span class="n">account</span><span class="p">):</span>
|
|
<span class="n">string</span> <span class="o">+=</span> <span class="s2">"You unmute channel </span><span class="si">%s</span><span class="s2">."</span> <span class="o">%</span> <span class="n">channel</span><span class="o">.</span><span class="n">key</span>
|
|
<span class="k">else</span><span class="p">:</span>
|
|
<span class="n">string</span> <span class="o">+=</span> <span class="s2">"You are already connected to channel </span><span class="si">%s</span><span class="s2">."</span> <span class="o">%</span> <span class="n">channel</span><span class="o">.</span><span class="n">key</span>
|
|
|
|
<span class="k">if</span> <span class="n">alias</span><span class="p">:</span>
|
|
<span class="c1"># create a nick and add it to the caller.</span>
|
|
<span class="n">caller</span><span class="o">.</span><span class="n">nicks</span><span class="o">.</span><span class="n">add</span><span class="p">(</span><span class="n">alias</span><span class="p">,</span> <span class="n">channel</span><span class="o">.</span><span class="n">key</span><span class="p">,</span> <span class="n">category</span><span class="o">=</span><span class="s2">"channel"</span><span class="p">)</span>
|
|
<span class="n">string</span> <span class="o">+=</span> <span class="s2">" You can now refer to the channel </span><span class="si">%s</span><span class="s2"> with the alias '</span><span class="si">%s</span><span class="s2">'."</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">msg</span><span class="p">(</span><span class="n">string</span> <span class="o">%</span> <span class="p">(</span><span class="n">channel</span><span class="o">.</span><span class="n">key</span><span class="p">,</span> <span class="n">alias</span><span class="p">))</span>
|
|
<span class="k">else</span><span class="p">:</span>
|
|
<span class="n">string</span> <span class="o">+=</span> <span class="s2">" No alias added."</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">msg</span><span class="p">(</span><span class="n">string</span><span class="p">)</span></div></div>
|
|
|
|
|
|
<div class="viewcode-block" id="CmdDelCom"><a class="viewcode-back" href="../../../../api/evennia.commands.default.comms.html#evennia.commands.default.comms.CmdDelCom">[docs]</a><span class="k">class</span> <span class="nc">CmdDelCom</span><span class="p">(</span><span class="n">COMMAND_DEFAULT_CLASS</span><span class="p">):</span>
|
|
<span class="sd">"""</span>
|
|
<span class="sd"> remove a channel alias and/or unsubscribe from channel</span>
|
|
|
|
<span class="sd"> Usage:</span>
|
|
<span class="sd"> delcom <alias or channel></span>
|
|
<span class="sd"> delcom/all <channel></span>
|
|
|
|
<span class="sd"> If the full channel name is given, unsubscribe from the</span>
|
|
<span class="sd"> channel. If an alias is given, remove the alias but don't</span>
|
|
<span class="sd"> unsubscribe. If the 'all' switch is used, remove all aliases</span>
|
|
<span class="sd"> for that channel.</span>
|
|
<span class="sd"> """</span>
|
|
|
|
<span class="n">key</span> <span class="o">=</span> <span class="s2">"delcom"</span>
|
|
<span class="n">aliases</span> <span class="o">=</span> <span class="p">[</span><span class="s2">"delaliaschan"</span><span class="p">,</span> <span class="s2">"delchanalias"</span><span class="p">]</span>
|
|
<span class="n">help_category</span> <span class="o">=</span> <span class="s2">"Comms"</span>
|
|
<span class="n">locks</span> <span class="o">=</span> <span class="s2">"cmd:not perm(channel_banned)"</span>
|
|
|
|
<span class="c1"># this is used by the COMMAND_DEFAULT_CLASS parent</span>
|
|
<span class="n">account_caller</span> <span class="o">=</span> <span class="kc">True</span>
|
|
|
|
<div class="viewcode-block" id="CmdDelCom.func"><a class="viewcode-back" href="../../../../api/evennia.commands.default.comms.html#evennia.commands.default.comms.CmdDelCom.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">"""Implementing the command. """</span>
|
|
|
|
<span class="n">caller</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">caller</span>
|
|
<span class="n">account</span> <span class="o">=</span> <span class="n">caller</span>
|
|
|
|
<span class="k">if</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="bp">self</span><span class="o">.</span><span class="n">msg</span><span class="p">(</span><span class="s2">"Usage: delcom <alias or channel>"</span><span class="p">)</span>
|
|
<span class="k">return</span>
|
|
<span class="n">ostring</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">lower</span><span class="p">()</span>
|
|
|
|
<span class="n">channel</span> <span class="o">=</span> <span class="n">find_channel</span><span class="p">(</span><span class="n">caller</span><span class="p">,</span> <span class="n">ostring</span><span class="p">,</span> <span class="n">silent</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="n">noaliases</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
|
|
<span class="k">if</span> <span class="n">channel</span><span class="p">:</span>
|
|
<span class="c1"># we have given a channel name - unsubscribe</span>
|
|
<span class="k">if</span> <span class="ow">not</span> <span class="n">channel</span><span class="o">.</span><span class="n">has_connection</span><span class="p">(</span><span class="n">account</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">"You are not listening to that channel."</span><span class="p">)</span>
|
|
<span class="k">return</span>
|
|
<span class="n">chkey</span> <span class="o">=</span> <span class="n">channel</span><span class="o">.</span><span class="n">key</span><span class="o">.</span><span class="n">lower</span><span class="p">()</span>
|
|
<span class="n">delnicks</span> <span class="o">=</span> <span class="s2">"all"</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">switches</span>
|
|
<span class="c1"># find all nicks linked to this channel and delete them</span>
|
|
<span class="k">if</span> <span class="n">delnicks</span><span class="p">:</span>
|
|
<span class="k">for</span> <span class="n">nick</span> <span class="ow">in</span> <span class="p">[</span>
|
|
<span class="n">nick</span>
|
|
<span class="k">for</span> <span class="n">nick</span> <span class="ow">in</span> <span class="n">make_iter</span><span class="p">(</span><span class="n">caller</span><span class="o">.</span><span class="n">nicks</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">category</span><span class="o">=</span><span class="s2">"channel"</span><span class="p">,</span> <span class="n">return_obj</span><span class="o">=</span><span class="kc">True</span><span class="p">))</span>
|
|
<span class="k">if</span> <span class="n">nick</span> <span class="ow">and</span> <span class="n">nick</span><span class="o">.</span><span class="n">pk</span> <span class="ow">and</span> <span class="n">nick</span><span class="o">.</span><span class="n">value</span><span class="p">[</span><span class="mi">3</span><span class="p">]</span><span class="o">.</span><span class="n">lower</span><span class="p">()</span> <span class="o">==</span> <span class="n">chkey</span>
|
|
<span class="p">]:</span>
|
|
<span class="n">nick</span><span class="o">.</span><span class="n">delete</span><span class="p">()</span>
|
|
<span class="n">disconnect</span> <span class="o">=</span> <span class="n">channel</span><span class="o">.</span><span class="n">disconnect</span><span class="p">(</span><span class="n">account</span><span class="p">)</span>
|
|
<span class="k">if</span> <span class="n">disconnect</span><span class="p">:</span>
|
|
<span class="n">wipednicks</span> <span class="o">=</span> <span class="s2">" Eventual aliases were removed."</span> <span class="k">if</span> <span class="n">delnicks</span> <span class="k">else</span> <span class="s2">""</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">msg</span><span class="p">(</span><span class="s2">"You stop listening to channel '</span><span class="si">%s</span><span class="s2">'.</span><span class="si">%s</span><span class="s2">"</span> <span class="o">%</span> <span class="p">(</span><span class="n">channel</span><span class="o">.</span><span class="n">key</span><span class="p">,</span> <span class="n">wipednicks</span><span class="p">))</span>
|
|
<span class="k">return</span>
|
|
<span class="k">else</span><span class="p">:</span>
|
|
<span class="c1"># we are removing a channel nick</span>
|
|
<span class="n">channame</span> <span class="o">=</span> <span class="n">caller</span><span class="o">.</span><span class="n">nicks</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">key</span><span class="o">=</span><span class="n">ostring</span><span class="p">,</span> <span class="n">category</span><span class="o">=</span><span class="s2">"channel"</span><span class="p">)</span>
|
|
<span class="n">channel</span> <span class="o">=</span> <span class="n">find_channel</span><span class="p">(</span><span class="n">caller</span><span class="p">,</span> <span class="n">channame</span><span class="p">,</span> <span class="n">silent</span><span class="o">=</span><span class="kc">True</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="bp">self</span><span class="o">.</span><span class="n">msg</span><span class="p">(</span><span class="s2">"No channel with alias '</span><span class="si">%s</span><span class="s2">' was found."</span> <span class="o">%</span> <span class="n">ostring</span><span class="p">)</span>
|
|
<span class="k">else</span><span class="p">:</span>
|
|
<span class="k">if</span> <span class="n">caller</span><span class="o">.</span><span class="n">nicks</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">ostring</span><span class="p">,</span> <span class="n">category</span><span class="o">=</span><span class="s2">"channel"</span><span class="p">):</span>
|
|
<span class="n">caller</span><span class="o">.</span><span class="n">nicks</span><span class="o">.</span><span class="n">remove</span><span class="p">(</span><span class="n">ostring</span><span class="p">,</span> <span class="n">category</span><span class="o">=</span><span class="s2">"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="s2">"Your alias '</span><span class="si">%s</span><span class="s2">' for channel </span><span class="si">%s</span><span class="s2"> was cleared."</span> <span class="o">%</span> <span class="p">(</span><span class="n">ostring</span><span class="p">,</span> <span class="n">channel</span><span class="o">.</span><span class="n">key</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">"You had no such alias defined for this channel."</span><span class="p">)</span></div></div>
|
|
|
|
|
|
<div class="viewcode-block" id="CmdAllCom"><a class="viewcode-back" href="../../../../api/evennia.commands.default.comms.html#evennia.commands.default.comms.CmdAllCom">[docs]</a><span class="k">class</span> <span class="nc">CmdAllCom</span><span class="p">(</span><span class="n">COMMAND_DEFAULT_CLASS</span><span class="p">):</span>
|
|
<span class="sd">"""</span>
|
|
<span class="sd"> perform admin operations on all channels</span>
|
|
|
|
<span class="sd"> Usage:</span>
|
|
<span class="sd"> allcom [on | off | who | destroy]</span>
|
|
|
|
<span class="sd"> Allows the user to universally turn off or on all channels they are on, as</span>
|
|
<span class="sd"> well as perform a 'who' for all channels they are on. Destroy deletes all</span>
|
|
<span class="sd"> channels that you control.</span>
|
|
|
|
<span class="sd"> Without argument, works like comlist.</span>
|
|
<span class="sd"> """</span>
|
|
|
|
<span class="n">key</span> <span class="o">=</span> <span class="s2">"allcom"</span>
|
|
<span class="n">locks</span> <span class="o">=</span> <span class="s2">"cmd: not pperm(channel_banned)"</span>
|
|
<span class="n">help_category</span> <span class="o">=</span> <span class="s2">"Comms"</span>
|
|
|
|
<span class="c1"># this is used by the COMMAND_DEFAULT_CLASS parent</span>
|
|
<span class="n">account_caller</span> <span class="o">=</span> <span class="kc">True</span>
|
|
|
|
<div class="viewcode-block" id="CmdAllCom.func"><a class="viewcode-back" href="../../../../api/evennia.commands.default.comms.html#evennia.commands.default.comms.CmdAllCom.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">"""Runs the function"""</span>
|
|
|
|
<span class="n">caller</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">caller</span>
|
|
<span class="n">args</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">args</span>
|
|
<span class="k">if</span> <span class="ow">not</span> <span class="n">args</span><span class="p">:</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">execute_cmd</span><span class="p">(</span><span class="s2">"channels"</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">"(Usage: allcom on | off | who | destroy)"</span><span class="p">)</span>
|
|
<span class="k">return</span>
|
|
|
|
<span class="k">if</span> <span class="n">args</span> <span class="o">==</span> <span class="s2">"on"</span><span class="p">:</span>
|
|
<span class="c1"># get names of all channels available to listen to</span>
|
|
<span class="c1"># and activate them all</span>
|
|
<span class="n">channels</span> <span class="o">=</span> <span class="p">[</span>
|
|
<span class="n">chan</span>
|
|
<span class="k">for</span> <span class="n">chan</span> <span class="ow">in</span> <span class="n">CHANNEL_DEFAULT_TYPECLASS</span><span class="o">.</span><span class="n">objects</span><span class="o">.</span><span class="n">get_all_channels</span><span class="p">()</span>
|
|
<span class="k">if</span> <span class="n">chan</span><span class="o">.</span><span class="n">access</span><span class="p">(</span><span class="n">caller</span><span class="p">,</span> <span class="s2">"listen"</span><span class="p">)</span>
|
|
<span class="p">]</span>
|
|
<span class="k">for</span> <span class="n">channel</span> <span class="ow">in</span> <span class="n">channels</span><span class="p">:</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">execute_cmd</span><span class="p">(</span><span class="s2">"addcom </span><span class="si">%s</span><span class="s2">"</span> <span class="o">%</span> <span class="n">channel</span><span class="o">.</span><span class="n">key</span><span class="p">)</span>
|
|
<span class="k">elif</span> <span class="n">args</span> <span class="o">==</span> <span class="s2">"off"</span><span class="p">:</span>
|
|
<span class="c1"># get names all subscribed channels and disconnect from them all</span>
|
|
<span class="n">channels</span> <span class="o">=</span> <span class="n">CHANNEL_DEFAULT_TYPECLASS</span><span class="o">.</span><span class="n">objects</span><span class="o">.</span><span class="n">get_subscriptions</span><span class="p">(</span><span class="n">caller</span><span class="p">)</span>
|
|
<span class="k">for</span> <span class="n">channel</span> <span class="ow">in</span> <span class="n">channels</span><span class="p">:</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">execute_cmd</span><span class="p">(</span><span class="s2">"delcom </span><span class="si">%s</span><span class="s2">"</span> <span class="o">%</span> <span class="n">channel</span><span class="o">.</span><span class="n">key</span><span class="p">)</span>
|
|
<span class="k">elif</span> <span class="n">args</span> <span class="o">==</span> <span class="s2">"destroy"</span><span class="p">:</span>
|
|
<span class="c1"># destroy all channels you control</span>
|
|
<span class="n">channels</span> <span class="o">=</span> <span class="p">[</span>
|
|
<span class="n">chan</span>
|
|
<span class="k">for</span> <span class="n">chan</span> <span class="ow">in</span> <span class="n">CHANNEL_DEFAULT_TYPECLASS</span><span class="o">.</span><span class="n">objects</span><span class="o">.</span><span class="n">get_all_channels</span><span class="p">()</span>
|
|
<span class="k">if</span> <span class="n">chan</span><span class="o">.</span><span class="n">access</span><span class="p">(</span><span class="n">caller</span><span class="p">,</span> <span class="s2">"control"</span><span class="p">)</span>
|
|
<span class="p">]</span>
|
|
<span class="k">for</span> <span class="n">channel</span> <span class="ow">in</span> <span class="n">channels</span><span class="p">:</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">execute_cmd</span><span class="p">(</span><span class="s2">"cdestroy </span><span class="si">%s</span><span class="s2">"</span> <span class="o">%</span> <span class="n">channel</span><span class="o">.</span><span class="n">key</span><span class="p">)</span>
|
|
<span class="k">elif</span> <span class="n">args</span> <span class="o">==</span> <span class="s2">"who"</span><span class="p">:</span>
|
|
<span class="c1"># run a who, listing the subscribers on visible channels.</span>
|
|
<span class="n">string</span> <span class="o">=</span> <span class="s2">"</span><span class="se">\n</span><span class="s2">|CChannel subscriptions|n"</span>
|
|
<span class="n">channels</span> <span class="o">=</span> <span class="p">[</span>
|
|
<span class="n">chan</span>
|
|
<span class="k">for</span> <span class="n">chan</span> <span class="ow">in</span> <span class="n">CHANNEL_DEFAULT_TYPECLASS</span><span class="o">.</span><span class="n">objects</span><span class="o">.</span><span class="n">get_all_channels</span><span class="p">()</span>
|
|
<span class="k">if</span> <span class="n">chan</span><span class="o">.</span><span class="n">access</span><span class="p">(</span><span class="n">caller</span><span class="p">,</span> <span class="s2">"listen"</span><span class="p">)</span>
|
|
<span class="p">]</span>
|
|
<span class="k">if</span> <span class="ow">not</span> <span class="n">channels</span><span class="p">:</span>
|
|
<span class="n">string</span> <span class="o">+=</span> <span class="s2">"No channels."</span>
|
|
<span class="k">for</span> <span class="n">channel</span> <span class="ow">in</span> <span class="n">channels</span><span class="p">:</span>
|
|
<span class="n">string</span> <span class="o">+=</span> <span class="s2">"</span><span class="se">\n</span><span class="s2">|w</span><span class="si">%s</span><span class="s2">:|n</span><span class="se">\n</span><span class="s2"> </span><span class="si">%s</span><span class="s2">"</span> <span class="o">%</span> <span class="p">(</span><span class="n">channel</span><span class="o">.</span><span class="n">key</span><span class="p">,</span> <span class="n">channel</span><span class="o">.</span><span class="n">wholist</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">string</span><span class="o">.</span><span class="n">strip</span><span class="p">())</span>
|
|
<span class="k">else</span><span class="p">:</span>
|
|
<span class="c1"># wrong input</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">msg</span><span class="p">(</span><span class="s2">"Usage: allcom on | off | who | clear"</span><span class="p">)</span></div></div>
|
|
|
|
|
|
<div class="viewcode-block" id="CmdChannels"><a class="viewcode-back" href="../../../../api/evennia.commands.default.comms.html#evennia.commands.default.comms.CmdChannels">[docs]</a><span class="k">class</span> <span class="nc">CmdChannels</span><span class="p">(</span><span class="n">COMMAND_DEFAULT_CLASS</span><span class="p">):</span>
|
|
<span class="sd">"""</span>
|
|
<span class="sd"> list all channels available to you</span>
|
|
|
|
<span class="sd"> Usage:</span>
|
|
<span class="sd"> channels</span>
|
|
<span class="sd"> clist</span>
|
|
<span class="sd"> comlist</span>
|
|
|
|
<span class="sd"> Lists all channels available to you, whether you listen to them or not.</span>
|
|
<span class="sd"> Use 'comlist' to only view your current channel subscriptions.</span>
|
|
<span class="sd"> Use addcom/delcom to join and leave channels</span>
|
|
<span class="sd"> """</span>
|
|
|
|
<span class="n">key</span> <span class="o">=</span> <span class="s2">"channels"</span>
|
|
<span class="n">aliases</span> <span class="o">=</span> <span class="p">[</span><span class="s2">"clist"</span><span class="p">,</span> <span class="s2">"comlist"</span><span class="p">,</span> <span class="s2">"chanlist"</span><span class="p">,</span> <span class="s2">"channellist"</span><span class="p">,</span> <span class="s2">"all channels"</span><span class="p">]</span>
|
|
<span class="n">help_category</span> <span class="o">=</span> <span class="s2">"Comms"</span>
|
|
<span class="n">locks</span> <span class="o">=</span> <span class="s2">"cmd: not pperm(channel_banned)"</span>
|
|
|
|
<span class="c1"># this is used by the COMMAND_DEFAULT_CLASS parent</span>
|
|
<span class="n">account_caller</span> <span class="o">=</span> <span class="kc">True</span>
|
|
|
|
<div class="viewcode-block" id="CmdChannels.func"><a class="viewcode-back" href="../../../../api/evennia.commands.default.comms.html#evennia.commands.default.comms.CmdChannels.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">"""Implement function"""</span>
|
|
|
|
<span class="n">caller</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">caller</span>
|
|
|
|
<span class="c1"># all channels we have available to listen to</span>
|
|
<span class="n">channels</span> <span class="o">=</span> <span class="p">[</span>
|
|
<span class="n">chan</span>
|
|
<span class="k">for</span> <span class="n">chan</span> <span class="ow">in</span> <span class="n">CHANNEL_DEFAULT_TYPECLASS</span><span class="o">.</span><span class="n">objects</span><span class="o">.</span><span class="n">get_all_channels</span><span class="p">()</span>
|
|
<span class="k">if</span> <span class="n">chan</span><span class="o">.</span><span class="n">access</span><span class="p">(</span><span class="n">caller</span><span class="p">,</span> <span class="s2">"listen"</span><span class="p">)</span>
|
|
<span class="p">]</span>
|
|
<span class="k">if</span> <span class="ow">not</span> <span class="n">channels</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">"No channels available."</span><span class="p">)</span>
|
|
<span class="k">return</span>
|
|
<span class="c1"># all channel we are already subscribed to</span>
|
|
<span class="n">subs</span> <span class="o">=</span> <span class="n">CHANNEL_DEFAULT_TYPECLASS</span><span class="o">.</span><span class="n">objects</span><span class="o">.</span><span class="n">get_subscriptions</span><span class="p">(</span><span class="n">caller</span><span class="p">)</span>
|
|
|
|
<span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">cmdstring</span> <span class="o">==</span> <span class="s2">"comlist"</span><span class="p">:</span>
|
|
<span class="c1"># just display the subscribed channels with no extra info</span>
|
|
<span class="n">comtable</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">"|wchannel|n"</span><span class="p">,</span>
|
|
<span class="s2">"|wmy aliases|n"</span><span class="p">,</span>
|
|
<span class="s2">"|wdescription|n"</span><span class="p">,</span>
|
|
<span class="n">align</span><span class="o">=</span><span class="s2">"l"</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="k">for</span> <span class="n">chan</span> <span class="ow">in</span> <span class="n">subs</span><span class="p">:</span>
|
|
<span class="n">clower</span> <span class="o">=</span> <span class="n">chan</span><span class="o">.</span><span class="n">key</span><span class="o">.</span><span class="n">lower</span><span class="p">()</span>
|
|
<span class="n">nicks</span> <span class="o">=</span> <span class="n">caller</span><span class="o">.</span><span class="n">nicks</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">category</span><span class="o">=</span><span class="s2">"channel"</span><span class="p">,</span> <span class="n">return_obj</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
|
|
<span class="n">comtable</span><span class="o">.</span><span class="n">add_row</span><span class="p">(</span>
|
|
<span class="o">*</span><span class="p">[</span>
|
|
<span class="s2">"</span><span class="si">%s%s</span><span class="s2">"</span>
|
|
<span class="o">%</span> <span class="p">(</span>
|
|
<span class="n">chan</span><span class="o">.</span><span class="n">key</span><span class="p">,</span>
|
|
<span class="n">chan</span><span class="o">.</span><span class="n">aliases</span><span class="o">.</span><span class="n">all</span><span class="p">()</span> <span class="ow">and</span> <span class="s2">"(</span><span class="si">%s</span><span class="s2">)"</span> <span class="o">%</span> <span class="s2">","</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">chan</span><span class="o">.</span><span class="n">aliases</span><span class="o">.</span><span class="n">all</span><span class="p">())</span> <span class="ow">or</span> <span class="s2">""</span><span class="p">,</span>
|
|
<span class="p">),</span>
|
|
<span class="s2">"</span><span class="si">%s</span><span class="s2">"</span>
|
|
<span class="o">%</span> <span class="s2">","</span><span class="o">.</span><span class="n">join</span><span class="p">(</span>
|
|
<span class="n">nick</span><span class="o">.</span><span class="n">db_key</span>
|
|
<span class="k">for</span> <span class="n">nick</span> <span class="ow">in</span> <span class="n">make_iter</span><span class="p">(</span><span class="n">nicks</span><span class="p">)</span>
|
|
<span class="k">if</span> <span class="n">nick</span> <span class="ow">and</span> <span class="n">nick</span><span class="o">.</span><span class="n">value</span><span class="p">[</span><span class="mi">3</span><span class="p">]</span><span class="o">.</span><span class="n">lower</span><span class="p">()</span> <span class="o">==</span> <span class="n">clower</span>
|
|
<span class="p">),</span>
|
|
<span class="n">chan</span><span class="o">.</span><span class="n">db</span><span class="o">.</span><span class="n">desc</span><span class="p">,</span>
|
|
<span class="p">]</span>
|
|
<span class="p">)</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">msg</span><span class="p">(</span>
|
|
<span class="s2">"</span><span class="se">\n</span><span class="s2">|wChannel subscriptions|n (use |wchannels|n to list all,"</span>
|
|
<span class="s2">" |waddcom|n/|wdelcom|n to sub/unsub):|n</span><span class="se">\n</span><span class="si">%s</span><span class="s2">"</span> <span class="o">%</span> <span class="n">comtable</span>
|
|
<span class="p">)</span>
|
|
<span class="k">else</span><span class="p">:</span>
|
|
<span class="c1"># full listing (of channels caller is able to listen to)</span>
|
|
<span class="n">comtable</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">"|wsub|n"</span><span class="p">,</span>
|
|
<span class="s2">"|wchannel|n"</span><span class="p">,</span>
|
|
<span class="s2">"|wmy aliases|n"</span><span class="p">,</span>
|
|
<span class="s2">"|wlocks|n"</span><span class="p">,</span>
|
|
<span class="s2">"|wdescription|n"</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="k">for</span> <span class="n">chan</span> <span class="ow">in</span> <span class="n">channels</span><span class="p">:</span>
|
|
<span class="n">clower</span> <span class="o">=</span> <span class="n">chan</span><span class="o">.</span><span class="n">key</span><span class="o">.</span><span class="n">lower</span><span class="p">()</span>
|
|
<span class="n">nicks</span> <span class="o">=</span> <span class="n">caller</span><span class="o">.</span><span class="n">nicks</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">category</span><span class="o">=</span><span class="s2">"channel"</span><span class="p">,</span> <span class="n">return_obj</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
|
|
<span class="n">nicks</span> <span class="o">=</span> <span class="n">nicks</span> <span class="ow">or</span> <span class="p">[]</span>
|
|
<span class="k">if</span> <span class="n">chan</span> <span class="ow">not</span> <span class="ow">in</span> <span class="n">subs</span><span class="p">:</span>
|
|
<span class="n">substatus</span> <span class="o">=</span> <span class="s2">"|rNo|n"</span>
|
|
<span class="k">elif</span> <span class="n">caller</span> <span class="ow">in</span> <span class="n">chan</span><span class="o">.</span><span class="n">mutelist</span><span class="p">:</span>
|
|
<span class="n">substatus</span> <span class="o">=</span> <span class="s2">"|rMuted|n"</span>
|
|
<span class="k">else</span><span class="p">:</span>
|
|
<span class="n">substatus</span> <span class="o">=</span> <span class="s2">"|gYes|n"</span>
|
|
<span class="n">comtable</span><span class="o">.</span><span class="n">add_row</span><span class="p">(</span>
|
|
<span class="o">*</span><span class="p">[</span>
|
|
<span class="n">substatus</span><span class="p">,</span>
|
|
<span class="s2">"</span><span class="si">%s%s</span><span class="s2">"</span>
|
|
<span class="o">%</span> <span class="p">(</span>
|
|
<span class="n">chan</span><span class="o">.</span><span class="n">key</span><span class="p">,</span>
|
|
<span class="n">chan</span><span class="o">.</span><span class="n">aliases</span><span class="o">.</span><span class="n">all</span><span class="p">()</span> <span class="ow">and</span> <span class="s2">"(</span><span class="si">%s</span><span class="s2">)"</span> <span class="o">%</span> <span class="s2">","</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">chan</span><span class="o">.</span><span class="n">aliases</span><span class="o">.</span><span class="n">all</span><span class="p">())</span> <span class="ow">or</span> <span class="s2">""</span><span class="p">,</span>
|
|
<span class="p">),</span>
|
|
<span class="s2">"</span><span class="si">%s</span><span class="s2">"</span>
|
|
<span class="o">%</span> <span class="s2">","</span><span class="o">.</span><span class="n">join</span><span class="p">(</span>
|
|
<span class="n">nick</span><span class="o">.</span><span class="n">db_key</span>
|
|
<span class="k">for</span> <span class="n">nick</span> <span class="ow">in</span> <span class="n">make_iter</span><span class="p">(</span><span class="n">nicks</span><span class="p">)</span>
|
|
<span class="k">if</span> <span class="n">nick</span><span class="o">.</span><span class="n">value</span><span class="p">[</span><span class="mi">3</span><span class="p">]</span><span class="o">.</span><span class="n">lower</span><span class="p">()</span> <span class="o">==</span> <span class="n">clower</span>
|
|
<span class="p">),</span>
|
|
<span class="nb">str</span><span class="p">(</span><span class="n">chan</span><span class="o">.</span><span class="n">locks</span><span class="p">),</span>
|
|
<span class="n">chan</span><span class="o">.</span><span class="n">db</span><span class="o">.</span><span class="n">desc</span><span class="p">,</span>
|
|
<span class="p">]</span>
|
|
<span class="p">)</span>
|
|
<span class="n">comtable</span><span class="o">.</span><span class="n">reformat_column</span><span class="p">(</span><span class="mi">0</span><span class="p">,</span> <span class="n">width</span><span class="o">=</span><span class="mi">9</span><span class="p">)</span>
|
|
<span class="n">comtable</span><span class="o">.</span><span class="n">reformat_column</span><span class="p">(</span><span class="mi">3</span><span class="p">,</span> <span class="n">width</span><span class="o">=</span><span class="mi">14</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">"</span><span class="se">\n</span><span class="s2">|wAvailable channels|n (use |wcomlist|n,|waddcom|n and |wdelcom|n"</span>
|
|
<span class="s2">" to manage subscriptions):</span><span class="se">\n</span><span class="si">%s</span><span class="s2">"</span> <span class="o">%</span> <span class="n">comtable</span>
|
|
<span class="p">)</span></div></div>
|
|
|
|
|
|
<div class="viewcode-block" id="CmdCdestroy"><a class="viewcode-back" href="../../../../api/evennia.commands.default.comms.html#evennia.commands.default.comms.CmdCdestroy">[docs]</a><span class="k">class</span> <span class="nc">CmdCdestroy</span><span class="p">(</span><span class="n">COMMAND_DEFAULT_CLASS</span><span class="p">):</span>
|
|
<span class="sd">"""</span>
|
|
<span class="sd"> destroy a channel you created</span>
|
|
|
|
<span class="sd"> Usage:</span>
|
|
<span class="sd"> cdestroy <channel></span>
|
|
|
|
<span class="sd"> Destroys a channel that you control.</span>
|
|
<span class="sd"> """</span>
|
|
|
|
<span class="n">key</span> <span class="o">=</span> <span class="s2">"cdestroy"</span>
|
|
<span class="n">help_category</span> <span class="o">=</span> <span class="s2">"Comms"</span>
|
|
<span class="n">locks</span> <span class="o">=</span> <span class="s2">"cmd: not pperm(channel_banned)"</span>
|
|
|
|
<span class="c1"># this is used by the COMMAND_DEFAULT_CLASS parent</span>
|
|
<span class="n">account_caller</span> <span class="o">=</span> <span class="kc">True</span>
|
|
|
|
<div class="viewcode-block" id="CmdCdestroy.func"><a class="viewcode-back" href="../../../../api/evennia.commands.default.comms.html#evennia.commands.default.comms.CmdCdestroy.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">"""Destroy objects cleanly."""</span>
|
|
<span class="n">caller</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">caller</span>
|
|
|
|
<span class="k">if</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="bp">self</span><span class="o">.</span><span class="n">msg</span><span class="p">(</span><span class="s2">"Usage: cdestroy <channelname>"</span><span class="p">)</span>
|
|
<span class="k">return</span>
|
|
<span class="n">channel</span> <span class="o">=</span> <span class="n">find_channel</span><span class="p">(</span><span class="n">caller</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">args</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="bp">self</span><span class="o">.</span><span class="n">msg</span><span class="p">(</span><span class="s2">"Could not find channel </span><span class="si">%s</span><span class="s2">."</span> <span class="o">%</span> <span class="bp">self</span><span class="o">.</span><span class="n">args</span><span class="p">)</span>
|
|
<span class="k">return</span>
|
|
<span class="k">if</span> <span class="ow">not</span> <span class="n">channel</span><span class="o">.</span><span class="n">access</span><span class="p">(</span><span class="n">caller</span><span class="p">,</span> <span class="s2">"control"</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">"You are not allowed to do that."</span><span class="p">)</span>
|
|
<span class="k">return</span>
|
|
<span class="n">channel_key</span> <span class="o">=</span> <span class="n">channel</span><span class="o">.</span><span class="n">key</span>
|
|
<span class="n">message</span> <span class="o">=</span> <span class="s2">"</span><span class="si">%s</span><span class="s2"> is being destroyed. Make sure to change your aliases."</span> <span class="o">%</span> <span class="n">channel_key</span>
|
|
<span class="n">msgobj</span> <span class="o">=</span> <span class="n">create</span><span class="o">.</span><span class="n">create_message</span><span class="p">(</span><span class="n">caller</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">channel</span><span class="o">.</span><span class="n">msg</span><span class="p">(</span><span class="n">msgobj</span><span class="p">)</span>
|
|
<span class="n">channel</span><span class="o">.</span><span class="n">delete</span><span class="p">()</span>
|
|
<span class="n">CHANNELHANDLER</span><span class="o">.</span><span class="n">update</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">"Channel '</span><span class="si">%s</span><span class="s2">' was destroyed."</span> <span class="o">%</span> <span class="n">channel_key</span><span class="p">)</span>
|
|
<span class="n">logger</span><span class="o">.</span><span class="n">log_sec</span><span class="p">(</span>
|
|
<span class="s2">"Channel Deleted: </span><span class="si">%s</span><span class="s2"> (Caller: </span><span class="si">%s</span><span class="s2">, IP: </span><span class="si">%s</span><span class="s2">)."</span>
|
|
<span class="o">%</span> <span class="p">(</span><span class="n">channel_key</span><span class="p">,</span> <span class="n">caller</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">session</span><span class="o">.</span><span class="n">address</span><span class="p">)</span>
|
|
<span class="p">)</span></div></div>
|
|
|
|
|
|
<div class="viewcode-block" id="CmdCBoot"><a class="viewcode-back" href="../../../../api/evennia.commands.default.comms.html#evennia.commands.default.comms.CmdCBoot">[docs]</a><span class="k">class</span> <span class="nc">CmdCBoot</span><span class="p">(</span><span class="n">COMMAND_DEFAULT_CLASS</span><span class="p">):</span>
|
|
<span class="sd">"""</span>
|
|
<span class="sd"> kick an account from a channel you control</span>
|
|
|
|
<span class="sd"> Usage:</span>
|
|
<span class="sd"> cboot[/quiet] <channel> = <account> [:reason]</span>
|
|
|
|
<span class="sd"> Switch:</span>
|
|
<span class="sd"> quiet - don't notify the channel</span>
|
|
|
|
<span class="sd"> Kicks an account or object from a channel you control.</span>
|
|
|
|
<span class="sd"> """</span>
|
|
|
|
<span class="n">key</span> <span class="o">=</span> <span class="s2">"cboot"</span>
|
|
<span class="n">switch_options</span> <span class="o">=</span> <span class="p">(</span><span class="s2">"quiet"</span><span class="p">,)</span>
|
|
<span class="n">locks</span> <span class="o">=</span> <span class="s2">"cmd: not pperm(channel_banned)"</span>
|
|
<span class="n">help_category</span> <span class="o">=</span> <span class="s2">"Comms"</span>
|
|
|
|
<span class="c1"># this is used by the COMMAND_DEFAULT_CLASS parent</span>
|
|
<span class="n">account_caller</span> <span class="o">=</span> <span class="kc">True</span>
|
|
|
|
<div class="viewcode-block" id="CmdCBoot.func"><a class="viewcode-back" href="../../../../api/evennia.commands.default.comms.html#evennia.commands.default.comms.CmdCBoot.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">"""implement the function"""</span>
|
|
|
|
<span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">args</span> <span class="ow">or</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">rhs</span><span class="p">:</span>
|
|
<span class="n">string</span> <span class="o">=</span> <span class="s2">"Usage: cboot[/quiet] <channel> = <account> [:reason]"</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">msg</span><span class="p">(</span><span class="n">string</span><span class="p">)</span>
|
|
<span class="k">return</span>
|
|
|
|
<span class="n">channel</span> <span class="o">=</span> <span class="n">find_channel</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">caller</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">lhs</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">return</span>
|
|
<span class="n">reason</span> <span class="o">=</span> <span class="s2">""</span>
|
|
<span class="k">if</span> <span class="s2">":"</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">rhs</span><span class="p">:</span>
|
|
<span class="n">accountname</span><span class="p">,</span> <span class="n">reason</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">rhs</span><span class="o">.</span><span class="n">rsplit</span><span class="p">(</span><span class="s2">":"</span><span class="p">,</span> <span class="mi">1</span><span class="p">)</span>
|
|
<span class="n">searchstring</span> <span class="o">=</span> <span class="n">accountname</span><span class="o">.</span><span class="n">lstrip</span><span class="p">(</span><span class="s2">"*"</span><span class="p">)</span>
|
|
<span class="k">else</span><span class="p">:</span>
|
|
<span class="n">searchstring</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">rhs</span><span class="o">.</span><span class="n">lstrip</span><span class="p">(</span><span class="s2">"*"</span><span class="p">)</span>
|
|
<span class="n">account</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">caller</span><span class="o">.</span><span class="n">search</span><span class="p">(</span><span class="n">searchstring</span><span class="p">,</span> <span class="n">account</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
|
|
<span class="k">if</span> <span class="ow">not</span> <span class="n">account</span><span class="p">:</span>
|
|
<span class="k">return</span>
|
|
<span class="k">if</span> <span class="n">reason</span><span class="p">:</span>
|
|
<span class="n">reason</span> <span class="o">=</span> <span class="s2">" (reason: </span><span class="si">%s</span><span class="s2">)"</span> <span class="o">%</span> <span class="n">reason</span>
|
|
<span class="k">if</span> <span class="ow">not</span> <span class="n">channel</span><span class="o">.</span><span class="n">access</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">caller</span><span class="p">,</span> <span class="s2">"control"</span><span class="p">):</span>
|
|
<span class="n">string</span> <span class="o">=</span> <span class="s2">"You don't control this channel."</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">msg</span><span class="p">(</span><span class="n">string</span><span class="p">)</span>
|
|
<span class="k">return</span>
|
|
<span class="k">if</span> <span class="ow">not</span> <span class="n">channel</span><span class="o">.</span><span class="n">subscriptions</span><span class="o">.</span><span class="n">has</span><span class="p">(</span><span class="n">account</span><span class="p">):</span>
|
|
<span class="n">string</span> <span class="o">=</span> <span class="s2">"Account </span><span class="si">%s</span><span class="s2"> is not connected to channel </span><span class="si">%s</span><span class="s2">."</span> <span class="o">%</span> <span class="p">(</span><span class="n">account</span><span class="o">.</span><span class="n">key</span><span class="p">,</span> <span class="n">channel</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">msg</span><span class="p">(</span><span class="n">string</span><span class="p">)</span>
|
|
<span class="k">return</span>
|
|
<span class="k">if</span> <span class="s2">"quiet"</span> <span class="ow">not</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">string</span> <span class="o">=</span> <span class="s2">"</span><span class="si">%s</span><span class="s2"> boots </span><span class="si">%s</span><span class="s2"> from channel.</span><span class="si">%s</span><span class="s2">"</span> <span class="o">%</span> <span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">caller</span><span class="p">,</span> <span class="n">account</span><span class="o">.</span><span class="n">key</span><span class="p">,</span> <span class="n">reason</span><span class="p">)</span>
|
|
<span class="n">channel</span><span class="o">.</span><span class="n">msg</span><span class="p">(</span><span class="n">string</span><span class="p">)</span>
|
|
<span class="c1"># find all account's nicks linked to this channel and delete them</span>
|
|
<span class="k">for</span> <span class="n">nick</span> <span class="ow">in</span> <span class="p">[</span>
|
|
<span class="n">nick</span>
|
|
<span class="k">for</span> <span class="n">nick</span> <span class="ow">in</span> <span class="n">account</span><span class="o">.</span><span class="n">character</span><span class="o">.</span><span class="n">nicks</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">category</span><span class="o">=</span><span class="s2">"channel"</span><span class="p">)</span> <span class="ow">or</span> <span class="p">[]</span>
|
|
<span class="k">if</span> <span class="n">nick</span><span class="o">.</span><span class="n">value</span><span class="p">[</span><span class="mi">3</span><span class="p">]</span><span class="o">.</span><span class="n">lower</span><span class="p">()</span> <span class="o">==</span> <span class="n">channel</span><span class="o">.</span><span class="n">key</span>
|
|
<span class="p">]:</span>
|
|
<span class="n">nick</span><span class="o">.</span><span class="n">delete</span><span class="p">()</span>
|
|
<span class="c1"># disconnect account</span>
|
|
<span class="n">channel</span><span class="o">.</span><span class="n">disconnect</span><span class="p">(</span><span class="n">account</span><span class="p">)</span>
|
|
<span class="n">CHANNELHANDLER</span><span class="o">.</span><span class="n">update</span><span class="p">()</span>
|
|
<span class="n">logger</span><span class="o">.</span><span class="n">log_sec</span><span class="p">(</span>
|
|
<span class="s2">"Channel Boot: </span><span class="si">%s</span><span class="s2"> (Channel: </span><span class="si">%s</span><span class="s2">, Reason: </span><span class="si">%s</span><span class="s2">, Caller: </span><span class="si">%s</span><span class="s2">, IP: </span><span class="si">%s</span><span class="s2">)."</span>
|
|
<span class="o">%</span> <span class="p">(</span><span class="n">account</span><span class="p">,</span> <span class="n">channel</span><span class="p">,</span> <span class="n">reason</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">caller</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">session</span><span class="o">.</span><span class="n">address</span><span class="p">)</span>
|
|
<span class="p">)</span></div></div>
|
|
|
|
|
|
<div class="viewcode-block" id="CmdCemit"><a class="viewcode-back" href="../../../../api/evennia.commands.default.comms.html#evennia.commands.default.comms.CmdCemit">[docs]</a><span class="k">class</span> <span class="nc">CmdCemit</span><span class="p">(</span><span class="n">COMMAND_DEFAULT_CLASS</span><span class="p">):</span>
|
|
<span class="sd">"""</span>
|
|
<span class="sd"> send an admin message to a channel you control</span>
|
|
|
|
<span class="sd"> Usage:</span>
|
|
<span class="sd"> cemit[/switches] <channel> = <message></span>
|
|
|
|
<span class="sd"> Switches:</span>
|
|
<span class="sd"> sendername - attach the sender's name before the message</span>
|
|
<span class="sd"> quiet - don't echo the message back to sender</span>
|
|
|
|
<span class="sd"> Allows the user to broadcast a message over a channel as long as</span>
|
|
<span class="sd"> they control it. It does not show the user's name unless they</span>
|
|
<span class="sd"> provide the /sendername switch.</span>
|
|
|
|
<span class="sd"> """</span>
|
|
|
|
<span class="n">key</span> <span class="o">=</span> <span class="s2">"cemit"</span>
|
|
<span class="n">aliases</span> <span class="o">=</span> <span class="p">[</span><span class="s2">"cmsg"</span><span class="p">]</span>
|
|
<span class="n">switch_options</span> <span class="o">=</span> <span class="p">(</span><span class="s2">"sendername"</span><span class="p">,</span> <span class="s2">"quiet"</span><span class="p">)</span>
|
|
<span class="n">locks</span> <span class="o">=</span> <span class="s2">"cmd: not pperm(channel_banned) and pperm(Player)"</span>
|
|
<span class="n">help_category</span> <span class="o">=</span> <span class="s2">"Comms"</span>
|
|
|
|
<span class="c1"># this is used by the COMMAND_DEFAULT_CLASS parent</span>
|
|
<span class="n">account_caller</span> <span class="o">=</span> <span class="kc">True</span>
|
|
|
|
<div class="viewcode-block" id="CmdCemit.func"><a class="viewcode-back" href="../../../../api/evennia.commands.default.comms.html#evennia.commands.default.comms.CmdCemit.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">"""Implement function"""</span>
|
|
|
|
<span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">args</span> <span class="ow">or</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">rhs</span><span class="p">:</span>
|
|
<span class="n">string</span> <span class="o">=</span> <span class="s2">"Usage: cemit[/switches] <channel> = <message>"</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">msg</span><span class="p">(</span><span class="n">string</span><span class="p">)</span>
|
|
<span class="k">return</span>
|
|
<span class="n">channel</span> <span class="o">=</span> <span class="n">find_channel</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">caller</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">lhs</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">return</span>
|
|
<span class="k">if</span> <span class="ow">not</span> <span class="n">channel</span><span class="o">.</span><span class="n">access</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">caller</span><span class="p">,</span> <span class="s2">"control"</span><span class="p">):</span>
|
|
<span class="n">string</span> <span class="o">=</span> <span class="s2">"You don't control this channel."</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">msg</span><span class="p">(</span><span class="n">string</span><span class="p">)</span>
|
|
<span class="k">return</span>
|
|
<span class="n">message</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="s2">"sendername"</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">message</span> <span class="o">=</span> <span class="s2">"</span><span class="si">%s</span><span class="s2">: </span><span class="si">%s</span><span class="s2">"</span> <span class="o">%</span> <span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">caller</span><span class="o">.</span><span class="n">key</span><span class="p">,</span> <span class="n">message</span><span class="p">)</span>
|
|
<span class="n">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="k">if</span> <span class="s2">"quiet"</span> <span class="ow">not</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">string</span> <span class="o">=</span> <span class="s2">"Sent to channel </span><span class="si">%s</span><span class="s2">: </span><span class="si">%s</span><span class="s2">"</span> <span class="o">%</span> <span class="p">(</span><span class="n">channel</span><span class="o">.</span><span class="n">key</span><span class="p">,</span> <span class="n">message</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">string</span><span class="p">)</span></div></div>
|
|
|
|
|
|
<div class="viewcode-block" id="CmdCWho"><a class="viewcode-back" href="../../../../api/evennia.commands.default.comms.html#evennia.commands.default.comms.CmdCWho">[docs]</a><span class="k">class</span> <span class="nc">CmdCWho</span><span class="p">(</span><span class="n">COMMAND_DEFAULT_CLASS</span><span class="p">):</span>
|
|
<span class="sd">"""</span>
|
|
<span class="sd"> show who is listening to a channel</span>
|
|
|
|
<span class="sd"> Usage:</span>
|
|
<span class="sd"> cwho <channel></span>
|
|
|
|
<span class="sd"> List who is connected to a given channel you have access to.</span>
|
|
<span class="sd"> """</span>
|
|
|
|
<span class="n">key</span> <span class="o">=</span> <span class="s2">"cwho"</span>
|
|
<span class="n">locks</span> <span class="o">=</span> <span class="s2">"cmd: not pperm(channel_banned)"</span>
|
|
<span class="n">help_category</span> <span class="o">=</span> <span class="s2">"Comms"</span>
|
|
|
|
<span class="c1"># this is used by the COMMAND_DEFAULT_CLASS parent</span>
|
|
<span class="n">account_caller</span> <span class="o">=</span> <span class="kc">True</span>
|
|
|
|
<div class="viewcode-block" id="CmdCWho.func"><a class="viewcode-back" href="../../../../api/evennia.commands.default.comms.html#evennia.commands.default.comms.CmdCWho.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">"""implement function"""</span>
|
|
|
|
<span class="k">if</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="n">string</span> <span class="o">=</span> <span class="s2">"Usage: cwho <channel>"</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">msg</span><span class="p">(</span><span class="n">string</span><span class="p">)</span>
|
|
<span class="k">return</span>
|
|
|
|
<span class="n">channel</span> <span class="o">=</span> <span class="n">find_channel</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">caller</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">lhs</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">return</span>
|
|
<span class="k">if</span> <span class="ow">not</span> <span class="n">channel</span><span class="o">.</span><span class="n">access</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">caller</span><span class="p">,</span> <span class="s2">"listen"</span><span class="p">):</span>
|
|
<span class="n">string</span> <span class="o">=</span> <span class="s2">"You can't access this channel."</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">msg</span><span class="p">(</span><span class="n">string</span><span class="p">)</span>
|
|
<span class="k">return</span>
|
|
<span class="n">string</span> <span class="o">=</span> <span class="s2">"</span><span class="se">\n</span><span class="s2">|CChannel subscriptions|n"</span>
|
|
<span class="n">string</span> <span class="o">+=</span> <span class="s2">"</span><span class="se">\n</span><span class="s2">|w</span><span class="si">%s</span><span class="s2">:|n</span><span class="se">\n</span><span class="s2"> </span><span class="si">%s</span><span class="s2">"</span> <span class="o">%</span> <span class="p">(</span><span class="n">channel</span><span class="o">.</span><span class="n">key</span><span class="p">,</span> <span class="n">channel</span><span class="o">.</span><span class="n">wholist</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">string</span><span class="o">.</span><span class="n">strip</span><span class="p">())</span></div></div>
|
|
|
|
|
|
<div class="viewcode-block" id="CmdChannelCreate"><a class="viewcode-back" href="../../../../api/evennia.commands.default.comms.html#evennia.commands.default.comms.CmdChannelCreate">[docs]</a><span class="k">class</span> <span class="nc">CmdChannelCreate</span><span class="p">(</span><span class="n">COMMAND_DEFAULT_CLASS</span><span class="p">):</span>
|
|
<span class="sd">"""</span>
|
|
<span class="sd"> create a new channel</span>
|
|
|
|
<span class="sd"> Usage:</span>
|
|
<span class="sd"> ccreate <new channel>[;alias;alias...] = description</span>
|
|
|
|
<span class="sd"> Creates a new channel owned by you.</span>
|
|
<span class="sd"> """</span>
|
|
|
|
<span class="n">key</span> <span class="o">=</span> <span class="s2">"ccreate"</span>
|
|
<span class="n">aliases</span> <span class="o">=</span> <span class="s2">"channelcreate"</span>
|
|
<span class="n">locks</span> <span class="o">=</span> <span class="s2">"cmd:not pperm(channel_banned) and pperm(Player)"</span>
|
|
<span class="n">help_category</span> <span class="o">=</span> <span class="s2">"Comms"</span>
|
|
|
|
<span class="c1"># this is used by the COMMAND_DEFAULT_CLASS parent</span>
|
|
<span class="n">account_caller</span> <span class="o">=</span> <span class="kc">True</span>
|
|
|
|
<div class="viewcode-block" id="CmdChannelCreate.func"><a class="viewcode-back" href="../../../../api/evennia.commands.default.comms.html#evennia.commands.default.comms.CmdChannelCreate.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">"""Implement the command"""</span>
|
|
|
|
<span class="n">caller</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">caller</span>
|
|
|
|
<span class="k">if</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="bp">self</span><span class="o">.</span><span class="n">msg</span><span class="p">(</span><span class="s2">"Usage ccreate <channelname>[;alias;alias..] = description"</span><span class="p">)</span>
|
|
<span class="k">return</span>
|
|
|
|
<span class="n">description</span> <span class="o">=</span> <span class="s2">""</span>
|
|
|
|
<span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">rhs</span><span class="p">:</span>
|
|
<span class="n">description</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">rhs</span>
|
|
<span class="n">lhs</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">lhs</span>
|
|
<span class="n">channame</span> <span class="o">=</span> <span class="n">lhs</span>
|
|
<span class="n">aliases</span> <span class="o">=</span> <span class="kc">None</span>
|
|
<span class="k">if</span> <span class="s2">";"</span> <span class="ow">in</span> <span class="n">lhs</span><span class="p">:</span>
|
|
<span class="n">channame</span><span class="p">,</span> <span class="n">aliases</span> <span class="o">=</span> <span class="n">lhs</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s2">";"</span><span class="p">,</span> <span class="mi">1</span><span class="p">)</span>
|
|
<span class="n">aliases</span> <span class="o">=</span> <span class="p">[</span><span class="n">alias</span><span class="o">.</span><span class="n">strip</span><span class="p">()</span><span class="o">.</span><span class="n">lower</span><span class="p">()</span> <span class="k">for</span> <span class="n">alias</span> <span class="ow">in</span> <span class="n">aliases</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s2">";"</span><span class="p">)]</span>
|
|
<span class="n">channel</span> <span class="o">=</span> <span class="n">CHANNEL_DEFAULT_TYPECLASS</span><span class="o">.</span><span class="n">objects</span><span class="o">.</span><span class="n">channel_search</span><span class="p">(</span><span class="n">channame</span><span class="p">)</span>
|
|
<span class="k">if</span> <span class="n">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="s2">"A channel with that name already exists."</span><span class="p">)</span>
|
|
<span class="k">return</span>
|
|
<span class="c1"># Create and set the channel up</span>
|
|
<span class="n">lockstring</span> <span class="o">=</span> <span class="s2">"send:all();listen:all();control:id(</span><span class="si">%s</span><span class="s2">)"</span> <span class="o">%</span> <span class="n">caller</span><span class="o">.</span><span class="n">id</span>
|
|
<span class="n">new_chan</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">channame</span><span class="o">.</span><span class="n">strip</span><span class="p">(),</span> <span class="n">aliases</span><span class="p">,</span> <span class="n">description</span><span class="p">,</span> <span class="n">locks</span><span class="o">=</span><span class="n">lockstring</span><span class="p">)</span>
|
|
<span class="n">new_chan</span><span class="o">.</span><span class="n">connect</span><span class="p">(</span><span class="n">caller</span><span class="p">)</span>
|
|
<span class="n">CHANNELHANDLER</span><span class="o">.</span><span class="n">update</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">"Created channel </span><span class="si">%s</span><span class="s2"> and connected to it."</span> <span class="o">%</span> <span class="n">new_chan</span><span class="o">.</span><span class="n">key</span><span class="p">)</span></div></div>
|
|
|
|
|
|
<div class="viewcode-block" id="CmdClock"><a class="viewcode-back" href="../../../../api/evennia.commands.default.comms.html#evennia.commands.default.comms.CmdClock">[docs]</a><span class="k">class</span> <span class="nc">CmdClock</span><span class="p">(</span><span class="n">COMMAND_DEFAULT_CLASS</span><span class="p">):</span>
|
|
<span class="sd">"""</span>
|
|
<span class="sd"> change channel locks of a channel you control</span>
|
|
|
|
<span class="sd"> Usage:</span>
|
|
<span class="sd"> clock <channel> [= <lockstring>]</span>
|
|
|
|
<span class="sd"> Changes the lock access restrictions of a channel. If no</span>
|
|
<span class="sd"> lockstring was given, view the current lock definitions.</span>
|
|
<span class="sd"> """</span>
|
|
|
|
<span class="n">key</span> <span class="o">=</span> <span class="s2">"clock"</span>
|
|
<span class="n">locks</span> <span class="o">=</span> <span class="s2">"cmd:not pperm(channel_banned)"</span>
|
|
<span class="n">aliases</span> <span class="o">=</span> <span class="p">[</span><span class="s2">"clock"</span><span class="p">]</span>
|
|
<span class="n">help_category</span> <span class="o">=</span> <span class="s2">"Comms"</span>
|
|
|
|
<span class="c1"># this is used by the COMMAND_DEFAULT_CLASS parent</span>
|
|
<span class="n">account_caller</span> <span class="o">=</span> <span class="kc">True</span>
|
|
|
|
<div class="viewcode-block" id="CmdClock.func"><a class="viewcode-back" href="../../../../api/evennia.commands.default.comms.html#evennia.commands.default.comms.CmdClock.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">"""run the function"""</span>
|
|
|
|
<span class="k">if</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="n">string</span> <span class="o">=</span> <span class="s2">"Usage: clock channel [= lockstring]"</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">msg</span><span class="p">(</span><span class="n">string</span><span class="p">)</span>
|
|
<span class="k">return</span>
|
|
|
|
<span class="n">channel</span> <span class="o">=</span> <span class="n">find_channel</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">caller</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">lhs</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">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="p">:</span>
|
|
<span class="c1"># no =, so just view the current locks</span>
|
|
<span class="n">string</span> <span class="o">=</span> <span class="s2">"Current locks on </span><span class="si">%s</span><span class="s2">:"</span> <span class="o">%</span> <span class="n">channel</span><span class="o">.</span><span class="n">key</span>
|
|
<span class="n">string</span> <span class="o">=</span> <span class="s2">"</span><span class="si">%s</span><span class="se">\n</span><span class="s2"> </span><span class="si">%s</span><span class="s2">"</span> <span class="o">%</span> <span class="p">(</span><span class="n">string</span><span class="p">,</span> <span class="n">channel</span><span class="o">.</span><span class="n">locks</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">string</span><span class="p">)</span>
|
|
<span class="k">return</span>
|
|
<span class="c1"># we want to add/change a lock.</span>
|
|
<span class="k">if</span> <span class="ow">not</span> <span class="n">channel</span><span class="o">.</span><span class="n">access</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">caller</span><span class="p">,</span> <span class="s2">"control"</span><span class="p">):</span>
|
|
<span class="n">string</span> <span class="o">=</span> <span class="s2">"You don't control this channel."</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">msg</span><span class="p">(</span><span class="n">string</span><span class="p">)</span>
|
|
<span class="k">return</span>
|
|
<span class="c1"># Try to add the lock</span>
|
|
<span class="k">try</span><span class="p">:</span>
|
|
<span class="n">channel</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="bp">self</span><span class="o">.</span><span class="n">rhs</span><span class="p">)</span>
|
|
<span class="k">except</span> <span class="n">LockException</span> <span class="k">as</span> <span class="n">err</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">err</span><span class="p">)</span>
|
|
<span class="k">return</span>
|
|
<span class="n">string</span> <span class="o">=</span> <span class="s2">"Lock(s) applied. "</span>
|
|
<span class="n">string</span> <span class="o">+=</span> <span class="s2">"Current locks on </span><span class="si">%s</span><span class="s2">:"</span> <span class="o">%</span> <span class="n">channel</span><span class="o">.</span><span class="n">key</span>
|
|
<span class="n">string</span> <span class="o">=</span> <span class="s2">"</span><span class="si">%s</span><span class="se">\n</span><span class="s2"> </span><span class="si">%s</span><span class="s2">"</span> <span class="o">%</span> <span class="p">(</span><span class="n">string</span><span class="p">,</span> <span class="n">channel</span><span class="o">.</span><span class="n">locks</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">string</span><span class="p">)</span></div></div>
|
|
|
|
|
|
<div class="viewcode-block" id="CmdCdesc"><a class="viewcode-back" href="../../../../api/evennia.commands.default.comms.html#evennia.commands.default.comms.CmdCdesc">[docs]</a><span class="k">class</span> <span class="nc">CmdCdesc</span><span class="p">(</span><span class="n">COMMAND_DEFAULT_CLASS</span><span class="p">):</span>
|
|
<span class="sd">"""</span>
|
|
<span class="sd"> describe a channel you control</span>
|
|
|
|
<span class="sd"> Usage:</span>
|
|
<span class="sd"> cdesc <channel> = <description></span>
|
|
|
|
<span class="sd"> Changes the description of the channel as shown in</span>
|
|
<span class="sd"> channel lists.</span>
|
|
<span class="sd"> """</span>
|
|
|
|
<span class="n">key</span> <span class="o">=</span> <span class="s2">"cdesc"</span>
|
|
<span class="n">locks</span> <span class="o">=</span> <span class="s2">"cmd:not pperm(channel_banned)"</span>
|
|
<span class="n">help_category</span> <span class="o">=</span> <span class="s2">"Comms"</span>
|
|
|
|
<span class="c1"># this is used by the COMMAND_DEFAULT_CLASS parent</span>
|
|
<span class="n">account_caller</span> <span class="o">=</span> <span class="kc">True</span>
|
|
|
|
<div class="viewcode-block" id="CmdCdesc.func"><a class="viewcode-back" href="../../../../api/evennia.commands.default.comms.html#evennia.commands.default.comms.CmdCdesc.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">"""Implement command"""</span>
|
|
|
|
<span class="n">caller</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">caller</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="p">:</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">msg</span><span class="p">(</span><span class="s2">"Usage: cdesc <channel> = <description>"</span><span class="p">)</span>
|
|
<span class="k">return</span>
|
|
<span class="n">channel</span> <span class="o">=</span> <span class="n">find_channel</span><span class="p">(</span><span class="n">caller</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">lhs</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="bp">self</span><span class="o">.</span><span class="n">msg</span><span class="p">(</span><span class="s2">"Channel '</span><span class="si">%s</span><span class="s2">' not found."</span> <span class="o">%</span> <span class="bp">self</span><span class="o">.</span><span class="n">lhs</span><span class="p">)</span>
|
|
<span class="k">return</span>
|
|
<span class="c1"># check permissions</span>
|
|
<span class="k">if</span> <span class="ow">not</span> <span class="n">channel</span><span class="o">.</span><span class="n">access</span><span class="p">(</span><span class="n">caller</span><span class="p">,</span> <span class="s2">"control"</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">"You cannot admin this channel."</span><span class="p">)</span>
|
|
<span class="k">return</span>
|
|
<span class="c1"># set the description</span>
|
|
<span class="n">channel</span><span class="o">.</span><span class="n">db</span><span class="o">.</span><span class="n">desc</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">rhs</span>
|
|
<span class="n">channel</span><span class="o">.</span><span class="n">save</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">"Description of channel '</span><span class="si">%s</span><span class="s2">' set to '</span><span class="si">%s</span><span class="s2">'."</span> <span class="o">%</span> <span class="p">(</span><span class="n">channel</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">rhs</span><span class="p">))</span></div></div>
|
|
|
|
|
|
<div class="viewcode-block" id="CmdPage"><a class="viewcode-back" href="../../../../api/evennia.commands.default.comms.html#evennia.commands.default.comms.CmdPage">[docs]</a><span class="k">class</span> <span class="nc">CmdPage</span><span class="p">(</span><span class="n">COMMAND_DEFAULT_CLASS</span><span class="p">):</span>
|
|
<span class="sd">"""</span>
|
|
<span class="sd"> send a private message to another account</span>
|
|
|
|
<span class="sd"> Usage:</span>
|
|
<span class="sd"> page[/switches] [<account>,<account>,... = <message>]</span>
|
|
<span class="sd"> tell ''</span>
|
|
<span class="sd"> page <number></span>
|
|
|
|
<span class="sd"> Switch:</span>
|
|
<span class="sd"> last - shows who you last messaged</span>
|
|
<span class="sd"> list - show your last <number> of tells/pages (default)</span>
|
|
|
|
<span class="sd"> Send a message to target user (if online). If no</span>
|
|
<span class="sd"> argument is given, you will get a list of your latest messages.</span>
|
|
<span class="sd"> """</span>
|
|
|
|
<span class="n">key</span> <span class="o">=</span> <span class="s2">"page"</span>
|
|
<span class="n">aliases</span> <span class="o">=</span> <span class="p">[</span><span class="s2">"tell"</span><span class="p">]</span>
|
|
<span class="n">switch_options</span> <span class="o">=</span> <span class="p">(</span><span class="s2">"last"</span><span class="p">,</span> <span class="s2">"list"</span><span class="p">)</span>
|
|
<span class="n">locks</span> <span class="o">=</span> <span class="s2">"cmd:not pperm(page_banned)"</span>
|
|
<span class="n">help_category</span> <span class="o">=</span> <span class="s2">"Comms"</span>
|
|
|
|
<span class="c1"># this is used by the COMMAND_DEFAULT_CLASS parent</span>
|
|
<span class="n">account_caller</span> <span class="o">=</span> <span class="kc">True</span>
|
|
|
|
<div class="viewcode-block" id="CmdPage.func"><a class="viewcode-back" href="../../../../api/evennia.commands.default.comms.html#evennia.commands.default.comms.CmdPage.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">"""Implement function using the Msg methods"""</span>
|
|
|
|
<span class="c1"># Since account_caller is set above, this will be an Account.</span>
|
|
<span class="n">caller</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">caller</span>
|
|
|
|
<span class="c1"># get the messages we've sent (not to channels)</span>
|
|
<span class="n">pages_we_sent</span> <span class="o">=</span> <span class="n">Msg</span><span class="o">.</span><span class="n">objects</span><span class="o">.</span><span class="n">get_messages_by_sender</span><span class="p">(</span><span class="n">caller</span><span class="p">,</span> <span class="n">exclude_channel_messages</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
|
|
<span class="c1"># get last messages we've got</span>
|
|
<span class="n">pages_we_got</span> <span class="o">=</span> <span class="n">Msg</span><span class="o">.</span><span class="n">objects</span><span class="o">.</span><span class="n">get_messages_by_receiver</span><span class="p">(</span><span class="n">caller</span><span class="p">)</span>
|
|
|
|
<span class="k">if</span> <span class="s2">"last"</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">pages_we_sent</span><span class="p">:</span>
|
|
<span class="n">recv</span> <span class="o">=</span> <span class="s2">","</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">obj</span><span class="o">.</span><span class="n">key</span> <span class="k">for</span> <span class="n">obj</span> <span class="ow">in</span> <span class="n">pages_we_sent</span><span class="p">[</span><span class="o">-</span><span class="mi">1</span><span class="p">]</span><span class="o">.</span><span class="n">receivers</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">"You last paged |c</span><span class="si">%s</span><span class="s2">|n:</span><span class="si">%s</span><span class="s2">"</span> <span class="o">%</span> <span class="p">(</span><span class="n">recv</span><span class="p">,</span> <span class="n">pages_we_sent</span><span class="p">[</span><span class="o">-</span><span class="mi">1</span><span class="p">]</span><span class="o">.</span><span class="n">message</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">"You haven't paged anyone yet."</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">args</span> <span class="ow">or</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">rhs</span><span class="p">:</span>
|
|
<span class="n">pages</span> <span class="o">=</span> <span class="n">pages_we_sent</span> <span class="o">+</span> <span class="n">pages_we_got</span>
|
|
<span class="n">pages</span> <span class="o">=</span> <span class="nb">sorted</span><span class="p">(</span><span class="n">pages</span><span class="p">,</span> <span class="n">key</span><span class="o">=</span><span class="k">lambda</span> <span class="n">page</span><span class="p">:</span> <span class="n">page</span><span class="o">.</span><span class="n">date_created</span><span class="p">)</span>
|
|
|
|
<span class="n">number</span> <span class="o">=</span> <span class="mi">5</span>
|
|
<span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">args</span><span class="p">:</span>
|
|
<span class="k">try</span><span class="p">:</span>
|
|
<span class="n">number</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="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">"Usage: tell [<account> = msg]"</span><span class="p">)</span>
|
|
<span class="k">return</span>
|
|
|
|
<span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">pages</span><span class="p">)</span> <span class="o">></span> <span class="n">number</span><span class="p">:</span>
|
|
<span class="n">lastpages</span> <span class="o">=</span> <span class="n">pages</span><span class="p">[</span><span class="o">-</span><span class="n">number</span><span class="p">:]</span>
|
|
<span class="k">else</span><span class="p">:</span>
|
|
<span class="n">lastpages</span> <span class="o">=</span> <span class="n">pages</span>
|
|
<span class="n">to_template</span> <span class="o">=</span> <span class="s2">"|w</span><span class="si">{date}{clr}</span><span class="s2"> </span><span class="si">{sender}</span><span class="s2">|nto</span><span class="si">{clr}{receiver}</span><span class="s2">|n:> </span><span class="si">{message}</span><span class="s2">"</span>
|
|
<span class="n">from_template</span> <span class="o">=</span> <span class="s2">"|w</span><span class="si">{date}{clr}</span><span class="s2"> </span><span class="si">{receiver}</span><span class="s2">|nfrom</span><span class="si">{clr}{sender}</span><span class="s2">|n:< </span><span class="si">{message}</span><span class="s2">"</span>
|
|
<span class="n">listing</span> <span class="o">=</span> <span class="p">[]</span>
|
|
<span class="n">prev_selfsend</span> <span class="o">=</span> <span class="kc">False</span>
|
|
<span class="k">for</span> <span class="n">page</span> <span class="ow">in</span> <span class="n">lastpages</span><span class="p">:</span>
|
|
<span class="n">multi_send</span> <span class="o">=</span> <span class="nb">len</span><span class="p">(</span><span class="n">page</span><span class="o">.</span><span class="n">senders</span><span class="p">)</span> <span class="o">></span> <span class="mi">1</span>
|
|
<span class="n">multi_recv</span> <span class="o">=</span> <span class="nb">len</span><span class="p">(</span><span class="n">page</span><span class="o">.</span><span class="n">receivers</span><span class="p">)</span> <span class="o">></span> <span class="mi">1</span>
|
|
<span class="n">sending</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">caller</span> <span class="ow">in</span> <span class="n">page</span><span class="o">.</span><span class="n">senders</span>
|
|
<span class="c1"># self-messages all look like sends, so we assume they always</span>
|
|
<span class="c1"># come in close pairs and treat the second of the pair as the recv.</span>
|
|
<span class="n">selfsend</span> <span class="o">=</span> <span class="n">sending</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">caller</span> <span class="ow">in</span> <span class="n">page</span><span class="o">.</span><span class="n">receivers</span>
|
|
<span class="k">if</span> <span class="n">selfsend</span><span class="p">:</span>
|
|
<span class="k">if</span> <span class="n">prev_selfsend</span><span class="p">:</span>
|
|
<span class="c1"># this is actually a receive of a self-message</span>
|
|
<span class="n">sending</span> <span class="o">=</span> <span class="kc">False</span>
|
|
<span class="n">prev_selfsend</span> <span class="o">=</span> <span class="kc">False</span>
|
|
<span class="k">else</span><span class="p">:</span>
|
|
<span class="n">prev_selfsend</span> <span class="o">=</span> <span class="kc">True</span>
|
|
|
|
<span class="n">clr</span> <span class="o">=</span> <span class="s2">"|c"</span> <span class="k">if</span> <span class="n">sending</span> <span class="k">else</span> <span class="s2">"|g"</span>
|
|
|
|
<span class="n">sender</span> <span class="o">=</span> <span class="n">f</span><span class="s2">"|n,</span><span class="si">{clr}</span><span class="s2">"</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">obj</span><span class="o">.</span><span class="n">key</span> <span class="k">for</span> <span class="n">obj</span> <span class="ow">in</span> <span class="n">page</span><span class="o">.</span><span class="n">senders</span><span class="p">)</span>
|
|
<span class="n">receiver</span> <span class="o">=</span> <span class="n">f</span><span class="s2">"|n,</span><span class="si">{clr}</span><span class="s2">"</span><span class="o">.</span><span class="n">join</span><span class="p">([</span><span class="n">obj</span><span class="o">.</span><span class="n">name</span> <span class="k">for</span> <span class="n">obj</span> <span class="ow">in</span> <span class="n">page</span><span class="o">.</span><span class="n">receivers</span><span class="p">])</span>
|
|
<span class="k">if</span> <span class="n">sending</span><span class="p">:</span>
|
|
<span class="n">template</span> <span class="o">=</span> <span class="n">to_template</span>
|
|
<span class="n">sender</span> <span class="o">=</span> <span class="n">f</span><span class="s2">"</span><span class="si">{sender}</span><span class="s2"> "</span> <span class="k">if</span> <span class="n">multi_send</span> <span class="k">else</span> <span class="s2">""</span>
|
|
<span class="n">receiver</span> <span class="o">=</span> <span class="n">f</span><span class="s2">" </span><span class="si">{receiver}</span><span class="s2">"</span> <span class="k">if</span> <span class="n">multi_recv</span> <span class="k">else</span> <span class="n">f</span><span class="s2">" </span><span class="si">{receiver}</span><span class="s2">"</span>
|
|
<span class="k">else</span><span class="p">:</span>
|
|
<span class="n">template</span> <span class="o">=</span> <span class="n">from_template</span>
|
|
<span class="n">receiver</span> <span class="o">=</span> <span class="n">f</span><span class="s2">"</span><span class="si">{receiver}</span><span class="s2"> "</span> <span class="k">if</span> <span class="n">multi_recv</span> <span class="k">else</span> <span class="s2">""</span>
|
|
<span class="n">sender</span> <span class="o">=</span> <span class="n">f</span><span class="s2">" </span><span class="si">{sender}</span><span class="s2"> "</span> <span class="k">if</span> <span class="n">multi_send</span> <span class="k">else</span> <span class="n">f</span><span class="s2">" </span><span class="si">{sender}</span><span class="s2">"</span>
|
|
|
|
<span class="n">listing</span><span class="o">.</span><span class="n">append</span><span class="p">(</span>
|
|
<span class="n">template</span><span class="o">.</span><span class="n">format</span><span class="p">(</span>
|
|
<span class="n">date</span><span class="o">=</span><span class="n">utils</span><span class="o">.</span><span class="n">datetime_format</span><span class="p">(</span><span class="n">page</span><span class="o">.</span><span class="n">date_created</span><span class="p">),</span>
|
|
<span class="n">clr</span><span class="o">=</span><span class="n">clr</span><span class="p">,</span>
|
|
<span class="n">sender</span><span class="o">=</span><span class="n">sender</span><span class="p">,</span>
|
|
<span class="n">receiver</span><span class="o">=</span><span class="n">receiver</span><span class="p">,</span>
|
|
<span class="n">message</span><span class="o">=</span><span class="n">page</span><span class="o">.</span><span class="n">message</span><span class="p">,</span>
|
|
<span class="p">)</span>
|
|
|
|
<span class="p">)</span>
|
|
<span class="n">lastpages</span> <span class="o">=</span> <span class="s2">"</span><span class="se">\n</span><span class="s2"> "</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">listing</span><span class="p">)</span>
|
|
|
|
<span class="k">if</span> <span class="n">lastpages</span><span class="p">:</span>
|
|
<span class="n">string</span> <span class="o">=</span> <span class="s2">"Your latest pages:</span><span class="se">\n</span><span class="s2"> </span><span class="si">%s</span><span class="s2">"</span> <span class="o">%</span> <span class="n">lastpages</span>
|
|
<span class="k">else</span><span class="p">:</span>
|
|
<span class="n">string</span> <span class="o">=</span> <span class="s2">"You haven't paged anyone yet."</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">msg</span><span class="p">(</span><span class="n">string</span><span class="p">)</span>
|
|
<span class="k">return</span>
|
|
|
|
<span class="c1"># We are sending. Build a list of targets</span>
|
|
|
|
<span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">lhs</span><span class="p">:</span>
|
|
<span class="c1"># If there are no targets, then set the targets</span>
|
|
<span class="c1"># to the last person we paged.</span>
|
|
<span class="k">if</span> <span class="n">pages_we_sent</span><span class="p">:</span>
|
|
<span class="n">receivers</span> <span class="o">=</span> <span class="n">pages_we_sent</span><span class="p">[</span><span class="o">-</span><span class="mi">1</span><span class="p">]</span><span class="o">.</span><span class="n">receivers</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">"Who do you want to page?"</span><span class="p">)</span>
|
|
<span class="k">return</span>
|
|
<span class="k">else</span><span class="p">:</span>
|
|
<span class="n">receivers</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">lhslist</span>
|
|
|
|
<span class="n">recobjs</span> <span class="o">=</span> <span class="p">[]</span>
|
|
<span class="k">for</span> <span class="n">receiver</span> <span class="ow">in</span> <span class="nb">set</span><span class="p">(</span><span class="n">receivers</span><span class="p">):</span>
|
|
<span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">receiver</span><span class="p">,</span> <span class="nb">str</span><span class="p">):</span>
|
|
<span class="n">pobj</span> <span class="o">=</span> <span class="n">caller</span><span class="o">.</span><span class="n">search</span><span class="p">(</span><span class="n">receiver</span><span class="p">)</span>
|
|
<span class="k">elif</span> <span class="nb">hasattr</span><span class="p">(</span><span class="n">receiver</span><span class="p">,</span> <span class="s2">"character"</span><span class="p">):</span>
|
|
<span class="n">pobj</span> <span class="o">=</span> <span class="n">receiver</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">"Who do you want to page?"</span><span class="p">)</span>
|
|
<span class="k">return</span>
|
|
<span class="k">if</span> <span class="n">pobj</span><span class="p">:</span>
|
|
<span class="n">recobjs</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">pobj</span><span class="p">)</span>
|
|
<span class="k">if</span> <span class="ow">not</span> <span class="n">recobjs</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">"Noone found to page."</span><span class="p">)</span>
|
|
<span class="k">return</span>
|
|
|
|
<span class="n">header</span> <span class="o">=</span> <span class="s2">"|wAccount|n |c</span><span class="si">%s</span><span class="s2">|n |wpages:|n"</span> <span class="o">%</span> <span class="n">caller</span><span class="o">.</span><span class="n">key</span>
|
|
<span class="n">message</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">rhs</span>
|
|
|
|
<span class="c1"># if message begins with a :, we assume it is a 'page-pose'</span>
|
|
<span class="k">if</span> <span class="n">message</span><span class="o">.</span><span class="n">startswith</span><span class="p">(</span><span class="s2">":"</span><span class="p">):</span>
|
|
<span class="n">message</span> <span class="o">=</span> <span class="s2">"</span><span class="si">%s</span><span class="s2"> </span><span class="si">%s</span><span class="s2">"</span> <span class="o">%</span> <span class="p">(</span><span class="n">caller</span><span class="o">.</span><span class="n">key</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="s2">":"</span><span class="p">)</span><span class="o">.</span><span class="n">strip</span><span class="p">())</span>
|
|
|
|
<span class="c1"># create the persistent message object</span>
|
|
<span class="n">create</span><span class="o">.</span><span class="n">create_message</span><span class="p">(</span><span class="n">caller</span><span class="p">,</span> <span class="n">message</span><span class="p">,</span> <span class="n">receivers</span><span class="o">=</span><span class="n">recobjs</span><span class="p">)</span>
|
|
|
|
<span class="c1"># tell the accounts they got a message.</span>
|
|
<span class="n">received</span> <span class="o">=</span> <span class="p">[]</span>
|
|
<span class="n">rstrings</span> <span class="o">=</span> <span class="p">[]</span>
|
|
<span class="k">for</span> <span class="n">pobj</span> <span class="ow">in</span> <span class="n">recobjs</span><span class="p">:</span>
|
|
<span class="k">if</span> <span class="ow">not</span> <span class="n">pobj</span><span class="o">.</span><span class="n">access</span><span class="p">(</span><span class="n">caller</span><span class="p">,</span> <span class="s2">"msg"</span><span class="p">):</span>
|
|
<span class="n">rstrings</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="s2">"You are not allowed to page </span><span class="si">%s</span><span class="s2">."</span> <span class="o">%</span> <span class="n">pobj</span><span class="p">)</span>
|
|
<span class="k">continue</span>
|
|
<span class="n">pobj</span><span class="o">.</span><span class="n">msg</span><span class="p">(</span><span class="s2">"</span><span class="si">%s</span><span class="s2"> </span><span class="si">%s</span><span class="s2">"</span> <span class="o">%</span> <span class="p">(</span><span class="n">header</span><span class="p">,</span> <span class="n">message</span><span class="p">))</span>
|
|
<span class="k">if</span> <span class="nb">hasattr</span><span class="p">(</span><span class="n">pobj</span><span class="p">,</span> <span class="s2">"sessions"</span><span class="p">)</span> <span class="ow">and</span> <span class="ow">not</span> <span class="n">pobj</span><span class="o">.</span><span class="n">sessions</span><span class="o">.</span><span class="n">count</span><span class="p">():</span>
|
|
<span class="n">received</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="s2">"|C</span><span class="si">%s</span><span class="s2">|n"</span> <span class="o">%</span> <span class="n">pobj</span><span class="o">.</span><span class="n">name</span><span class="p">)</span>
|
|
<span class="n">rstrings</span><span class="o">.</span><span class="n">append</span><span class="p">(</span>
|
|
<span class="s2">"</span><span class="si">%s</span><span class="s2"> is offline. They will see your message if they list their pages later."</span>
|
|
<span class="o">%</span> <span class="n">received</span><span class="p">[</span><span class="o">-</span><span class="mi">1</span><span class="p">]</span>
|
|
<span class="p">)</span>
|
|
<span class="k">else</span><span class="p">:</span>
|
|
<span class="n">received</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="s2">"|c</span><span class="si">%s</span><span class="s2">|n"</span> <span class="o">%</span> <span class="n">pobj</span><span class="o">.</span><span class="n">name</span><span class="p">)</span>
|
|
<span class="k">if</span> <span class="n">rstrings</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">"</span><span class="se">\n</span><span class="s2">"</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">rstrings</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">"You paged </span><span class="si">%s</span><span class="s2"> with: '</span><span class="si">%s</span><span class="s2">'."</span> <span class="o">%</span> <span class="p">(</span><span class="s2">", "</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">received</span><span class="p">),</span> <span class="n">message</span><span class="p">))</span></div></div>
|
|
|
|
|
|
<span class="k">def</span> <span class="nf">_list_bots</span><span class="p">(</span><span class="n">cmd</span><span class="p">):</span>
|
|
<span class="sd">"""</span>
|
|
<span class="sd"> Helper function to produce a list of all IRC bots.</span>
|
|
|
|
<span class="sd"> Args:</span>
|
|
<span class="sd"> cmd (Command): Instance of the Bot command.</span>
|
|
<span class="sd"> Returns:</span>
|
|
<span class="sd"> bots (str): A table of bots or an error message.</span>
|
|
|
|
<span class="sd"> """</span>
|
|
<span class="n">ircbots</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__startswith</span><span class="o">=</span><span class="s2">"ircbot-"</span><span class="p">)</span>
|
|
<span class="p">]</span>
|
|
<span class="k">if</span> <span class="n">ircbots</span><span class="p">:</span>
|
|
<span class="n">table</span> <span class="o">=</span> <span class="n">cmd</span><span class="o">.</span><span class="n">styled_table</span><span class="p">(</span>
|
|
<span class="s2">"|w#dbref|n"</span><span class="p">,</span>
|
|
<span class="s2">"|wbotname|n"</span><span class="p">,</span>
|
|
<span class="s2">"|wev-channel|n"</span><span class="p">,</span>
|
|
<span class="s2">"|wirc-channel|n"</span><span class="p">,</span>
|
|
<span class="s2">"|wSSL|n"</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="k">for</span> <span class="n">ircbot</span> <span class="ow">in</span> <span class="n">ircbots</span><span class="p">:</span>
|
|
<span class="n">ircinfo</span> <span class="o">=</span> <span class="s2">"</span><span class="si">%s</span><span class="s2"> (</span><span class="si">%s</span><span class="s2">:</span><span class="si">%s</span><span class="s2">)"</span> <span class="o">%</span> <span class="p">(</span>
|
|
<span class="n">ircbot</span><span class="o">.</span><span class="n">db</span><span class="o">.</span><span class="n">irc_channel</span><span class="p">,</span>
|
|
<span class="n">ircbot</span><span class="o">.</span><span class="n">db</span><span class="o">.</span><span class="n">irc_network</span><span class="p">,</span>
|
|
<span class="n">ircbot</span><span class="o">.</span><span class="n">db</span><span class="o">.</span><span class="n">irc_port</span><span class="p">,</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="s2">"#</span><span class="si">%i</span><span class="s2">"</span> <span class="o">%</span> <span class="n">ircbot</span><span class="o">.</span><span class="n">id</span><span class="p">,</span>
|
|
<span class="n">ircbot</span><span class="o">.</span><span class="n">db</span><span class="o">.</span><span class="n">irc_botname</span><span class="p">,</span>
|
|
<span class="n">ircbot</span><span class="o">.</span><span class="n">db</span><span class="o">.</span><span class="n">ev_channel</span><span class="p">,</span>
|
|
<span class="n">ircinfo</span><span class="p">,</span>
|
|
<span class="n">ircbot</span><span class="o">.</span><span class="n">db</span><span class="o">.</span><span class="n">irc_ssl</span><span class="p">,</span>
|
|
<span class="p">)</span>
|
|
<span class="k">return</span> <span class="n">table</span>
|
|
<span class="k">else</span><span class="p">:</span>
|
|
<span class="k">return</span> <span class="s2">"No irc bots found."</span>
|
|
|
|
|
|
<div class="viewcode-block" id="CmdIRC2Chan"><a class="viewcode-back" href="../../../../api/evennia.commands.default.comms.html#evennia.commands.default.comms.CmdIRC2Chan">[docs]</a><span class="k">class</span> <span class="nc">CmdIRC2Chan</span><span class="p">(</span><span class="n">COMMAND_DEFAULT_CLASS</span><span class="p">):</span>
|
|
<span class="sd">"""</span>
|
|
<span class="sd"> Link an evennia channel to an external IRC channel</span>
|
|
|
|
<span class="sd"> Usage:</span>
|
|
<span class="sd"> irc2chan[/switches] <evennia_channel> = <ircnetwork> <port> <#irchannel> <botname>[:typeclass]</span>
|
|
<span class="sd"> irc2chan/delete botname|#dbid</span>
|
|
|
|
<span class="sd"> Switches:</span>
|
|
<span class="sd"> /delete - this will delete the bot and remove the irc connection</span>
|
|
<span class="sd"> to the channel. Requires the botname or #dbid as input.</span>
|
|
<span class="sd"> /remove - alias to /delete</span>
|
|
<span class="sd"> /disconnect - alias to /delete</span>
|
|
<span class="sd"> /list - show all irc<->evennia mappings</span>
|
|
<span class="sd"> /ssl - use an SSL-encrypted connection</span>
|
|
|
|
<span class="sd"> Example:</span>
|
|
<span class="sd"> irc2chan myircchan = irc.dalnet.net 6667 #mychannel evennia-bot</span>
|
|
<span class="sd"> irc2chan public = irc.freenode.net 6667 #evgaming #evbot:accounts.mybot.MyBot</span>
|
|
|
|
<span class="sd"> This creates an IRC bot that connects to a given IRC network and</span>
|
|
<span class="sd"> channel. If a custom typeclass path is given, this will be used</span>
|
|
<span class="sd"> instead of the default bot class.</span>
|
|
<span class="sd"> The bot will relay everything said in the evennia channel to the</span>
|
|
<span class="sd"> IRC channel and vice versa. The bot will automatically connect at</span>
|
|
<span class="sd"> server start, so this command need only be given once. The</span>
|
|
<span class="sd"> /disconnect switch will permanently delete the bot. To only</span>
|
|
<span class="sd"> temporarily deactivate it, use the |wservices|n command instead.</span>
|
|
<span class="sd"> Provide an optional bot class path to use a custom bot.</span>
|
|
<span class="sd"> """</span>
|
|
|
|
<span class="n">key</span> <span class="o">=</span> <span class="s2">"irc2chan"</span>
|
|
<span class="n">switch_options</span> <span class="o">=</span> <span class="p">(</span><span class="s2">"delete"</span><span class="p">,</span> <span class="s2">"remove"</span><span class="p">,</span> <span class="s2">"disconnect"</span><span class="p">,</span> <span class="s2">"list"</span><span class="p">,</span> <span class="s2">"ssl"</span><span class="p">)</span>
|
|
<span class="n">locks</span> <span class="o">=</span> <span class="s2">"cmd:serversetting(IRC_ENABLED) and pperm(Developer)"</span>
|
|
<span class="n">help_category</span> <span class="o">=</span> <span class="s2">"Comms"</span>
|
|
|
|
<div class="viewcode-block" id="CmdIRC2Chan.func"><a class="viewcode-back" href="../../../../api/evennia.commands.default.comms.html#evennia.commands.default.comms.CmdIRC2Chan.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">"""Setup the irc-channel mapping"""</span>
|
|
|
|
<span class="k">if</span> <span class="ow">not</span> <span class="n">settings</span><span class="o">.</span><span class="n">IRC_ENABLED</span><span class="p">:</span>
|
|
<span class="n">string</span> <span class="o">=</span> <span class="s2">"""IRC is not enabled. You need to activate it in game/settings.py."""</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">msg</span><span class="p">(</span><span class="n">string</span><span class="p">)</span>
|
|
<span class="k">return</span>
|
|
|
|
<span class="k">if</span> <span class="s2">"list"</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="c1"># show all connections</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">msg</span><span class="p">(</span><span class="n">_list_bots</span><span class="p">(</span><span class="bp">self</span><span class="p">))</span>
|
|
<span class="k">return</span>
|
|
|
|
<span class="k">if</span> <span class="s2">"disconnect"</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">"remove"</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">"delete"</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">botname</span> <span class="o">=</span> <span class="s2">"ircbot-</span><span class="si">%s</span><span class="s2">"</span> <span class="o">%</span> <span class="bp">self</span><span class="o">.</span><span class="n">lhs</span>
|
|
<span class="n">matches</span> <span class="o">=</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="n">botname</span><span class="p">)</span>
|
|
<span class="n">dbref</span> <span class="o">=</span> <span class="n">utils</span><span class="o">.</span><span class="n">dbref</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">lhs</span><span class="p">)</span>
|
|
<span class="k">if</span> <span class="ow">not</span> <span class="n">matches</span> <span class="ow">and</span> <span class="n">dbref</span><span class="p">:</span>
|
|
<span class="c1"># try dbref match</span>
|
|
<span class="n">matches</span> <span class="o">=</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="nb">id</span><span class="o">=</span><span class="n">dbref</span><span class="p">)</span>
|
|
<span class="k">if</span> <span class="n">matches</span><span class="p">:</span>
|
|
<span class="n">matches</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">.</span><span class="n">delete</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">"IRC connection destroyed."</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">"IRC connection/bot could not be removed, does it exist?"</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">args</span> <span class="ow">or</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">rhs</span><span class="p">:</span>
|
|
<span class="n">string</span> <span class="o">=</span> <span class="p">(</span>
|
|
<span class="s2">"Usage: irc2chan[/switches] <evennia_channel> ="</span>
|
|
<span class="s2">" <ircnetwork> <port> <#irchannel> <botname>[:typeclass]"</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">string</span><span class="p">)</span>
|
|
<span class="k">return</span>
|
|
|
|
<span class="n">channel</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">lhs</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">rhs</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">rhs</span><span class="o">.</span><span class="n">replace</span><span class="p">(</span><span class="s2">"#"</span><span class="p">,</span> <span class="s2">" "</span><span class="p">)</span> <span class="c1"># to avoid Python comment issues</span>
|
|
<span class="k">try</span><span class="p">:</span>
|
|
<span class="n">irc_network</span><span class="p">,</span> <span class="n">irc_port</span><span class="p">,</span> <span class="n">irc_channel</span><span class="p">,</span> <span class="n">irc_botname</span> <span class="o">=</span> <span class="p">[</span>
|
|
<span class="n">part</span><span class="o">.</span><span class="n">strip</span><span class="p">()</span> <span class="k">for</span> <span class="n">part</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">rhs</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="kc">None</span><span class="p">,</span> <span class="mi">4</span><span class="p">)</span>
|
|
<span class="p">]</span>
|
|
<span class="n">irc_channel</span> <span class="o">=</span> <span class="s2">"#</span><span class="si">%s</span><span class="s2">"</span> <span class="o">%</span> <span class="n">irc_channel</span>
|
|
<span class="k">except</span> <span class="ne">Exception</span><span class="p">:</span>
|
|
<span class="n">string</span> <span class="o">=</span> <span class="s2">"IRC bot definition '</span><span class="si">%s</span><span class="s2">' is not valid."</span> <span class="o">%</span> <span class="bp">self</span><span class="o">.</span><span class="n">rhs</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">msg</span><span class="p">(</span><span class="n">string</span><span class="p">)</span>
|
|
<span class="k">return</span>
|
|
|
|
<span class="n">botclass</span> <span class="o">=</span> <span class="kc">None</span>
|
|
<span class="k">if</span> <span class="s2">":"</span> <span class="ow">in</span> <span class="n">irc_botname</span><span class="p">:</span>
|
|
<span class="n">irc_botname</span><span class="p">,</span> <span class="n">botclass</span> <span class="o">=</span> <span class="p">[</span><span class="n">part</span><span class="o">.</span><span class="n">strip</span><span class="p">()</span> <span class="k">for</span> <span class="n">part</span> <span class="ow">in</span> <span class="n">irc_botname</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s2">":"</span><span class="p">,</span> <span class="mi">2</span><span class="p">)]</span>
|
|
<span class="n">botname</span> <span class="o">=</span> <span class="s2">"ircbot-</span><span class="si">%s</span><span class="s2">"</span> <span class="o">%</span> <span class="n">irc_botname</span>
|
|
<span class="c1"># If path given, use custom bot otherwise use default.</span>
|
|
<span class="n">botclass</span> <span class="o">=</span> <span class="n">botclass</span> <span class="k">if</span> <span class="n">botclass</span> <span class="k">else</span> <span class="n">bots</span><span class="o">.</span><span class="n">IRCBot</span>
|
|
<span class="n">irc_ssl</span> <span class="o">=</span> <span class="s2">"ssl"</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">switches</span>
|
|
|
|
<span class="c1"># create a new bot</span>
|
|
<span class="n">bot</span> <span class="o">=</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">username__iexact</span><span class="o">=</span><span class="n">botname</span><span class="p">)</span>
|
|
<span class="k">if</span> <span class="n">bot</span><span class="p">:</span>
|
|
<span class="c1"># re-use an existing bot</span>
|
|
<span class="n">bot</span> <span class="o">=</span> <span class="n">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">bot</span><span class="o">.</span><span class="n">is_bot</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">"Account '</span><span class="si">%s</span><span class="s2">' already exists and is not a bot."</span> <span class="o">%</span> <span class="n">botname</span><span class="p">)</span>
|
|
<span class="k">return</span>
|
|
<span class="k">else</span><span class="p">:</span>
|
|
<span class="k">try</span><span class="p">:</span>
|
|
<span class="n">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="n">botname</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">botclass</span><span class="p">)</span>
|
|
<span class="k">except</span> <span class="ne">Exception</span> <span class="k">as</span> <span class="n">err</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">"|rError, could not create the bot:|n '</span><span class="si">%s</span><span class="s2">'."</span> <span class="o">%</span> <span class="n">err</span><span class="p">)</span>
|
|
<span class="k">return</span>
|
|
<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">irc_botname</span><span class="o">=</span><span class="n">irc_botname</span><span class="p">,</span>
|
|
<span class="n">irc_channel</span><span class="o">=</span><span class="n">irc_channel</span><span class="p">,</span>
|
|
<span class="n">irc_network</span><span class="o">=</span><span class="n">irc_network</span><span class="p">,</span>
|
|
<span class="n">irc_port</span><span class="o">=</span><span class="n">irc_port</span><span class="p">,</span>
|
|
<span class="n">irc_ssl</span><span class="o">=</span><span class="n">irc_ssl</span><span class="p">,</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">"Connection created. Starting IRC bot."</span><span class="p">)</span></div></div>
|
|
|
|
|
|
<div class="viewcode-block" id="CmdIRCStatus"><a class="viewcode-back" href="../../../../api/evennia.commands.default.comms.html#evennia.commands.default.comms.CmdIRCStatus">[docs]</a><span class="k">class</span> <span class="nc">CmdIRCStatus</span><span class="p">(</span><span class="n">COMMAND_DEFAULT_CLASS</span><span class="p">):</span>
|
|
<span class="sd">"""</span>
|
|
<span class="sd"> Check and reboot IRC bot.</span>
|
|
|
|
<span class="sd"> Usage:</span>
|
|
<span class="sd"> ircstatus [#dbref ping||nicklist||reconnect]</span>
|
|
|
|
<span class="sd"> If not given arguments, will return a list of all bots (like</span>
|
|
<span class="sd"> irc2chan/list). The 'ping' argument will ping the IRC network to</span>
|
|
<span class="sd"> see if the connection is still responsive. The 'nicklist' argument</span>
|
|
<span class="sd"> (aliases are 'who' and 'users') will return a list of users on the</span>
|
|
<span class="sd"> remote IRC channel. Finally, 'reconnect' will force the client to</span>
|
|
<span class="sd"> disconnect and reconnect again. This may be a last resort if the</span>
|
|
<span class="sd"> client has silently lost connection (this may happen if the remote</span>
|
|
<span class="sd"> network experience network issues). During the reconnection</span>
|
|
<span class="sd"> messages sent to either channel will be lost.</span>
|
|
|
|
<span class="sd"> """</span>
|
|
|
|
<span class="n">key</span> <span class="o">=</span> <span class="s2">"ircstatus"</span>
|
|
<span class="n">locks</span> <span class="o">=</span> <span class="s2">"cmd:serversetting(IRC_ENABLED) and perm(ircstatus) or perm(Builder))"</span>
|
|
<span class="n">help_category</span> <span class="o">=</span> <span class="s2">"Comms"</span>
|
|
|
|
<div class="viewcode-block" id="CmdIRCStatus.func"><a class="viewcode-back" href="../../../../api/evennia.commands.default.comms.html#evennia.commands.default.comms.CmdIRCStatus.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">"""Handles the functioning of the command."""</span>
|
|
|
|
<span class="k">if</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="bp">self</span><span class="o">.</span><span class="n">msg</span><span class="p">(</span><span class="n">_list_bots</span><span class="p">(</span><span class="bp">self</span><span class="p">))</span>
|
|
<span class="k">return</span>
|
|
<span class="c1"># should always be on the form botname option</span>
|
|
<span class="n">args</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">split</span><span class="p">()</span>
|
|
<span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">args</span><span class="p">)</span> <span class="o">!=</span> <span class="mi">2</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">"Usage: ircstatus [#dbref ping||nicklist||reconnect]"</span><span class="p">)</span>
|
|
<span class="k">return</span>
|
|
<span class="n">botname</span><span class="p">,</span> <span class="n">option</span> <span class="o">=</span> <span class="n">args</span>
|
|
<span class="k">if</span> <span class="n">option</span> <span class="ow">not</span> <span class="ow">in</span> <span class="p">(</span><span class="s2">"ping"</span><span class="p">,</span> <span class="s2">"users"</span><span class="p">,</span> <span class="s2">"reconnect"</span><span class="p">,</span> <span class="s2">"nicklist"</span><span class="p">,</span> <span class="s2">"who"</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">"Not a valid option."</span><span class="p">)</span>
|
|
<span class="k">return</span>
|
|
<span class="n">matches</span> <span class="o">=</span> <span class="kc">None</span>
|
|
<span class="k">if</span> <span class="n">utils</span><span class="o">.</span><span class="n">dbref</span><span class="p">(</span><span class="n">botname</span><span class="p">):</span>
|
|
<span class="n">matches</span> <span class="o">=</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="nb">id</span><span class="o">=</span><span class="n">utils</span><span class="o">.</span><span class="n">dbref</span><span class="p">(</span><span class="n">botname</span><span class="p">))</span>
|
|
<span class="k">if</span> <span class="ow">not</span> <span class="n">matches</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">"No matching IRC-bot found. Use ircstatus without arguments to list active bots."</span>
|
|
<span class="p">)</span>
|
|
<span class="k">return</span>
|
|
<span class="n">ircbot</span> <span class="o">=</span> <span class="n">matches</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span>
|
|
<span class="n">channel</span> <span class="o">=</span> <span class="n">ircbot</span><span class="o">.</span><span class="n">db</span><span class="o">.</span><span class="n">irc_channel</span>
|
|
<span class="n">network</span> <span class="o">=</span> <span class="n">ircbot</span><span class="o">.</span><span class="n">db</span><span class="o">.</span><span class="n">irc_network</span>
|
|
<span class="n">port</span> <span class="o">=</span> <span class="n">ircbot</span><span class="o">.</span><span class="n">db</span><span class="o">.</span><span class="n">irc_port</span>
|
|
<span class="n">chtext</span> <span class="o">=</span> <span class="s2">"IRC bot '</span><span class="si">%s</span><span class="s2">' on channel </span><span class="si">%s</span><span class="s2"> (</span><span class="si">%s</span><span class="s2">:</span><span class="si">%s</span><span class="s2">)"</span> <span class="o">%</span> <span class="p">(</span>
|
|
<span class="n">ircbot</span><span class="o">.</span><span class="n">db</span><span class="o">.</span><span class="n">irc_botname</span><span class="p">,</span>
|
|
<span class="n">channel</span><span class="p">,</span>
|
|
<span class="n">network</span><span class="p">,</span>
|
|
<span class="n">port</span><span class="p">,</span>
|
|
<span class="p">)</span>
|
|
<span class="k">if</span> <span class="n">option</span> <span class="o">==</span> <span class="s2">"ping"</span><span class="p">:</span>
|
|
<span class="c1"># check connection by sending outself a ping through the server.</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">caller</span><span class="o">.</span><span class="n">msg</span><span class="p">(</span><span class="s2">"Pinging through </span><span class="si">%s</span><span class="s2">."</span> <span class="o">%</span> <span class="n">chtext</span><span class="p">)</span>
|
|
<span class="n">ircbot</span><span class="o">.</span><span class="n">ping</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">caller</span><span class="p">)</span>
|
|
<span class="k">elif</span> <span class="n">option</span> <span class="ow">in</span> <span class="p">(</span><span class="s2">"users"</span><span class="p">,</span> <span class="s2">"nicklist"</span><span class="p">,</span> <span class="s2">"who"</span><span class="p">):</span>
|
|
<span class="c1"># retrieve user list. The bot must handles the echo since it's</span>
|
|
<span class="c1"># an asynchronous call.</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">caller</span><span class="o">.</span><span class="n">msg</span><span class="p">(</span><span class="s2">"Requesting nicklist from </span><span class="si">%s</span><span class="s2"> (</span><span class="si">%s</span><span class="s2">:</span><span class="si">%s</span><span class="s2">)."</span> <span class="o">%</span> <span class="p">(</span><span class="n">channel</span><span class="p">,</span> <span class="n">network</span><span class="p">,</span> <span class="n">port</span><span class="p">))</span>
|
|
<span class="n">ircbot</span><span class="o">.</span><span class="n">get_nicklist</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">caller</span><span class="p">)</span>
|
|
<span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">caller</span><span class="o">.</span><span class="n">locks</span><span class="o">.</span><span class="n">check_lockstring</span><span class="p">(</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">caller</span><span class="p">,</span> <span class="s2">"dummy:perm(ircstatus) or perm(Developer)"</span>
|
|
<span class="p">):</span>
|
|
<span class="c1"># reboot the client</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">caller</span><span class="o">.</span><span class="n">msg</span><span class="p">(</span><span class="s2">"Forcing a disconnect + reconnect of </span><span class="si">%s</span><span class="s2">."</span> <span class="o">%</span> <span class="n">chtext</span><span class="p">)</span>
|
|
<span class="n">ircbot</span><span class="o">.</span><span class="n">reconnect</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">caller</span><span class="o">.</span><span class="n">msg</span><span class="p">(</span><span class="s2">"You don't have permission to force-reload the IRC bot."</span><span class="p">)</span></div></div>
|
|
|
|
|
|
<span class="c1"># RSS connection</span>
|
|
<div class="viewcode-block" id="CmdRSS2Chan"><a class="viewcode-back" href="../../../../api/evennia.commands.default.comms.html#evennia.commands.default.comms.CmdRSS2Chan">[docs]</a><span class="k">class</span> <span class="nc">CmdRSS2Chan</span><span class="p">(</span><span class="n">COMMAND_DEFAULT_CLASS</span><span class="p">):</span>
|
|
<span class="sd">"""</span>
|
|
<span class="sd"> link an evennia channel to an external RSS feed</span>
|
|
|
|
<span class="sd"> Usage:</span>
|
|
<span class="sd"> rss2chan[/switches] <evennia_channel> = <rss_url></span>
|
|
|
|
<span class="sd"> Switches:</span>
|
|
<span class="sd"> /disconnect - this will stop the feed and remove the connection to the</span>
|
|
<span class="sd"> channel.</span>
|
|
<span class="sd"> /remove - "</span>
|
|
<span class="sd"> /list - show all rss->evennia mappings</span>
|
|
|
|
<span class="sd"> Example:</span>
|
|
<span class="sd"> rss2chan rsschan = http://code.google.com/feeds/p/evennia/updates/basic</span>
|
|
|
|
<span class="sd"> This creates an RSS reader that connects to a given RSS feed url. Updates</span>
|
|
<span class="sd"> will be echoed as a title and news link to the given channel. The rate of</span>
|
|
<span class="sd"> updating is set with the RSS_UPDATE_INTERVAL variable in settings (default</span>
|
|
<span class="sd"> is every 10 minutes).</span>
|
|
|
|
<span class="sd"> When disconnecting you need to supply both the channel and url again so as</span>
|
|
<span class="sd"> to identify the connection uniquely.</span>
|
|
<span class="sd"> """</span>
|
|
|
|
<span class="n">key</span> <span class="o">=</span> <span class="s2">"rss2chan"</span>
|
|
<span class="n">switch_options</span> <span class="o">=</span> <span class="p">(</span><span class="s2">"disconnect"</span><span class="p">,</span> <span class="s2">"remove"</span><span class="p">,</span> <span class="s2">"list"</span><span class="p">)</span>
|
|
<span class="n">locks</span> <span class="o">=</span> <span class="s2">"cmd:serversetting(RSS_ENABLED) and pperm(Developer)"</span>
|
|
<span class="n">help_category</span> <span class="o">=</span> <span class="s2">"Comms"</span>
|
|
|
|
<div class="viewcode-block" id="CmdRSS2Chan.func"><a class="viewcode-back" href="../../../../api/evennia.commands.default.comms.html#evennia.commands.default.comms.CmdRSS2Chan.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">"""Setup the rss-channel mapping"""</span>
|
|
|
|
<span class="c1"># checking we have all we need</span>
|
|
<span class="k">if</span> <span class="ow">not</span> <span class="n">settings</span><span class="o">.</span><span class="n">RSS_ENABLED</span><span class="p">:</span>
|
|
<span class="n">string</span> <span class="o">=</span> <span class="s2">"""RSS is not enabled. You need to activate it in game/settings.py."""</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">msg</span><span class="p">(</span><span class="n">string</span><span class="p">)</span>
|
|
<span class="k">return</span>
|
|
<span class="k">try</span><span class="p">:</span>
|
|
<span class="kn">import</span> <span class="nn">feedparser</span>
|
|
|
|
<span class="k">assert</span> <span class="n">feedparser</span> <span class="c1"># to avoid checker error of not being used</span>
|
|
<span class="k">except</span> <span class="ne">ImportError</span><span class="p">:</span>
|
|
<span class="n">string</span> <span class="o">=</span> <span class="p">(</span>
|
|
<span class="s2">"RSS requires python-feedparser (https://pypi.python.org/pypi/feedparser)."</span>
|
|
<span class="s2">" Install before continuing."</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">string</span><span class="p">)</span>
|
|
<span class="k">return</span>
|
|
|
|
<span class="k">if</span> <span class="s2">"list"</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="c1"># show all connections</span>
|
|
<span class="n">rssbots</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__startswith</span><span class="o">=</span><span class="s2">"rssbot-"</span><span class="p">)</span>
|
|
<span class="p">]</span>
|
|
<span class="k">if</span> <span class="n">rssbots</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">"|wdbid|n"</span><span class="p">,</span>
|
|
<span class="s2">"|wupdate rate|n"</span><span class="p">,</span>
|
|
<span class="s2">"|wev-channel"</span><span class="p">,</span>
|
|
<span class="s2">"|wRSS feed URL|n"</span><span class="p">,</span>
|
|
<span class="n">border</span><span class="o">=</span><span class="s2">"cells"</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="k">for</span> <span class="n">rssbot</span> <span class="ow">in</span> <span class="n">rssbots</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">rssbot</span><span class="o">.</span><span class="n">id</span><span class="p">,</span> <span class="n">rssbot</span><span class="o">.</span><span class="n">db</span><span class="o">.</span><span class="n">rss_rate</span><span class="p">,</span> <span class="n">rssbot</span><span class="o">.</span><span class="n">db</span><span class="o">.</span><span class="n">ev_channel</span><span class="p">,</span> <span class="n">rssbot</span><span class="o">.</span><span class="n">db</span><span class="o">.</span><span class="n">rss_url</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">"No rss bots found."</span><span class="p">)</span>
|
|
<span class="k">return</span>
|
|
|
|
<span class="k">if</span> <span class="s2">"disconnect"</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">"remove"</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">"delete"</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">botname</span> <span class="o">=</span> <span class="s2">"rssbot-</span><span class="si">%s</span><span class="s2">"</span> <span class="o">%</span> <span class="bp">self</span><span class="o">.</span><span class="n">lhs</span>
|
|
<span class="n">matches</span> <span class="o">=</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">db_key</span><span class="o">=</span><span class="n">botname</span><span class="p">)</span>
|
|
<span class="k">if</span> <span class="ow">not</span> <span class="n">matches</span><span class="p">:</span>
|
|
<span class="c1"># try dbref match</span>
|
|
<span class="n">matches</span> <span class="o">=</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="nb">id</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">lstrip</span><span class="p">(</span><span class="s2">"#"</span><span class="p">))</span>
|
|
<span class="k">if</span> <span class="n">matches</span><span class="p">:</span>
|
|
<span class="n">matches</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">.</span><span class="n">delete</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">"RSS connection destroyed."</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">"RSS connection/bot could not be removed, does it exist?"</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">args</span> <span class="ow">or</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">rhs</span><span class="p">:</span>
|
|
<span class="n">string</span> <span class="o">=</span> <span class="s2">"Usage: rss2chan[/switches] <evennia_channel> = <rss url>"</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">msg</span><span class="p">(</span><span class="n">string</span><span class="p">)</span>
|
|
<span class="k">return</span>
|
|
<span class="n">channel</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">lhs</span>
|
|
<span class="n">url</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">rhs</span>
|
|
|
|
<span class="n">botname</span> <span class="o">=</span> <span class="s2">"rssbot-</span><span class="si">%s</span><span class="s2">"</span> <span class="o">%</span> <span class="n">url</span>
|
|
<span class="n">bot</span> <span class="o">=</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">username__iexact</span><span class="o">=</span><span class="n">botname</span><span class="p">)</span>
|
|
<span class="k">if</span> <span class="n">bot</span><span class="p">:</span>
|
|
<span class="c1"># re-use existing bot</span>
|
|
<span class="n">bot</span> <span class="o">=</span> <span class="n">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">bot</span><span class="o">.</span><span class="n">is_bot</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">"Account '</span><span class="si">%s</span><span class="s2">' already exists and is not a bot."</span> <span class="o">%</span> <span class="n">botname</span><span class="p">)</span>
|
|
<span class="k">return</span>
|
|
<span class="k">else</span><span class="p">:</span>
|
|
<span class="c1"># create a new bot</span>
|
|
<span class="n">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="n">botname</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">bots</span><span class="o">.</span><span class="n">RSSBot</span><span class="p">)</span>
|
|
<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">rss_url</span><span class="o">=</span><span class="n">url</span><span class="p">,</span> <span class="n">rss_rate</span><span class="o">=</span><span class="mi">10</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">"RSS reporter created. Fetching RSS."</span><span class="p">)</span></div></div>
|
|
|
|
|
|
<div class="viewcode-block" id="CmdGrapevine2Chan"><a class="viewcode-back" href="../../../../api/evennia.commands.default.comms.html#evennia.commands.default.comms.CmdGrapevine2Chan">[docs]</a><span class="k">class</span> <span class="nc">CmdGrapevine2Chan</span><span class="p">(</span><span class="n">COMMAND_DEFAULT_CLASS</span><span class="p">):</span>
|
|
<span class="sd">"""</span>
|
|
<span class="sd"> Link an Evennia channel to an exteral Grapevine channel</span>
|
|
|
|
<span class="sd"> Usage:</span>
|
|
<span class="sd"> grapevine2chan[/switches] <evennia_channel> = <grapevine_channel></span>
|
|
<span class="sd"> grapevine2chan/disconnect <connection #id></span>
|
|
|
|
<span class="sd"> Switches:</span>
|
|
<span class="sd"> /list - (or no switch): show existing grapevine <-> Evennia</span>
|
|
<span class="sd"> mappings and available grapevine chans</span>
|
|
<span class="sd"> /remove - alias to disconnect</span>
|
|
<span class="sd"> /delete - alias to disconnect</span>
|
|
|
|
<span class="sd"> Example:</span>
|
|
<span class="sd"> grapevine2chan mygrapevine = gossip</span>
|
|
|
|
<span class="sd"> This creates a link between an in-game Evennia channel and an external</span>
|
|
<span class="sd"> Grapevine channel. The game must be registered with the Grapevine network</span>
|
|
<span class="sd"> (register at https://grapevine.haus) and the GRAPEVINE_* auth information</span>
|
|
<span class="sd"> must be added to game settings.</span>
|
|
<span class="sd"> """</span>
|
|
|
|
<span class="n">key</span> <span class="o">=</span> <span class="s2">"grapevine2chan"</span>
|
|
<span class="n">switch_options</span> <span class="o">=</span> <span class="p">(</span><span class="s2">"disconnect"</span><span class="p">,</span> <span class="s2">"remove"</span><span class="p">,</span> <span class="s2">"delete"</span><span class="p">,</span> <span class="s2">"list"</span><span class="p">)</span>
|
|
<span class="n">locks</span> <span class="o">=</span> <span class="s2">"cmd:serversetting(GRAPEVINE_ENABLED) and pperm(Developer)"</span>
|
|
<span class="n">help_category</span> <span class="o">=</span> <span class="s2">"Comms"</span>
|
|
|
|
<div class="viewcode-block" id="CmdGrapevine2Chan.func"><a class="viewcode-back" href="../../../../api/evennia.commands.default.comms.html#evennia.commands.default.comms.CmdGrapevine2Chan.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">"""Setup the Grapevine channel mapping"""</span>
|
|
|
|
<span class="k">if</span> <span class="ow">not</span> <span class="n">settings</span><span class="o">.</span><span class="n">GRAPEVINE_ENABLED</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">"Set GRAPEVINE_ENABLED=True in settings to enable."</span><span class="p">)</span>
|
|
<span class="k">return</span>
|
|
|
|
<span class="k">if</span> <span class="s2">"list"</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="c1"># show all connections</span>
|
|
<span class="n">gwbots</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__startswith</span><span class="o">=</span><span class="s2">"grapevinebot-"</span>
|
|
<span class="p">)</span>
|
|
<span class="p">]</span>
|
|
<span class="k">if</span> <span class="n">gwbots</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">"|wdbid|n"</span><span class="p">,</span>
|
|
<span class="s2">"|wev-channel"</span><span class="p">,</span>
|
|
<span class="s2">"|wgw-channel|n"</span><span class="p">,</span>
|
|
<span class="n">border</span><span class="o">=</span><span class="s2">"cells"</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="k">for</span> <span class="n">gwbot</span> <span class="ow">in</span> <span class="n">gwbots</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">gwbot</span><span class="o">.</span><span class="n">id</span><span class="p">,</span> <span class="n">gwbot</span><span class="o">.</span><span class="n">db</span><span class="o">.</span><span class="n">ev_channel</span><span class="p">,</span> <span class="n">gwbot</span><span class="o">.</span><span class="n">db</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="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">"No grapevine bots found."</span><span class="p">)</span>
|
|
<span class="k">return</span>
|
|
|
|
<span class="k">if</span> <span class="s2">"disconnect"</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">"remove"</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">"delete"</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">botname</span> <span class="o">=</span> <span class="s2">"grapevinebot-</span><span class="si">%s</span><span class="s2">"</span> <span class="o">%</span> <span class="bp">self</span><span class="o">.</span><span class="n">lhs</span>
|
|
<span class="n">matches</span> <span class="o">=</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">db_key</span><span class="o">=</span><span class="n">botname</span><span class="p">)</span>
|
|
|
|
<span class="k">if</span> <span class="ow">not</span> <span class="n">matches</span><span class="p">:</span>
|
|
<span class="c1"># try dbref match</span>
|
|
<span class="n">matches</span> <span class="o">=</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="nb">id</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">lstrip</span><span class="p">(</span><span class="s2">"#"</span><span class="p">))</span>
|
|
<span class="k">if</span> <span class="n">matches</span><span class="p">:</span>
|
|
<span class="n">matches</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">.</span><span class="n">delete</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">"Grapevine connection destroyed."</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">"Grapevine connection/bot could not be removed, does it exist?"</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">args</span> <span class="ow">or</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">rhs</span><span class="p">:</span>
|
|
<span class="n">string</span> <span class="o">=</span> <span class="s2">"Usage: grapevine2chan[/switches] <evennia_channel> = <grapevine_channel>"</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">msg</span><span class="p">(</span><span class="n">string</span><span class="p">)</span>
|
|
<span class="k">return</span>
|
|
|
|
<span class="n">channel</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">lhs</span>
|
|
<span class="n">grapevine_channel</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">rhs</span>
|
|
|
|
<span class="n">botname</span> <span class="o">=</span> <span class="s2">"grapewinebot-</span><span class="si">%s</span><span class="s2">-</span><span class="si">%s</span><span class="s2">"</span> <span class="o">%</span> <span class="p">(</span><span class="n">channel</span><span class="p">,</span> <span class="n">grapevine_channel</span><span class="p">)</span>
|
|
<span class="n">bot</span> <span class="o">=</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">username__iexact</span><span class="o">=</span><span class="n">botname</span><span class="p">)</span>
|
|
<span class="k">if</span> <span class="n">bot</span><span class="p">:</span>
|
|
<span class="c1"># re-use existing bot</span>
|
|
<span class="n">bot</span> <span class="o">=</span> <span class="n">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">bot</span><span class="o">.</span><span class="n">is_bot</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">"Account '</span><span class="si">%s</span><span class="s2">' already exists and is not a bot."</span> <span class="o">%</span> <span class="n">botname</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">"Reusing bot '</span><span class="si">%s</span><span class="s2">' (</span><span class="si">%s</span><span class="s2">)"</span> <span class="o">%</span> <span class="p">(</span><span class="n">botname</span><span class="p">,</span> <span class="n">bot</span><span class="o">.</span><span class="n">dbref</span><span class="p">))</span>
|
|
<span class="k">else</span><span class="p">:</span>
|
|
<span class="c1"># create a new bot</span>
|
|
<span class="n">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="n">botname</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">bots</span><span class="o">.</span><span class="n">GrapevineBot</span><span class="p">)</span>
|
|
|
|
<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="n">f</span><span class="s2">"Grapevine connection created </span><span class="si">{channel}</span><span class="s2"> <-> </span><span class="si">{grapevine_channel}</span><span class="s2">."</span><span class="p">)</span></div></div>
|
|
</pre></div>
|
|
|
|
<div class="clearer"></div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<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>Versions</h3>
|
|
<ul>
|
|
<li><a href="comms.html">1.0-dev (develop branch)</a></li>
|
|
<li><a href="../../../../../0.9.5/index.html">0.9.5 (v0.9.5 branch)</a></li>
|
|
</ul>
|
|
|
|
</div>
|
|
</div>
|
|
<div class="clearer"></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> »</li>
|
|
<li class="nav-item nav-item-1"><a href="../../../index.html" >Module code</a> »</li>
|
|
<li class="nav-item nav-item-2"><a href="../../../evennia.html" >evennia</a> »</li>
|
|
<li class="nav-item nav-item-this"><a href="">evennia.commands.default.comms</a></li>
|
|
</ul>
|
|
<div class="develop">develop branch</div>
|
|
</div>
|
|
<div class="footer" role="contentinfo">
|
|
© Copyright 2020, The Evennia developer community.
|
|
Created using <a href="https://www.sphinx-doc.org/">Sphinx</a> 3.2.1.
|
|
</div>
|
|
</body>
|
|
</html> |