mirror of
https://github.com/evennia/evennia.git
synced 2026-04-03 22:47:16 +02:00
621 lines
No EOL
64 KiB
HTML
621 lines
No EOL
64 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.unloggedin — 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>
|
|
<script async="async" src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.7/latest.js?config=TeX-AMS-MML_HTMLorMML"></script>
|
|
<script type="text/x-mathjax-config">MathJax.Hub.Config({"tex2jax": {"processClass": "tex2jax_process|mathjax_process|math|output_area"}})</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.unloggedin</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.unloggedin</h1><div class="highlight"><pre>
|
|
<span></span><span class="sd">"""</span>
|
|
<span class="sd">Commands that are available from the connect screen.</span>
|
|
<span class="sd">"""</span>
|
|
<span class="kn">import</span> <span class="nn">re</span>
|
|
<span class="kn">import</span> <span class="nn">datetime</span>
|
|
<span class="kn">from</span> <span class="nn">codecs</span> <span class="kn">import</span> <span class="n">lookup</span> <span class="k">as</span> <span class="n">codecs_lookup</span>
|
|
<span class="kn">from</span> <span class="nn">django.conf</span> <span class="kn">import</span> <span class="n">settings</span>
|
|
<span class="kn">from</span> <span class="nn">evennia.comms.models</span> <span class="kn">import</span> <span class="n">ChannelDB</span>
|
|
<span class="kn">from</span> <span class="nn">evennia.server.sessionhandler</span> <span class="kn">import</span> <span class="n">SESSIONS</span>
|
|
|
|
<span class="kn">from</span> <span class="nn">evennia.utils</span> <span class="kn">import</span> <span class="n">class_from_module</span><span class="p">,</span> <span class="n">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">gametime</span>
|
|
<span class="kn">from</span> <span class="nn">evennia.commands.cmdhandler</span> <span class="kn">import</span> <span class="n">CMD_LOGINSTART</span>
|
|
|
|
<span class="n">COMMAND_DEFAULT_CLASS</span> <span class="o">=</span> <span class="n">utils</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="c1"># limit symbol import for API</span>
|
|
<span class="n">__all__</span> <span class="o">=</span> <span class="p">(</span>
|
|
<span class="s2">"CmdUnconnectedConnect"</span><span class="p">,</span>
|
|
<span class="s2">"CmdUnconnectedCreate"</span><span class="p">,</span>
|
|
<span class="s2">"CmdUnconnectedQuit"</span><span class="p">,</span>
|
|
<span class="s2">"CmdUnconnectedLook"</span><span class="p">,</span>
|
|
<span class="s2">"CmdUnconnectedHelp"</span><span class="p">,</span>
|
|
<span class="s2">"CmdUnconnectedEncoding"</span><span class="p">,</span>
|
|
<span class="s2">"CmdUnconnectedInfo"</span><span class="p">,</span>
|
|
<span class="s2">"CmdUnconnectedScreenreader"</span><span class="p">,</span>
|
|
<span class="p">)</span>
|
|
|
|
<span class="n">MULTISESSION_MODE</span> <span class="o">=</span> <span class="n">settings</span><span class="o">.</span><span class="n">MULTISESSION_MODE</span>
|
|
<span class="n">CONNECTION_SCREEN_MODULE</span> <span class="o">=</span> <span class="n">settings</span><span class="o">.</span><span class="n">CONNECTION_SCREEN_MODULE</span>
|
|
|
|
|
|
<span class="k">def</span> <span class="nf">create_guest_account</span><span class="p">(</span><span class="n">session</span><span class="p">):</span>
|
|
<span class="sd">"""</span>
|
|
<span class="sd"> Creates a guest account/character for this session, if one is available.</span>
|
|
|
|
<span class="sd"> Args:</span>
|
|
<span class="sd"> session (Session): the session which will use the guest account/character.</span>
|
|
|
|
<span class="sd"> Returns:</span>
|
|
<span class="sd"> GUEST_ENABLED (boolean), account (Account):</span>
|
|
<span class="sd"> the boolean is whether guest accounts are enabled at all.</span>
|
|
<span class="sd"> the Account which was created from an available guest name.</span>
|
|
<span class="sd"> """</span>
|
|
<span class="n">enabled</span> <span class="o">=</span> <span class="n">settings</span><span class="o">.</span><span class="n">GUEST_ENABLED</span>
|
|
<span class="n">address</span> <span class="o">=</span> <span class="n">session</span><span class="o">.</span><span class="n">address</span>
|
|
|
|
<span class="c1"># Get account class</span>
|
|
<span class="n">Guest</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_GUEST_TYPECLASS</span><span class="p">)</span>
|
|
|
|
<span class="c1"># Get an available guest account</span>
|
|
<span class="c1"># authenticate() handles its own throttling</span>
|
|
<span class="n">account</span><span class="p">,</span> <span class="n">errors</span> <span class="o">=</span> <span class="n">Guest</span><span class="o">.</span><span class="n">authenticate</span><span class="p">(</span><span class="n">ip</span><span class="o">=</span><span class="n">address</span><span class="p">)</span>
|
|
<span class="k">if</span> <span class="n">account</span><span class="p">:</span>
|
|
<span class="k">return</span> <span class="n">enabled</span><span class="p">,</span> <span class="n">account</span>
|
|
<span class="k">else</span><span class="p">:</span>
|
|
<span class="n">session</span><span class="o">.</span><span class="n">msg</span><span class="p">(</span><span class="s2">"|R</span><span class="si">%s</span><span class="s2">|n"</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">errors</span><span class="p">))</span>
|
|
<span class="k">return</span> <span class="n">enabled</span><span class="p">,</span> <span class="kc">None</span>
|
|
|
|
|
|
<span class="k">def</span> <span class="nf">create_normal_account</span><span class="p">(</span><span class="n">session</span><span class="p">,</span> <span class="n">name</span><span class="p">,</span> <span class="n">password</span><span class="p">):</span>
|
|
<span class="sd">"""</span>
|
|
<span class="sd"> Creates an account with the given name and password.</span>
|
|
|
|
<span class="sd"> Args:</span>
|
|
<span class="sd"> session (Session): the session which is requesting to create an account.</span>
|
|
<span class="sd"> name (str): the name that the account wants to use for login.</span>
|
|
<span class="sd"> password (str): the password desired by this account, for login.</span>
|
|
|
|
<span class="sd"> Returns:</span>
|
|
<span class="sd"> account (Account): the account which was created from the name and password.</span>
|
|
<span class="sd"> """</span>
|
|
<span class="c1"># Get account class</span>
|
|
<span class="n">Account</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_ACCOUNT_TYPECLASS</span><span class="p">)</span>
|
|
|
|
<span class="n">address</span> <span class="o">=</span> <span class="n">session</span><span class="o">.</span><span class="n">address</span>
|
|
|
|
<span class="c1"># Match account name and check password</span>
|
|
<span class="c1"># authenticate() handles all its own throttling</span>
|
|
<span class="n">account</span><span class="p">,</span> <span class="n">errors</span> <span class="o">=</span> <span class="n">Account</span><span class="o">.</span><span class="n">authenticate</span><span class="p">(</span>
|
|
<span class="n">username</span><span class="o">=</span><span class="n">name</span><span class="p">,</span> <span class="n">password</span><span class="o">=</span><span class="n">password</span><span class="p">,</span> <span class="n">ip</span><span class="o">=</span><span class="n">address</span><span class="p">,</span> <span class="n">session</span><span class="o">=</span><span class="n">session</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="c1"># No accountname or password match</span>
|
|
<span class="n">session</span><span class="o">.</span><span class="n">msg</span><span class="p">(</span><span class="s2">"|R</span><span class="si">%s</span><span class="s2">|n"</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">errors</span><span class="p">))</span>
|
|
<span class="k">return</span> <span class="kc">None</span>
|
|
|
|
<span class="k">return</span> <span class="n">account</span>
|
|
|
|
|
|
<div class="viewcode-block" id="CmdUnconnectedConnect"><a class="viewcode-back" href="../../../../api/evennia.commands.default.unloggedin.html#evennia.commands.default.unloggedin.CmdUnconnectedConnect">[docs]</a><span class="k">class</span> <span class="nc">CmdUnconnectedConnect</span><span class="p">(</span><span class="n">COMMAND_DEFAULT_CLASS</span><span class="p">):</span>
|
|
<span class="sd">"""</span>
|
|
<span class="sd"> connect to the game</span>
|
|
|
|
<span class="sd"> Usage (at login screen):</span>
|
|
<span class="sd"> connect accountname password</span>
|
|
<span class="sd"> connect "account name" "pass word"</span>
|
|
|
|
<span class="sd"> Use the create command to first create an account before logging in.</span>
|
|
|
|
<span class="sd"> If you have spaces in your name, enclose it in double quotes.</span>
|
|
<span class="sd"> """</span>
|
|
|
|
<span class="n">key</span> <span class="o">=</span> <span class="s2">"connect"</span>
|
|
<span class="n">aliases</span> <span class="o">=</span> <span class="p">[</span><span class="s2">"conn"</span><span class="p">,</span> <span class="s2">"con"</span><span class="p">,</span> <span class="s2">"co"</span><span class="p">]</span>
|
|
<span class="n">locks</span> <span class="o">=</span> <span class="s2">"cmd:all()"</span> <span class="c1"># not really needed</span>
|
|
<span class="n">arg_regex</span> <span class="o">=</span> <span class="sa">r</span><span class="s2">"\s.*?|$"</span>
|
|
|
|
<div class="viewcode-block" id="CmdUnconnectedConnect.func"><a class="viewcode-back" href="../../../../api/evennia.commands.default.unloggedin.html#evennia.commands.default.unloggedin.CmdUnconnectedConnect.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">"""</span>
|
|
<span class="sd"> Uses the Django admin api. Note that unlogged-in commands</span>
|
|
<span class="sd"> have a unique position in that their func() receives</span>
|
|
<span class="sd"> a session object instead of a source_object like all</span>
|
|
<span class="sd"> other types of logged-in commands (this is because</span>
|
|
<span class="sd"> there is no object yet before the account has logged in)</span>
|
|
<span class="sd"> """</span>
|
|
<span class="n">session</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">caller</span>
|
|
<span class="n">address</span> <span class="o">=</span> <span class="n">session</span><span class="o">.</span><span class="n">address</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="c1"># extract double quote parts</span>
|
|
<span class="n">parts</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">re</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="sa">r</span><span class="s2">"</span><span class="se">\"</span><span class="s2">"</span><span class="p">,</span> <span class="n">args</span><span class="p">)</span> <span class="k">if</span> <span class="n">part</span><span class="o">.</span><span class="n">strip</span><span class="p">()]</span>
|
|
<span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">parts</span><span class="p">)</span> <span class="o">==</span> <span class="mi">1</span><span class="p">:</span>
|
|
<span class="c1"># this was (hopefully) due to no double quotes being found, or a guest login</span>
|
|
<span class="n">parts</span> <span class="o">=</span> <span class="n">parts</span><span class="p">[</span><span class="mi">0</span><span class="p">]</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">1</span><span class="p">)</span>
|
|
|
|
<span class="c1"># Guest login</span>
|
|
<span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">parts</span><span class="p">)</span> <span class="o">==</span> <span class="mi">1</span> <span class="ow">and</span> <span class="n">parts</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">.</span><span class="n">lower</span><span class="p">()</span> <span class="o">==</span> <span class="s2">"guest"</span><span class="p">:</span>
|
|
<span class="c1"># Get Guest typeclass</span>
|
|
<span class="n">Guest</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_GUEST_TYPECLASS</span><span class="p">)</span>
|
|
|
|
<span class="n">account</span><span class="p">,</span> <span class="n">errors</span> <span class="o">=</span> <span class="n">Guest</span><span class="o">.</span><span class="n">authenticate</span><span class="p">(</span><span class="n">ip</span><span class="o">=</span><span class="n">address</span><span class="p">)</span>
|
|
<span class="k">if</span> <span class="n">account</span><span class="p">:</span>
|
|
<span class="n">session</span><span class="o">.</span><span class="n">sessionhandler</span><span class="o">.</span><span class="n">login</span><span class="p">(</span><span class="n">session</span><span class="p">,</span> <span class="n">account</span><span class="p">)</span>
|
|
<span class="k">return</span>
|
|
<span class="k">else</span><span class="p">:</span>
|
|
<span class="n">session</span><span class="o">.</span><span class="n">msg</span><span class="p">(</span><span class="s2">"|R</span><span class="si">%s</span><span class="s2">|n"</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">errors</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">parts</span><span class="p">)</span> <span class="o">!=</span> <span class="mi">2</span><span class="p">:</span>
|
|
<span class="n">session</span><span class="o">.</span><span class="n">msg</span><span class="p">(</span><span class="s2">"</span><span class="se">\n\r</span><span class="s2"> Usage (without <>): connect <name> <password>"</span><span class="p">)</span>
|
|
<span class="k">return</span>
|
|
|
|
<span class="c1"># Get account class</span>
|
|
<span class="n">Account</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_ACCOUNT_TYPECLASS</span><span class="p">)</span>
|
|
|
|
<span class="n">name</span><span class="p">,</span> <span class="n">password</span> <span class="o">=</span> <span class="n">parts</span>
|
|
<span class="n">account</span><span class="p">,</span> <span class="n">errors</span> <span class="o">=</span> <span class="n">Account</span><span class="o">.</span><span class="n">authenticate</span><span class="p">(</span>
|
|
<span class="n">username</span><span class="o">=</span><span class="n">name</span><span class="p">,</span> <span class="n">password</span><span class="o">=</span><span class="n">password</span><span class="p">,</span> <span class="n">ip</span><span class="o">=</span><span class="n">address</span><span class="p">,</span> <span class="n">session</span><span class="o">=</span><span class="n">session</span>
|
|
<span class="p">)</span>
|
|
<span class="k">if</span> <span class="n">account</span><span class="p">:</span>
|
|
<span class="n">session</span><span class="o">.</span><span class="n">sessionhandler</span><span class="o">.</span><span class="n">login</span><span class="p">(</span><span class="n">session</span><span class="p">,</span> <span class="n">account</span><span class="p">)</span>
|
|
<span class="k">else</span><span class="p">:</span>
|
|
<span class="n">session</span><span class="o">.</span><span class="n">msg</span><span class="p">(</span><span class="s2">"|R</span><span class="si">%s</span><span class="s2">|n"</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">errors</span><span class="p">))</span></div></div>
|
|
|
|
|
|
<div class="viewcode-block" id="CmdUnconnectedCreate"><a class="viewcode-back" href="../../../../api/evennia.commands.default.unloggedin.html#evennia.commands.default.unloggedin.CmdUnconnectedCreate">[docs]</a><span class="k">class</span> <span class="nc">CmdUnconnectedCreate</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 account account</span>
|
|
|
|
<span class="sd"> Usage (at login screen):</span>
|
|
<span class="sd"> create <accountname> <password></span>
|
|
<span class="sd"> create "account name" "pass word"</span>
|
|
|
|
<span class="sd"> This creates a new account account.</span>
|
|
|
|
<span class="sd"> If you have spaces in your name, enclose it in double quotes.</span>
|
|
<span class="sd"> """</span>
|
|
|
|
<span class="n">key</span> <span class="o">=</span> <span class="s2">"create"</span>
|
|
<span class="n">aliases</span> <span class="o">=</span> <span class="p">[</span><span class="s2">"cre"</span><span class="p">,</span> <span class="s2">"cr"</span><span class="p">]</span>
|
|
<span class="n">locks</span> <span class="o">=</span> <span class="s2">"cmd:all()"</span>
|
|
<span class="n">arg_regex</span> <span class="o">=</span> <span class="sa">r</span><span class="s2">"\s.*?|$"</span>
|
|
|
|
<div class="viewcode-block" id="CmdUnconnectedCreate.func"><a class="viewcode-back" href="../../../../api/evennia.commands.default.unloggedin.html#evennia.commands.default.unloggedin.CmdUnconnectedCreate.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">"""Do checks and create account"""</span>
|
|
|
|
<span class="n">session</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="o">.</span><span class="n">strip</span><span class="p">()</span>
|
|
|
|
<span class="n">address</span> <span class="o">=</span> <span class="n">session</span><span class="o">.</span><span class="n">address</span>
|
|
|
|
<span class="c1"># Get account class</span>
|
|
<span class="n">Account</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_ACCOUNT_TYPECLASS</span><span class="p">)</span>
|
|
|
|
<span class="c1"># extract double quoted parts</span>
|
|
<span class="n">parts</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">re</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="sa">r</span><span class="s2">"</span><span class="se">\"</span><span class="s2">"</span><span class="p">,</span> <span class="n">args</span><span class="p">)</span> <span class="k">if</span> <span class="n">part</span><span class="o">.</span><span class="n">strip</span><span class="p">()]</span>
|
|
<span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">parts</span><span class="p">)</span> <span class="o">==</span> <span class="mi">1</span><span class="p">:</span>
|
|
<span class="c1"># this was (hopefully) due to no quotes being found</span>
|
|
<span class="n">parts</span> <span class="o">=</span> <span class="n">parts</span><span class="p">[</span><span class="mi">0</span><span class="p">]</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">1</span><span class="p">)</span>
|
|
<span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">parts</span><span class="p">)</span> <span class="o">!=</span> <span class="mi">2</span><span class="p">:</span>
|
|
<span class="n">string</span> <span class="o">=</span> <span class="p">(</span>
|
|
<span class="s2">"</span><span class="se">\n</span><span class="s2"> Usage (without <>): create <name> <password>"</span>
|
|
<span class="s2">"</span><span class="se">\n</span><span class="s2">If <name> or <password> contains spaces, enclose it in double quotes."</span>
|
|
<span class="p">)</span>
|
|
<span class="n">session</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">username</span><span class="p">,</span> <span class="n">password</span> <span class="o">=</span> <span class="n">parts</span>
|
|
|
|
<span class="c1"># pre-normalize username so the user know what they get</span>
|
|
<span class="n">non_normalized_username</span> <span class="o">=</span> <span class="n">username</span>
|
|
<span class="n">username</span> <span class="o">=</span> <span class="n">Account</span><span class="o">.</span><span class="n">normalize_username</span><span class="p">(</span><span class="n">username</span><span class="p">)</span>
|
|
<span class="k">if</span> <span class="n">non_normalized_username</span> <span class="o">!=</span> <span class="n">username</span><span class="p">:</span>
|
|
<span class="n">session</span><span class="o">.</span><span class="n">msg</span><span class="p">(</span><span class="s2">"Note: your username was normalized to strip spaces and remove characters "</span>
|
|
<span class="s2">"that could be visually confusing."</span><span class="p">)</span>
|
|
|
|
<span class="c1"># have the user verify their new account was what they intended</span>
|
|
<span class="n">answer</span> <span class="o">=</span> <span class="k">yield</span><span class="p">(</span><span class="sa">f</span><span class="s2">"You want to create an account '</span><span class="si">{</span><span class="n">username</span><span class="si">}</span><span class="s2">' with password '</span><span class="si">{</span><span class="n">password</span><span class="si">}</span><span class="s2">'."</span>
|
|
<span class="s2">"</span><span class="se">\n</span><span class="s2">Is this what you intended? [Y]/N?"</span><span class="p">)</span>
|
|
<span class="k">if</span> <span class="n">answer</span><span class="o">.</span><span class="n">lower</span><span class="p">()</span> <span class="ow">in</span> <span class="p">(</span><span class="s1">'n'</span><span class="p">,</span> <span class="s1">'no'</span><span class="p">):</span>
|
|
<span class="n">session</span><span class="o">.</span><span class="n">msg</span><span class="p">(</span><span class="s2">"Aborted. If your user name contains spaces, surround it by quotes."</span><span class="p">)</span>
|
|
<span class="k">return</span>
|
|
|
|
<span class="c1"># everything's ok. Create the new account account.</span>
|
|
<span class="n">account</span><span class="p">,</span> <span class="n">errors</span> <span class="o">=</span> <span class="n">Account</span><span class="o">.</span><span class="n">create</span><span class="p">(</span>
|
|
<span class="n">username</span><span class="o">=</span><span class="n">username</span><span class="p">,</span> <span class="n">password</span><span class="o">=</span><span class="n">password</span><span class="p">,</span> <span class="n">ip</span><span class="o">=</span><span class="n">address</span><span class="p">,</span> <span class="n">session</span><span class="o">=</span><span class="n">session</span>
|
|
<span class="p">)</span>
|
|
<span class="k">if</span> <span class="n">account</span><span class="p">:</span>
|
|
<span class="c1"># tell the caller everything went well.</span>
|
|
<span class="n">string</span> <span class="o">=</span> <span class="s2">"A new account '</span><span class="si">%s</span><span class="s2">' was created. Welcome!"</span>
|
|
<span class="k">if</span> <span class="s2">" "</span> <span class="ow">in</span> <span class="n">username</span><span class="p">:</span>
|
|
<span class="n">string</span> <span class="o">+=</span> <span class="p">(</span>
|
|
<span class="s2">"</span><span class="se">\n\n</span><span class="s2">You can now log in with the command 'connect </span><span class="se">\"</span><span class="si">%s</span><span class="se">\"</span><span class="s2"> <your password>'."</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">"</span><span class="se">\n\n</span><span class="s2">You can now log with the command 'connect </span><span class="si">%s</span><span class="s2"> <your password>'."</span>
|
|
<span class="n">session</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">username</span><span class="p">,</span> <span class="n">username</span><span class="p">))</span>
|
|
<span class="k">else</span><span class="p">:</span>
|
|
<span class="n">session</span><span class="o">.</span><span class="n">msg</span><span class="p">(</span><span class="s2">"|R</span><span class="si">%s</span><span class="s2">|n"</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">errors</span><span class="p">))</span></div></div>
|
|
|
|
|
|
<div class="viewcode-block" id="CmdUnconnectedQuit"><a class="viewcode-back" href="../../../../api/evennia.commands.default.unloggedin.html#evennia.commands.default.unloggedin.CmdUnconnectedQuit">[docs]</a><span class="k">class</span> <span class="nc">CmdUnconnectedQuit</span><span class="p">(</span><span class="n">COMMAND_DEFAULT_CLASS</span><span class="p">):</span>
|
|
<span class="sd">"""</span>
|
|
<span class="sd"> quit when in unlogged-in state</span>
|
|
|
|
<span class="sd"> Usage:</span>
|
|
<span class="sd"> quit</span>
|
|
|
|
<span class="sd"> We maintain a different version of the quit command</span>
|
|
<span class="sd"> here for unconnected accounts for the sake of simplicity. The logged in</span>
|
|
<span class="sd"> version is a bit more complicated.</span>
|
|
<span class="sd"> """</span>
|
|
|
|
<span class="n">key</span> <span class="o">=</span> <span class="s2">"quit"</span>
|
|
<span class="n">aliases</span> <span class="o">=</span> <span class="p">[</span><span class="s2">"q"</span><span class="p">,</span> <span class="s2">"qu"</span><span class="p">]</span>
|
|
<span class="n">locks</span> <span class="o">=</span> <span class="s2">"cmd:all()"</span>
|
|
|
|
<div class="viewcode-block" id="CmdUnconnectedQuit.func"><a class="viewcode-back" href="../../../../api/evennia.commands.default.unloggedin.html#evennia.commands.default.unloggedin.CmdUnconnectedQuit.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">"""Simply close the connection."""</span>
|
|
<span class="n">session</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">caller</span>
|
|
<span class="n">session</span><span class="o">.</span><span class="n">sessionhandler</span><span class="o">.</span><span class="n">disconnect</span><span class="p">(</span><span class="n">session</span><span class="p">,</span> <span class="s2">"Good bye! Disconnecting."</span><span class="p">)</span></div></div>
|
|
|
|
|
|
<div class="viewcode-block" id="CmdUnconnectedLook"><a class="viewcode-back" href="../../../../api/evennia.commands.default.unloggedin.html#evennia.commands.default.unloggedin.CmdUnconnectedLook">[docs]</a><span class="k">class</span> <span class="nc">CmdUnconnectedLook</span><span class="p">(</span><span class="n">COMMAND_DEFAULT_CLASS</span><span class="p">):</span>
|
|
<span class="sd">"""</span>
|
|
<span class="sd"> look when in unlogged-in state</span>
|
|
|
|
<span class="sd"> Usage:</span>
|
|
<span class="sd"> look</span>
|
|
|
|
<span class="sd"> This is an unconnected version of the look command for simplicity.</span>
|
|
|
|
<span class="sd"> This is called by the server and kicks everything in gear.</span>
|
|
<span class="sd"> All it does is display the connect screen.</span>
|
|
<span class="sd"> """</span>
|
|
|
|
<span class="n">key</span> <span class="o">=</span> <span class="n">CMD_LOGINSTART</span>
|
|
<span class="n">aliases</span> <span class="o">=</span> <span class="p">[</span><span class="s2">"look"</span><span class="p">,</span> <span class="s2">"l"</span><span class="p">]</span>
|
|
<span class="n">locks</span> <span class="o">=</span> <span class="s2">"cmd:all()"</span>
|
|
|
|
<div class="viewcode-block" id="CmdUnconnectedLook.func"><a class="viewcode-back" href="../../../../api/evennia.commands.default.unloggedin.html#evennia.commands.default.unloggedin.CmdUnconnectedLook.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">"""Show the connect screen."""</span>
|
|
|
|
<span class="n">callables</span> <span class="o">=</span> <span class="n">utils</span><span class="o">.</span><span class="n">callables_from_module</span><span class="p">(</span><span class="n">CONNECTION_SCREEN_MODULE</span><span class="p">)</span>
|
|
<span class="k">if</span> <span class="s2">"connection_screen"</span> <span class="ow">in</span> <span class="n">callables</span><span class="p">:</span>
|
|
<span class="n">connection_screen</span> <span class="o">=</span> <span class="n">callables</span><span class="p">[</span><span class="s2">"connection_screen"</span><span class="p">]()</span>
|
|
<span class="k">else</span><span class="p">:</span>
|
|
<span class="n">connection_screen</span> <span class="o">=</span> <span class="n">utils</span><span class="o">.</span><span class="n">random_string_from_module</span><span class="p">(</span><span class="n">CONNECTION_SCREEN_MODULE</span><span class="p">)</span>
|
|
<span class="k">if</span> <span class="ow">not</span> <span class="n">connection_screen</span><span class="p">:</span>
|
|
<span class="n">connection_screen</span> <span class="o">=</span> <span class="s2">"No connection screen found. Please contact an admin."</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="n">connection_screen</span><span class="p">)</span></div></div>
|
|
|
|
|
|
<div class="viewcode-block" id="CmdUnconnectedHelp"><a class="viewcode-back" href="../../../../api/evennia.commands.default.unloggedin.html#evennia.commands.default.unloggedin.CmdUnconnectedHelp">[docs]</a><span class="k">class</span> <span class="nc">CmdUnconnectedHelp</span><span class="p">(</span><span class="n">COMMAND_DEFAULT_CLASS</span><span class="p">):</span>
|
|
<span class="sd">"""</span>
|
|
<span class="sd"> get help when in unconnected-in state</span>
|
|
|
|
<span class="sd"> Usage:</span>
|
|
<span class="sd"> help</span>
|
|
|
|
<span class="sd"> This is an unconnected version of the help command,</span>
|
|
<span class="sd"> for simplicity. It shows a pane of info.</span>
|
|
<span class="sd"> """</span>
|
|
|
|
<span class="n">key</span> <span class="o">=</span> <span class="s2">"help"</span>
|
|
<span class="n">aliases</span> <span class="o">=</span> <span class="p">[</span><span class="s2">"h"</span><span class="p">,</span> <span class="s2">"?"</span><span class="p">]</span>
|
|
<span class="n">locks</span> <span class="o">=</span> <span class="s2">"cmd:all()"</span>
|
|
|
|
<div class="viewcode-block" id="CmdUnconnectedHelp.func"><a class="viewcode-back" href="../../../../api/evennia.commands.default.unloggedin.html#evennia.commands.default.unloggedin.CmdUnconnectedHelp.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">"""Shows help"""</span>
|
|
|
|
<span class="n">string</span> <span class="o">=</span> <span class="s2">"""</span>
|
|
<span class="s2">You are not yet logged into the game. Commands available at this point:</span>
|
|
|
|
<span class="s2"> |wcreate|n - create a new account</span>
|
|
<span class="s2"> |wconnect|n - connect with an existing account</span>
|
|
<span class="s2"> |wlook|n - re-show the connection screen</span>
|
|
<span class="s2"> |whelp|n - show this help</span>
|
|
<span class="s2"> |wencoding|n - change the text encoding to match your client</span>
|
|
<span class="s2"> |wscreenreader|n - make the server more suitable for use with screen readers</span>
|
|
<span class="s2"> |wquit|n - abort the connection</span>
|
|
|
|
<span class="s2">First create an account e.g. with |wcreate Anna c67jHL8p|n</span>
|
|
<span class="s2">(If you have spaces in your name, use double quotes: |wcreate "Anna the Barbarian" c67jHL8p|n</span>
|
|
<span class="s2">Next you can connect to the game: |wconnect Anna c67jHL8p|n</span>
|
|
|
|
<span class="s2">You can use the |wlook|n command if you want to see the connect screen again.</span>
|
|
|
|
<span class="s2">"""</span>
|
|
|
|
<span class="k">if</span> <span class="n">settings</span><span class="o">.</span><span class="n">STAFF_CONTACT_EMAIL</span><span class="p">:</span>
|
|
<span class="n">string</span> <span class="o">+=</span> <span class="s2">"For support, please contact: </span><span class="si">%s</span><span class="s2">"</span> <span class="o">%</span> <span class="n">settings</span><span class="o">.</span><span class="n">STAFF_CONTACT_EMAIL</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="n">string</span><span class="p">)</span></div></div>
|
|
|
|
|
|
<div class="viewcode-block" id="CmdUnconnectedEncoding"><a class="viewcode-back" href="../../../../api/evennia.commands.default.unloggedin.html#evennia.commands.default.unloggedin.CmdUnconnectedEncoding">[docs]</a><span class="k">class</span> <span class="nc">CmdUnconnectedEncoding</span><span class="p">(</span><span class="n">COMMAND_DEFAULT_CLASS</span><span class="p">):</span>
|
|
<span class="sd">"""</span>
|
|
<span class="sd"> set which text encoding to use in unconnected-in state</span>
|
|
|
|
<span class="sd"> Usage:</span>
|
|
<span class="sd"> encoding/switches [<encoding>]</span>
|
|
|
|
<span class="sd"> Switches:</span>
|
|
<span class="sd"> clear - clear your custom encoding</span>
|
|
|
|
|
|
<span class="sd"> This sets the text encoding for communicating with Evennia. This is mostly</span>
|
|
<span class="sd"> an issue only if you want to use non-ASCII characters (i.e. letters/symbols</span>
|
|
<span class="sd"> not found in English). If you see that your characters look strange (or you</span>
|
|
<span class="sd"> get encoding errors), you should use this command to set the server</span>
|
|
<span class="sd"> encoding to be the same used in your client program.</span>
|
|
|
|
<span class="sd"> Common encodings are utf-8 (default), latin-1, ISO-8859-1 etc.</span>
|
|
|
|
<span class="sd"> If you don't submit an encoding, the current encoding will be displayed</span>
|
|
<span class="sd"> instead.</span>
|
|
<span class="sd"> """</span>
|
|
|
|
<span class="n">key</span> <span class="o">=</span> <span class="s2">"encoding"</span>
|
|
<span class="n">aliases</span> <span class="o">=</span> <span class="s2">"encode"</span>
|
|
<span class="n">locks</span> <span class="o">=</span> <span class="s2">"cmd:all()"</span>
|
|
|
|
<div class="viewcode-block" id="CmdUnconnectedEncoding.func"><a class="viewcode-back" href="../../../../api/evennia.commands.default.unloggedin.html#evennia.commands.default.unloggedin.CmdUnconnectedEncoding.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">"""</span>
|
|
<span class="sd"> Sets the encoding.</span>
|
|
<span class="sd"> """</span>
|
|
|
|
<span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">session</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
|
|
<span class="k">return</span>
|
|
|
|
<span class="n">sync</span> <span class="o">=</span> <span class="kc">False</span>
|
|
<span class="k">if</span> <span class="s2">"clear"</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"># remove customization</span>
|
|
<span class="n">old_encoding</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">session</span><span class="o">.</span><span class="n">protocol_flags</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">"ENCODING"</span><span class="p">,</span> <span class="kc">None</span><span class="p">)</span>
|
|
<span class="k">if</span> <span class="n">old_encoding</span><span class="p">:</span>
|
|
<span class="n">string</span> <span class="o">=</span> <span class="s2">"Your custom text encoding ('</span><span class="si">%s</span><span class="s2">') was cleared."</span> <span class="o">%</span> <span class="n">old_encoding</span>
|
|
<span class="k">else</span><span class="p">:</span>
|
|
<span class="n">string</span> <span class="o">=</span> <span class="s2">"No custom encoding was set."</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">session</span><span class="o">.</span><span class="n">protocol_flags</span><span class="p">[</span><span class="s2">"ENCODING"</span><span class="p">]</span> <span class="o">=</span> <span class="s2">"utf-8"</span>
|
|
<span class="n">sync</span> <span class="o">=</span> <span class="kc">True</span>
|
|
<span class="k">elif</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">args</span><span class="p">:</span>
|
|
<span class="c1"># just list the encodings supported</span>
|
|
<span class="n">pencoding</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">session</span><span class="o">.</span><span class="n">protocol_flags</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">"ENCODING"</span><span class="p">,</span> <span class="kc">None</span><span class="p">)</span>
|
|
<span class="n">string</span> <span class="o">=</span> <span class="s2">""</span>
|
|
<span class="k">if</span> <span class="n">pencoding</span><span class="p">:</span>
|
|
<span class="n">string</span> <span class="o">+=</span> <span class="p">(</span>
|
|
<span class="s2">"Default encoding: |g</span><span class="si">%s</span><span class="s2">|n (change with |wencoding <encoding>|n)"</span> <span class="o">%</span> <span class="n">pencoding</span>
|
|
<span class="p">)</span>
|
|
<span class="n">encodings</span> <span class="o">=</span> <span class="n">settings</span><span class="o">.</span><span class="n">ENCODINGS</span>
|
|
<span class="k">if</span> <span class="n">encodings</span><span class="p">:</span>
|
|
<span class="n">string</span> <span class="o">+=</span> <span class="p">(</span>
|
|
<span class="s2">"</span><span class="se">\n</span><span class="s2">Server's alternative encodings (tested in this order):</span><span class="se">\n</span><span class="s2"> |g</span><span class="si">%s</span><span class="s2">|n"</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">encodings</span><span class="p">)</span>
|
|
<span class="p">)</span>
|
|
<span class="k">if</span> <span class="ow">not</span> <span class="n">string</span><span class="p">:</span>
|
|
<span class="n">string</span> <span class="o">=</span> <span class="s2">"No encodings found."</span>
|
|
<span class="k">else</span><span class="p">:</span>
|
|
<span class="c1"># change encoding</span>
|
|
<span class="n">old_encoding</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">session</span><span class="o">.</span><span class="n">protocol_flags</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">"ENCODING"</span><span class="p">,</span> <span class="kc">None</span><span class="p">)</span>
|
|
<span class="n">encoding</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">args</span>
|
|
<span class="k">try</span><span class="p">:</span>
|
|
<span class="n">codecs_lookup</span><span class="p">(</span><span class="n">encoding</span><span class="p">)</span>
|
|
<span class="k">except</span> <span class="ne">LookupError</span><span class="p">:</span>
|
|
<span class="n">string</span> <span class="o">=</span> <span class="p">(</span>
|
|
<span class="s2">"|rThe encoding '|w</span><span class="si">%s</span><span class="s2">|r' is invalid. Keeping the previous encoding '|w</span><span class="si">%s</span><span class="s2">|r'.|n"</span>
|
|
<span class="o">%</span> <span class="p">(</span><span class="n">encoding</span><span class="p">,</span> <span class="n">old_encoding</span><span class="p">)</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">session</span><span class="o">.</span><span class="n">protocol_flags</span><span class="p">[</span><span class="s2">"ENCODING"</span><span class="p">]</span> <span class="o">=</span> <span class="n">encoding</span>
|
|
<span class="n">string</span> <span class="o">=</span> <span class="s2">"Your custom text encoding was changed from '|w</span><span class="si">%s</span><span class="s2">|n' to '|w</span><span class="si">%s</span><span class="s2">|n'."</span> <span class="o">%</span> <span class="p">(</span>
|
|
<span class="n">old_encoding</span><span class="p">,</span>
|
|
<span class="n">encoding</span><span class="p">,</span>
|
|
<span class="p">)</span>
|
|
<span class="n">sync</span> <span class="o">=</span> <span class="kc">True</span>
|
|
<span class="k">if</span> <span class="n">sync</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">sessionhandler</span><span class="o">.</span><span class="n">session_portal_sync</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">session</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="n">string</span><span class="o">.</span><span class="n">strip</span><span class="p">())</span></div></div>
|
|
|
|
|
|
<div class="viewcode-block" id="CmdUnconnectedScreenreader"><a class="viewcode-back" href="../../../../api/evennia.commands.default.unloggedin.html#evennia.commands.default.unloggedin.CmdUnconnectedScreenreader">[docs]</a><span class="k">class</span> <span class="nc">CmdUnconnectedScreenreader</span><span class="p">(</span><span class="n">COMMAND_DEFAULT_CLASS</span><span class="p">):</span>
|
|
<span class="sd">"""</span>
|
|
<span class="sd"> Activate screenreader mode.</span>
|
|
|
|
<span class="sd"> Usage:</span>
|
|
<span class="sd"> screenreader</span>
|
|
|
|
<span class="sd"> Used to flip screenreader mode on and off before logging in (when</span>
|
|
<span class="sd"> logged in, use option screenreader on).</span>
|
|
<span class="sd"> """</span>
|
|
|
|
<span class="n">key</span> <span class="o">=</span> <span class="s2">"screenreader"</span>
|
|
|
|
<div class="viewcode-block" id="CmdUnconnectedScreenreader.func"><a class="viewcode-back" href="../../../../api/evennia.commands.default.unloggedin.html#evennia.commands.default.unloggedin.CmdUnconnectedScreenreader.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">"""Flips screenreader setting."""</span>
|
|
<span class="n">new_setting</span> <span class="o">=</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">session</span><span class="o">.</span><span class="n">protocol_flags</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">"SCREENREADER"</span><span class="p">,</span> <span class="kc">False</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">protocol_flags</span><span class="p">[</span><span class="s2">"SCREENREADER"</span><span class="p">]</span> <span class="o">=</span> <span class="n">new_setting</span>
|
|
<span class="n">string</span> <span class="o">=</span> <span class="s2">"Screenreader mode turned |w</span><span class="si">%s</span><span class="s2">|n."</span> <span class="o">%</span> <span class="p">(</span><span class="s2">"on"</span> <span class="k">if</span> <span class="n">new_setting</span> <span class="k">else</span> <span class="s2">"off"</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="n">string</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">sessionhandler</span><span class="o">.</span><span class="n">session_portal_sync</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">session</span><span class="p">)</span></div></div>
|
|
|
|
|
|
<div class="viewcode-block" id="CmdUnconnectedInfo"><a class="viewcode-back" href="../../../../api/evennia.commands.default.unloggedin.html#evennia.commands.default.unloggedin.CmdUnconnectedInfo">[docs]</a><span class="k">class</span> <span class="nc">CmdUnconnectedInfo</span><span class="p">(</span><span class="n">COMMAND_DEFAULT_CLASS</span><span class="p">):</span>
|
|
<span class="sd">"""</span>
|
|
<span class="sd"> Provides MUDINFO output, so that Evennia games can be added to Mudconnector</span>
|
|
<span class="sd"> and Mudstats. Sadly, the MUDINFO specification seems to have dropped off the</span>
|
|
<span class="sd"> face of the net, but it is still used by some crawlers. This implementation</span>
|
|
<span class="sd"> was created by looking at the MUDINFO implementation in MUX2, TinyMUSH, Rhost,</span>
|
|
<span class="sd"> and PennMUSH.</span>
|
|
<span class="sd"> """</span>
|
|
|
|
<span class="n">key</span> <span class="o">=</span> <span class="s2">"info"</span>
|
|
<span class="n">locks</span> <span class="o">=</span> <span class="s2">"cmd:all()"</span>
|
|
|
|
<div class="viewcode-block" id="CmdUnconnectedInfo.func"><a class="viewcode-back" href="../../../../api/evennia.commands.default.unloggedin.html#evennia.commands.default.unloggedin.CmdUnconnectedInfo.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="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">"## BEGIN INFO 1.1</span><span class="se">\n</span><span class="s2">Name: </span><span class="si">%s</span><span class="se">\n</span><span class="s2">Uptime: </span><span class="si">%s</span><span class="se">\n</span><span class="s2">Connected: </span><span class="si">%d</span><span class="se">\n</span><span class="s2">Version: Evennia </span><span class="si">%s</span><span class="se">\n</span><span class="s2">## END INFO"</span>
|
|
<span class="o">%</span> <span class="p">(</span>
|
|
<span class="n">settings</span><span class="o">.</span><span class="n">SERVERNAME</span><span class="p">,</span>
|
|
<span class="n">datetime</span><span class="o">.</span><span class="n">datetime</span><span class="o">.</span><span class="n">fromtimestamp</span><span class="p">(</span><span class="n">gametime</span><span class="o">.</span><span class="n">SERVER_START_TIME</span><span class="p">)</span><span class="o">.</span><span class="n">ctime</span><span class="p">(),</span>
|
|
<span class="n">SESSIONS</span><span class="o">.</span><span class="n">account_count</span><span class="p">(),</span>
|
|
<span class="n">utils</span><span class="o">.</span><span class="n">get_evennia_version</span><span class="p">(),</span>
|
|
<span class="p">)</span>
|
|
<span class="p">)</span></div></div>
|
|
|
|
|
|
<span class="k">def</span> <span class="nf">_create_account</span><span class="p">(</span><span class="n">session</span><span class="p">,</span> <span class="n">accountname</span><span class="p">,</span> <span class="n">password</span><span class="p">,</span> <span class="n">permissions</span><span class="p">,</span> <span class="n">typeclass</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">email</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span>
|
|
<span class="sd">"""</span>
|
|
<span class="sd"> Helper function, creates an account of the specified typeclass.</span>
|
|
<span class="sd"> """</span>
|
|
<span class="k">try</span><span class="p">:</span>
|
|
<span class="n">new_account</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">accountname</span><span class="p">,</span> <span class="n">email</span><span class="p">,</span> <span class="n">password</span><span class="p">,</span> <span class="n">permissions</span><span class="o">=</span><span class="n">permissions</span><span class="p">,</span> <span class="n">typeclass</span><span class="o">=</span><span class="n">typeclass</span>
|
|
<span class="p">)</span>
|
|
|
|
<span class="k">except</span> <span class="ne">Exception</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span>
|
|
<span class="n">session</span><span class="o">.</span><span class="n">msg</span><span class="p">(</span>
|
|
<span class="s2">"There was an error creating the Account:</span><span class="se">\n</span><span class="si">%s</span><span class="se">\n</span><span class="s2"> If this problem persists, contact an admin."</span>
|
|
<span class="o">%</span> <span class="n">e</span>
|
|
<span class="p">)</span>
|
|
<span class="n">logger</span><span class="o">.</span><span class="n">log_trace</span><span class="p">()</span>
|
|
<span class="k">return</span> <span class="kc">False</span>
|
|
|
|
<span class="c1"># This needs to be set so the engine knows this account is</span>
|
|
<span class="c1"># logging in for the first time. (so it knows to call the right</span>
|
|
<span class="c1"># hooks during login later)</span>
|
|
<span class="n">new_account</span><span class="o">.</span><span class="n">db</span><span class="o">.</span><span class="n">FIRST_LOGIN</span> <span class="o">=</span> <span class="kc">True</span>
|
|
|
|
<span class="c1"># join the new account to the public channel</span>
|
|
<span class="n">pchannel</span> <span class="o">=</span> <span class="n">ChannelDB</span><span class="o">.</span><span class="n">objects</span><span class="o">.</span><span class="n">get_channel</span><span class="p">(</span><span class="n">settings</span><span class="o">.</span><span class="n">DEFAULT_CHANNELS</span><span class="p">[</span><span class="mi">0</span><span class="p">][</span><span class="s2">"key"</span><span class="p">])</span>
|
|
<span class="k">if</span> <span class="ow">not</span> <span class="n">pchannel</span> <span class="ow">or</span> <span class="ow">not</span> <span class="n">pchannel</span><span class="o">.</span><span class="n">connect</span><span class="p">(</span><span class="n">new_account</span><span class="p">):</span>
|
|
<span class="n">string</span> <span class="o">=</span> <span class="s2">"New account '</span><span class="si">%s</span><span class="s2">' could not connect to public channel!"</span> <span class="o">%</span> <span class="n">new_account</span><span class="o">.</span><span class="n">key</span>
|
|
<span class="n">logger</span><span class="o">.</span><span class="n">log_err</span><span class="p">(</span><span class="n">string</span><span class="p">)</span>
|
|
<span class="k">return</span> <span class="n">new_account</span>
|
|
|
|
|
|
<span class="k">def</span> <span class="nf">_create_character</span><span class="p">(</span><span class="n">session</span><span class="p">,</span> <span class="n">new_account</span><span class="p">,</span> <span class="n">typeclass</span><span class="p">,</span> <span class="n">home</span><span class="p">,</span> <span class="n">permissions</span><span class="p">):</span>
|
|
<span class="sd">"""</span>
|
|
<span class="sd"> Helper function, creates a character based on an account's name.</span>
|
|
<span class="sd"> This is meant for Guest and MULTISESSION_MODE < 2 situations.</span>
|
|
<span class="sd"> """</span>
|
|
<span class="k">try</span><span class="p">:</span>
|
|
<span class="n">new_character</span> <span class="o">=</span> <span class="n">create</span><span class="o">.</span><span class="n">create_object</span><span class="p">(</span>
|
|
<span class="n">typeclass</span><span class="p">,</span> <span class="n">key</span><span class="o">=</span><span class="n">new_account</span><span class="o">.</span><span class="n">key</span><span class="p">,</span> <span class="n">home</span><span class="o">=</span><span class="n">home</span><span class="p">,</span> <span class="n">permissions</span><span class="o">=</span><span class="n">permissions</span>
|
|
<span class="p">)</span>
|
|
<span class="c1"># set playable character list</span>
|
|
<span class="n">new_account</span><span class="o">.</span><span class="n">db</span><span class="o">.</span><span class="n">_playable_characters</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">new_character</span><span class="p">)</span>
|
|
|
|
<span class="c1"># allow only the character itself and the account to puppet this character (and Developers).</span>
|
|
<span class="n">new_character</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="s2">"puppet:id(</span><span class="si">%i</span><span class="s2">) or pid(</span><span class="si">%i</span><span class="s2">) or perm(Developer) or pperm(Developer)"</span>
|
|
<span class="o">%</span> <span class="p">(</span><span class="n">new_character</span><span class="o">.</span><span class="n">id</span><span class="p">,</span> <span class="n">new_account</span><span class="o">.</span><span class="n">id</span><span class="p">)</span>
|
|
<span class="p">)</span>
|
|
|
|
<span class="c1"># If no description is set, set a default description</span>
|
|
<span class="k">if</span> <span class="ow">not</span> <span class="n">new_character</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="n">new_character</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="s2">"This is a character."</span>
|
|
<span class="c1"># We need to set this to have ic auto-connect to this character</span>
|
|
<span class="n">new_account</span><span class="o">.</span><span class="n">db</span><span class="o">.</span><span class="n">_last_puppet</span> <span class="o">=</span> <span class="n">new_character</span>
|
|
<span class="k">except</span> <span class="ne">Exception</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span>
|
|
<span class="n">session</span><span class="o">.</span><span class="n">msg</span><span class="p">(</span>
|
|
<span class="s2">"There was an error creating the Character:</span><span class="se">\n</span><span class="si">%s</span><span class="se">\n</span><span class="s2"> If this problem persists, contact an admin."</span>
|
|
<span class="o">%</span> <span class="n">e</span>
|
|
<span class="p">)</span>
|
|
<span class="n">logger</span><span class="o">.</span><span class="n">log_trace</span><span class="p">()</span>
|
|
</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>Links</h3>
|
|
<ul>
|
|
<li><a href="https://www.evennia.com">Home page</a> </li>
|
|
<li><a href="https://github.com/evennia/evennia">Evennia Github</a> </li>
|
|
<li><a href="http://games.evennia.com">Game Index</a> </li>
|
|
<li>
|
|
<a href="https://discord.gg/AJJpcRUhtF">Discord</a> -
|
|
<a href="https://github.com/evennia/evennia/discussions">Discussions</a> -
|
|
<a href="https://evennia.blogspot.com/">Blog</a>
|
|
</li>
|
|
</ul>
|
|
<h3>Versions</h3>
|
|
<ul>
|
|
<li><a href="unloggedin.html">1.0-dev (develop branch)</a></li>
|
|
<li><a href="../../../../../0.95/index.html">0.95 (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.unloggedin</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> |