Updated HTML docs

This commit is contained in:
Griatch 2021-04-25 00:29:47 +02:00
parent 3030a621a8
commit b092cbba9a
62 changed files with 528 additions and 171 deletions

View file

@ -1540,7 +1540,7 @@
<span class="p">)</span>
<span class="p">)</span>
<span class="n">result</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="s2">&quot;</span><span class="se">\n\n</span><span class="s2"> |whelp|n - more commands&quot;</span><span class="p">)</span>
<span class="n">result</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="s2">&quot;</span><span class="se">\n</span><span class="s2"> |wooc &lt;Text&gt;|n - talk on public channel&quot;</span><span class="p">)</span>
<span class="n">result</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="s2">&quot;</span><span class="se">\n</span><span class="s2"> |wpublic &lt;Text&gt;|n - talk on public channel&quot;</span><span class="p">)</span>
<span class="n">charmax</span> <span class="o">=</span> <span class="n">_MAX_NR_CHARACTERS</span>

View file

@ -58,6 +58,13 @@
<span class="kn">from</span> <span class="nn">evennia.utils.ansi</span> <span class="kn">import</span> <span class="n">ANSIString</span>
<div class="viewcode-block" id="InterruptCommand"><a class="viewcode-back" href="../../../api/evennia.commands.command.html#evennia.commands.cmdhandler.InterruptCommand">[docs]</a><span class="k">class</span> <span class="nc">InterruptCommand</span><span class="p">(</span><span class="ne">Exception</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;Cleanly interrupt a command.&quot;&quot;&quot;</span>
<span class="k">pass</span></div>
<span class="k">def</span> <span class="nf">_init_command</span><span class="p">(</span><span class="bp">cls</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> Helper command.</span>
@ -708,13 +715,6 @@
<span class="k">if</span> <span class="s2">&quot;mode&quot;</span> <span class="ow">not</span> <span class="ow">in</span> <span class="n">kwargs</span><span class="p">:</span>
<span class="n">kwargs</span><span class="p">[</span><span class="s2">&quot;mode&quot;</span><span class="p">]</span> <span class="o">=</span> <span class="s2">&quot;footer&quot;</span>
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_render_decoration</span><span class="p">(</span><span class="o">*</span><span class="n">args</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">)</span></div></div>
<div class="viewcode-block" id="InterruptCommand"><a class="viewcode-back" href="../../../api/evennia.commands.command.html#evennia.commands.cmdhandler.InterruptCommand">[docs]</a><span class="k">class</span> <span class="nc">InterruptCommand</span><span class="p">(</span><span class="ne">Exception</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;Cleanly interrupt a command.&quot;&quot;&quot;</span>
<span class="k">pass</span></div>
</pre></div>
<div class="clearer"></div>

View file

@ -523,7 +523,7 @@
<span class="k">return</span> <span class="n">string</span><span class="p">,</span> <span class="n">mapping</span></div>
<div class="viewcode-block" id="send_emote"><a class="viewcode-back" href="../../../api/evennia.contrib.rpsystem.html#evennia.contrib.rpsystem.send_emote">[docs]</a><span class="k">def</span> <span class="nf">send_emote</span><span class="p">(</span><span class="n">sender</span><span class="p">,</span> <span class="n">receivers</span><span class="p">,</span> <span class="n">emote</span><span class="p">,</span> <span class="n">anonymous_add</span><span class="o">=</span><span class="s2">&quot;first&quot;</span><span class="p">):</span>
<div class="viewcode-block" id="send_emote"><a class="viewcode-back" href="../../../api/evennia.contrib.rpsystem.html#evennia.contrib.rpsystem.send_emote">[docs]</a><span class="k">def</span> <span class="nf">send_emote</span><span class="p">(</span><span class="n">sender</span><span class="p">,</span> <span class="n">receivers</span><span class="p">,</span> <span class="n">emote</span><span class="p">,</span> <span class="n">anonymous_add</span><span class="o">=</span><span class="s2">&quot;first&quot;</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> Main access function for distribute an emote.</span>
@ -551,7 +551,9 @@
<span class="c1"># we escape the object mappings since we&#39;ll do the language ones first</span>
<span class="c1"># (the text could have nested object mappings).</span>
<span class="n">emote</span> <span class="o">=</span> <span class="n">_RE_REF</span><span class="o">.</span><span class="n">sub</span><span class="p">(</span><span class="sa">r</span><span class="s2">&quot;{{#\1}}&quot;</span><span class="p">,</span> <span class="n">emote</span><span class="p">)</span>
<span class="c1"># if anonymous_add is passed as a kwarg, collect and remove it from kwargs</span>
<span class="k">if</span> <span class="s1">&#39;anonymous_add&#39;</span> <span class="ow">in</span> <span class="n">kwargs</span><span class="p">:</span>
<span class="n">anonymous_add</span> <span class="o">=</span> <span class="n">kwargs</span><span class="o">.</span><span class="n">pop</span><span class="p">(</span><span class="s1">&#39;anonymous_add&#39;</span><span class="p">)</span>
<span class="k">if</span> <span class="n">anonymous_add</span> <span class="ow">and</span> <span class="ow">not</span> <span class="s2">&quot;#</span><span class="si">%i</span><span class="s2">&quot;</span> <span class="o">%</span> <span class="n">sender</span><span class="o">.</span><span class="n">id</span> <span class="ow">in</span> <span class="n">obj_mapping</span><span class="p">:</span>
<span class="c1"># no self-reference in the emote - add to the end</span>
<span class="n">key</span> <span class="o">=</span> <span class="s2">&quot;#</span><span class="si">%i</span><span class="s2">&quot;</span> <span class="o">%</span> <span class="n">sender</span><span class="o">.</span><span class="n">id</span>
@ -609,7 +611,7 @@
<span class="n">receiver_sdesc_mapping</span><span class="p">[</span><span class="n">rkey</span><span class="p">]</span> <span class="o">=</span> <span class="n">process_sdesc</span><span class="p">(</span><span class="n">receiver</span><span class="o">.</span><span class="n">key</span><span class="p">,</span> <span class="n">receiver</span><span class="p">)</span>
<span class="c1"># do the template replacement of the sdesc/recog {#num} markers</span>
<span class="n">receiver</span><span class="o">.</span><span class="n">msg</span><span class="p">(</span><span class="n">sendemote</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="o">**</span><span class="n">receiver_sdesc_mapping</span><span class="p">))</span></div>
<span class="n">receiver</span><span class="o">.</span><span class="n">msg</span><span class="p">(</span><span class="n">sendemote</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="o">**</span><span class="n">receiver_sdesc_mapping</span><span class="p">),</span> <span class="n">from_obj</span><span class="o">=</span><span class="n">sender</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">)</span></div>
<span class="c1"># ------------------------------------------------------------</span>

View file

@ -716,7 +716,7 @@
<span class="n">logger</span><span class="o">.</span><span class="n">log_trace</span><span class="p">()</span>
<span class="n">kwargs</span><span class="p">[</span><span class="s2">&quot;options&quot;</span><span class="p">]</span> <span class="o">=</span> <span class="n">options</span>
<span class="k">try</span><span class="p">:</span>
<span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">at_msg_receive</span><span class="p">(</span><span class="n">text</span><span class="o">=</span><span class="n">text</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">):</span>
<span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">at_msg_receive</span><span class="p">(</span><span class="n">text</span><span class="o">=</span><span class="n">text</span><span class="p">,</span> <span class="n">from_obj</span><span class="o">=</span><span class="n">from_obj</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">):</span>
<span class="c1"># if at_msg_receive returns false, we abort message to this object</span>
<span class="k">return</span>
<span class="k">except</span> <span class="ne">Exception</span><span class="p">:</span>
@ -1561,7 +1561,7 @@
<span class="p">}</span>
<span class="p">)</span>
<span class="n">location</span><span class="o">.</span><span class="n">msg_contents</span><span class="p">(</span><span class="n">string</span><span class="p">,</span> <span class="n">exclude</span><span class="o">=</span><span class="p">(</span><span class="bp">self</span><span class="p">,),</span> <span class="n">mapping</span><span class="o">=</span><span class="n">mapping</span><span class="p">)</span></div>
<span class="n">location</span><span class="o">.</span><span class="n">msg_contents</span><span class="p">(</span><span class="n">string</span><span class="p">,</span> <span class="n">exclude</span><span class="o">=</span><span class="p">(</span><span class="bp">self</span><span class="p">,),</span> <span class="n">from_obj</span><span class="o">=</span><span class="bp">self</span><span class="p">,</span> <span class="n">mapping</span><span class="o">=</span><span class="n">mapping</span><span class="p">)</span></div>
<div class="viewcode-block" id="DefaultObject.announce_move_to"><a class="viewcode-back" href="../../../api/evennia.objects.objects.html#evennia.objects.objects.DefaultObject.announce_move_to">[docs]</a> <span class="k">def</span> <span class="nf">announce_move_to</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">source_location</span><span class="p">,</span> <span class="n">msg</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">mapping</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
@ -1623,7 +1623,7 @@
<span class="p">}</span>
<span class="p">)</span>
<span class="n">destination</span><span class="o">.</span><span class="n">msg_contents</span><span class="p">(</span><span class="n">string</span><span class="p">,</span> <span class="n">exclude</span><span class="o">=</span><span class="p">(</span><span class="bp">self</span><span class="p">,),</span> <span class="n">mapping</span><span class="o">=</span><span class="n">mapping</span><span class="p">)</span></div>
<span class="n">destination</span><span class="o">.</span><span class="n">msg_contents</span><span class="p">(</span><span class="n">string</span><span class="p">,</span> <span class="n">exclude</span><span class="o">=</span><span class="p">(</span><span class="bp">self</span><span class="p">,),</span> <span class="n">from_obj</span><span class="o">=</span><span class="bp">self</span><span class="p">,</span> <span class="n">mapping</span><span class="o">=</span><span class="n">mapping</span><span class="p">)</span></div>
<div class="viewcode-block" id="DefaultObject.at_after_move"><a class="viewcode-back" href="../../../api/evennia.objects.objects.html#evennia.objects.objects.DefaultObject.at_after_move">[docs]</a> <span class="k">def</span> <span class="nf">at_after_move</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">source_location</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>

View file

@ -425,10 +425,12 @@
<span class="k">else</span><span class="p">:</span>
<span class="n">mod_matches</span> <span class="o">=</span> <span class="n">_MODULE_PROTOTYPES</span>
<span class="n">allow_fuzzy</span> <span class="o">=</span> <span class="kc">True</span>
<span class="k">if</span> <span class="n">key</span><span class="p">:</span>
<span class="k">if</span> <span class="n">key</span> <span class="ow">in</span> <span class="n">mod_matches</span><span class="p">:</span>
<span class="c1"># exact match</span>
<span class="n">module_prototypes</span> <span class="o">=</span> <span class="p">[</span><span class="n">mod_matches</span><span class="p">[</span><span class="n">key</span><span class="p">]]</span>
<span class="n">allow_fuzzy</span> <span class="o">=</span> <span class="kc">False</span>
<span class="k">else</span><span class="p">:</span>
<span class="c1"># fuzzy matching</span>
<span class="n">module_prototypes</span> <span class="o">=</span> <span class="p">[</span>
@ -452,7 +454,7 @@
<span class="k">if</span> <span class="n">key</span><span class="p">:</span>
<span class="c1"># exact or partial match on key</span>
<span class="n">exact_match</span> <span class="o">=</span> <span class="n">db_matches</span><span class="o">.</span><span class="n">filter</span><span class="p">(</span><span class="n">Q</span><span class="p">(</span><span class="n">db_key__iexact</span><span class="o">=</span><span class="n">key</span><span class="p">))</span><span class="o">.</span><span class="n">order_by</span><span class="p">(</span><span class="s2">&quot;db_key&quot;</span><span class="p">)</span>
<span class="k">if</span> <span class="ow">not</span> <span class="n">exact_match</span><span class="p">:</span>
<span class="k">if</span> <span class="ow">not</span> <span class="n">exact_match</span> <span class="ow">and</span> <span class="n">allow_fuzzy</span><span class="p">:</span>
<span class="c1"># try with partial match instead</span>
<span class="n">db_matches</span> <span class="o">=</span> <span class="n">db_matches</span><span class="o">.</span><span class="n">filter</span><span class="p">(</span><span class="n">Q</span><span class="p">(</span><span class="n">db_key__icontains</span><span class="o">=</span><span class="n">key</span><span class="p">))</span><span class="o">.</span><span class="n">order_by</span><span class="p">(</span><span class="s2">&quot;db_key&quot;</span><span class="p">)</span>
<span class="k">else</span><span class="p">:</span>
@ -469,7 +471,7 @@
<span class="n">nmodules</span> <span class="o">=</span> <span class="nb">len</span><span class="p">(</span><span class="n">module_prototypes</span><span class="p">)</span>
<span class="n">ndbprots</span> <span class="o">=</span> <span class="n">db_matches</span><span class="o">.</span><span class="n">count</span><span class="p">()</span>
<span class="k">if</span> <span class="n">nmodules</span> <span class="o">+</span> <span class="n">ndbprots</span> <span class="o">!=</span> <span class="mi">1</span><span class="p">:</span>
<span class="k">raise</span> <span class="ne">KeyError</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Found </span><span class="si">{</span><span class="n">nmodules</span> <span class="o">+</span> <span class="n">ndbprots</span><span class="si">}</span><span class="s2"> matching prototypes.&quot;</span><span class="p">)</span>
<span class="k">raise</span> <span class="ne">KeyError</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Found </span><span class="si">{</span><span class="n">nmodules</span> <span class="o">+</span> <span class="n">ndbprots</span><span class="si">}</span><span class="s2"> matching prototypes </span><span class="si">{</span><span class="n">module_prototypes</span><span class="si">}</span><span class="s2">.&quot;</span><span class="p">)</span>
<span class="k">if</span> <span class="n">return_iterators</span><span class="p">:</span>
<span class="c1"># trying to get the entire set of prototypes - we must paginate</span>

View file

@ -106,7 +106,7 @@
<span class="s2">&quot;replaces and generalizes that which inlinefuncs used to do).&quot;</span><span class="p">)</span>
<span class="k">if</span> <span class="nb">hasattr</span><span class="p">(</span><span class="n">settings</span><span class="p">,</span> <span class="s2">&quot;INLINEFUNC_ENABLED&quot;</span><span class="p">):</span>
<span class="k">raise</span> <span class="ne">DeprecationWarning</span><span class="p">(</span><span class="n">depstring</span><span class="o">.</span><span class="n">format</span><span class="p">(</span>
<span class="s2">&quot;settings.INLINEFUNC_ENABLED&quot;</span><span class="p">,</span> <span class="s2">&quot;FUNCPARSER_PARSE_OUTGOING_MESSAGES_ENABLE&quot;</span><span class="p">))</span>
<span class="s2">&quot;settings.INLINEFUNC_ENABLED&quot;</span><span class="p">,</span> <span class="s2">&quot;FUNCPARSER_PARSE_OUTGOING_MESSAGES_ENABLED&quot;</span><span class="p">))</span>
<span class="k">if</span> <span class="nb">hasattr</span><span class="p">(</span><span class="n">settings</span><span class="p">,</span> <span class="s2">&quot;INLINEFUNC_STACK_MAXSIZE&quot;</span><span class="p">):</span>
<span class="k">raise</span> <span class="ne">DeprecationWarning</span><span class="p">(</span><span class="n">depstring</span><span class="o">.</span><span class="n">format</span><span class="p">(</span>
<span class="s2">&quot;settings.INLINEFUNC_STACK_MAXSIZE&quot;</span><span class="p">,</span> <span class="s2">&quot;FUNCPARSER_MAX_NESTING&quot;</span><span class="p">))</span>

View file

@ -161,7 +161,7 @@
<span class="n">_MAINTENANCE_COUNT</span> <span class="o">+=</span> <span class="mi">1</span>
<span class="k">if</span> <span class="n">_MAINTENANCE_COUNT</span> <span class="o">%</span> <span class="p">(</span><span class="mi">3600</span> <span class="o">*</span> <span class="mi">7</span><span class="p">)</span> <span class="o">==</span> <span class="mi">0</span><span class="p">:</span>
<span class="k">if</span> <span class="n">_MAINTENANCE_COUNT</span> <span class="o">%</span> <span class="p">(</span><span class="mi">60</span> <span class="o">*</span> <span class="mi">7</span><span class="p">)</span> <span class="o">==</span> <span class="mi">0</span><span class="p">:</span>
<span class="c1"># drop database connection every 7 hrs to avoid default timeouts on MySQL</span>
<span class="c1"># (see https://github.com/evennia/evennia/issues/1376)</span>
<span class="n">connection</span><span class="o">.</span><span class="n">close</span><span class="p">()</span>

View file

@ -182,13 +182,16 @@
<span class="n">_GAMETIME_MODULE</span><span class="o">.</span><span class="n">SERVER_RUNTIME_LAST_UPDATED</span> <span class="o">=</span> <span class="n">now</span>
<span class="n">ServerConfig</span><span class="o">.</span><span class="n">objects</span><span class="o">.</span><span class="n">conf</span><span class="p">(</span><span class="s2">&quot;runtime&quot;</span><span class="p">,</span> <span class="n">_GAMETIME_MODULE</span><span class="o">.</span><span class="n">SERVER_RUNTIME</span><span class="p">)</span>
<span class="k">if</span> <span class="n">_MAINTENANCE_COUNT</span> <span class="o">%</span> <span class="mi">300</span> <span class="o">==</span> <span class="mi">0</span><span class="p">:</span>
<span class="k">if</span> <span class="n">_MAINTENANCE_COUNT</span> <span class="o">%</span> <span class="mi">5</span> <span class="o">==</span> <span class="mi">0</span><span class="p">:</span>
<span class="c1"># check cache size every 5 minutes</span>
<span class="n">_FLUSH_CACHE</span><span class="p">(</span><span class="n">_IDMAPPER_CACHE_MAXSIZE</span><span class="p">)</span>
<span class="k">if</span> <span class="n">_MAINTENANCE_COUNT</span> <span class="o">%</span> <span class="mi">3700</span> <span class="o">==</span> <span class="mi">0</span><span class="p">:</span>
<span class="k">if</span> <span class="n">_MAINTENANCE_COUNT</span> <span class="o">%</span> <span class="mi">60</span> <span class="o">==</span> <span class="mi">0</span><span class="p">:</span>
<span class="c1"># validate scripts every hour</span>
<span class="n">evennia</span><span class="o">.</span><span class="n">ScriptDB</span><span class="o">.</span><span class="n">objects</span><span class="o">.</span><span class="n">validate</span><span class="p">()</span>
<span class="k">if</span> <span class="n">_MAINTENANCE_COUNT</span> <span class="o">%</span> <span class="mi">61</span> <span class="o">==</span> <span class="mi">0</span><span class="p">:</span>
<span class="c1"># validate channels off-sync with scripts</span>
<span class="n">evennia</span><span class="o">.</span><span class="n">CHANNEL_HANDLER</span><span class="o">.</span><span class="n">update</span><span class="p">()</span>
<span class="k">if</span> <span class="n">_MAINTENANCE_COUNT</span> <span class="o">%</span> <span class="p">(</span><span class="mi">3600</span> <span class="o">*</span> <span class="mi">7</span><span class="p">)</span> <span class="o">==</span> <span class="mi">0</span><span class="p">:</span>
<span class="k">if</span> <span class="n">_MAINTENANCE_COUNT</span> <span class="o">%</span> <span class="p">(</span><span class="mi">60</span> <span class="o">*</span> <span class="mi">7</span><span class="p">)</span> <span class="o">==</span> <span class="mi">0</span><span class="p">:</span>
<span class="c1"># drop database connection every 7 hrs to avoid default timeouts on MySQL</span>
<span class="c1"># (see https://github.com/evennia/evennia/issues/1376)</span>
<span class="n">connection</span><span class="o">.</span><span class="n">close</span><span class="p">()</span>

View file

@ -219,7 +219,7 @@
<span class="k">global</span> <span class="n">_FUNCPARSER</span>
<span class="k">if</span> <span class="ow">not</span> <span class="n">_FUNCPARSER</span><span class="p">:</span>
<span class="kn">from</span> <span class="nn">evennia.utils.funcparser</span> <span class="kn">import</span> <span class="n">FuncParser</span>
<span class="n">_FUNCPARSER</span> <span class="o">=</span> <span class="n">FuncParser</span><span class="p">(</span><span class="n">settings</span><span class="o">.</span><span class="n">FUNCPARSER_OUTGOING_MESSAGES_MODULE</span><span class="p">,</span> <span class="n">raise_errors</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
<span class="n">_FUNCPARSER</span> <span class="o">=</span> <span class="n">FuncParser</span><span class="p">(</span><span class="n">settings</span><span class="o">.</span><span class="n">FUNCPARSER_OUTGOING_MESSAGES_MODULES</span><span class="p">,</span> <span class="n">raise_errors</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
<span class="n">options</span> <span class="o">=</span> <span class="n">kwargs</span><span class="o">.</span><span class="n">pop</span><span class="p">(</span><span class="s2">&quot;options&quot;</span><span class="p">,</span> <span class="kc">None</span><span class="p">)</span> <span class="ow">or</span> <span class="p">{}</span>
<span class="n">raw</span> <span class="o">=</span> <span class="n">options</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;raw&quot;</span><span class="p">,</span> <span class="kc">False</span><span class="p">)</span>

View file

@ -1596,7 +1596,7 @@
<span class="bp">self</span><span class="o">.</span><span class="n">add</span><span class="p">(</span><span class="n">CmdGetInput</span><span class="p">())</span></div></div>
<span class="k">class</span> <span class="nc">_Prompt</span><span class="p">(</span><span class="nb">object</span><span class="p">):</span>
<span class="k">class</span> <span class="nc">_Prompt</span><span class="p">:</span>
<span class="sd">&quot;&quot;&quot;Dummy holder&quot;&quot;&quot;</span>
<span class="k">pass</span>
@ -1663,6 +1663,174 @@
<span class="n">caller</span><span class="o">.</span><span class="n">msg</span><span class="p">(</span><span class="n">prompt</span><span class="p">,</span> <span class="n">session</span><span class="o">=</span><span class="n">session</span><span class="p">)</span></div>
<div class="viewcode-block" id="CmdYesNoQuestion"><a class="viewcode-back" href="../../../api/evennia.utils.evmenu.html#evennia.utils.evmenu.CmdYesNoQuestion">[docs]</a><span class="k">class</span> <span class="nc">CmdYesNoQuestion</span><span class="p">(</span><span class="n">Command</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> Handle a prompt for yes or no. Press [return] for the default choice.</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="n">key</span> <span class="o">=</span> <span class="n">_CMD_NOINPUT</span>
<span class="n">aliases</span> <span class="o">=</span> <span class="p">[</span><span class="n">_CMD_NOMATCH</span><span class="p">,</span> <span class="s2">&quot;yes&quot;</span><span class="p">,</span> <span class="s2">&quot;no&quot;</span><span class="p">,</span> <span class="s1">&#39;y&#39;</span><span class="p">,</span> <span class="s1">&#39;n&#39;</span><span class="p">,</span> <span class="s1">&#39;a&#39;</span><span class="p">,</span> <span class="s1">&#39;abort&#39;</span><span class="p">]</span>
<span class="n">arg_regex</span> <span class="o">=</span> <span class="sa">r</span><span class="s2">&quot;^$&quot;</span>
<span class="k">def</span> <span class="nf">_clean</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="k">del</span> <span class="bp">self</span><span class="o">.</span><span class="n">caller</span><span class="o">.</span><span class="n">ndb</span><span class="o">.</span><span class="n">_yes_no_question</span>
<span class="bp">self</span><span class="o">.</span><span class="n">caller</span><span class="o">.</span><span class="n">cmdset</span><span class="o">.</span><span class="n">remove</span><span class="p">(</span><span class="n">YesNoQuestionCmdSet</span><span class="p">)</span>
<div class="viewcode-block" id="CmdYesNoQuestion.func"><a class="viewcode-back" href="../../../api/evennia.utils.evmenu.html#evennia.utils.evmenu.CmdYesNoQuestion.func">[docs]</a> <span class="k">def</span> <span class="nf">func</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;This is called when user enters anything.&quot;&quot;&quot;</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">try</span><span class="p">:</span>
<span class="n">yes_no_question</span> <span class="o">=</span> <span class="n">caller</span><span class="o">.</span><span class="n">ndb</span><span class="o">.</span><span class="n">_yes_no_question</span>
<span class="k">if</span> <span class="ow">not</span> <span class="n">yes_no_question</span> <span class="ow">and</span> <span class="nb">hasattr</span><span class="p">(</span><span class="n">caller</span><span class="p">,</span> <span class="s2">&quot;account&quot;</span><span class="p">):</span>
<span class="n">yes_no_question</span> <span class="o">=</span> <span class="n">caller</span><span class="o">.</span><span class="n">account</span><span class="o">.</span><span class="n">ndb</span><span class="o">.</span><span class="n">_yes_no_question</span>
<span class="n">caller</span> <span class="o">=</span> <span class="n">caller</span><span class="o">.</span><span class="n">account</span>
<span class="n">inp</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">cmdname</span>
<span class="k">if</span> <span class="n">inp</span> <span class="o">==</span> <span class="n">_CMD_NOINPUT</span><span class="p">:</span>
<span class="n">raw</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">raw_cmdname</span><span class="o">.</span><span class="n">strip</span><span class="p">()</span>
<span class="k">if</span> <span class="ow">not</span> <span class="n">raw</span><span class="p">:</span>
<span class="c1"># use default</span>
<span class="n">inp</span> <span class="o">=</span> <span class="n">yes_no_question</span><span class="o">.</span><span class="n">default</span>
<span class="k">else</span><span class="p">:</span>
<span class="n">inp</span> <span class="o">=</span> <span class="n">raw</span>
<span class="k">if</span> <span class="n">inp</span> <span class="ow">in</span> <span class="p">(</span><span class="s1">&#39;a&#39;</span><span class="p">,</span> <span class="s1">&#39;abort&#39;</span><span class="p">)</span> <span class="ow">and</span> <span class="n">yes_no_question</span><span class="o">.</span><span class="n">allow_abort</span><span class="p">:</span>
<span class="n">caller</span><span class="o">.</span><span class="n">msg</span><span class="p">(</span><span class="s2">&quot;Aborted.&quot;</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">_clean</span><span class="p">()</span>
<span class="k">return</span>
<span class="n">caller</span><span class="o">.</span><span class="n">ndb</span><span class="o">.</span><span class="n">_yes_no_question</span><span class="o">.</span><span class="n">session</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">session</span>
<span class="n">args</span> <span class="o">=</span> <span class="n">yes_no_question</span><span class="o">.</span><span class="n">args</span>
<span class="n">kwargs</span> <span class="o">=</span> <span class="n">yes_no_question</span><span class="o">.</span><span class="n">kwargs</span>
<span class="n">kwargs</span><span class="p">[</span><span class="s1">&#39;caller_session&#39;</span><span class="p">]</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">session</span>
<span class="n">ok</span> <span class="o">=</span> <span class="kc">False</span>
<span class="k">if</span> <span class="n">inp</span> <span class="ow">in</span> <span class="p">(</span><span class="s1">&#39;yes&#39;</span><span class="p">,</span> <span class="s1">&#39;y&#39;</span><span class="p">):</span>
<span class="n">yes_no_question</span><span class="o">.</span><span class="n">yes_callable</span><span class="p">(</span><span class="n">caller</span><span class="p">,</span> <span class="o">*</span><span class="n">args</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">)</span>
<span class="k">elif</span> <span class="n">inp</span> <span class="ow">in</span> <span class="p">(</span><span class="s1">&#39;no&#39;</span><span class="p">,</span> <span class="s1">&#39;n&#39;</span><span class="p">):</span>
<span class="n">yes_no_question</span><span class="o">.</span><span class="n">no_callable</span><span class="p">(</span><span class="n">caller</span><span class="p">,</span> <span class="o">*</span><span class="n">args</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">)</span>
<span class="k">else</span><span class="p">:</span>
<span class="c1"># invalid input. Resend prompt without cleaning</span>
<span class="n">caller</span><span class="o">.</span><span class="n">msg</span><span class="p">(</span><span class="n">yes_no_question</span><span class="o">.</span><span class="n">prompt</span><span class="p">,</span> <span class="n">session</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">session</span><span class="p">)</span>
<span class="k">return</span>
<span class="c1"># cleanup</span>
<span class="bp">self</span><span class="o">.</span><span class="n">_clean</span><span class="p">()</span>
<span class="k">except</span> <span class="ne">Exception</span><span class="p">:</span>
<span class="c1"># make sure to clean up cmdset if something goes wrong</span>
<span class="n">caller</span><span class="o">.</span><span class="n">msg</span><span class="p">(</span><span class="s2">&quot;|rError in ask_yes_no. Choice not confirmed (report to admin)|n&quot;</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="s2">&quot;Error in ask_yes_no&quot;</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">_clean</span><span class="p">()</span></div></div>
<div class="viewcode-block" id="YesNoQuestionCmdSet"><a class="viewcode-back" href="../../../api/evennia.utils.evmenu.html#evennia.utils.evmenu.YesNoQuestionCmdSet">[docs]</a><span class="k">class</span> <span class="nc">YesNoQuestionCmdSet</span><span class="p">(</span><span class="n">CmdSet</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> This stores the input command</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="n">key</span> <span class="o">=</span> <span class="s2">&quot;yes_no_question_cmdset&quot;</span>
<span class="n">priority</span> <span class="o">=</span> <span class="mi">1</span>
<span class="n">mergetype</span> <span class="o">=</span> <span class="s2">&quot;Replace&quot;</span>
<span class="n">no_objs</span> <span class="o">=</span> <span class="kc">True</span>
<span class="n">no_exits</span> <span class="o">=</span> <span class="kc">True</span>
<span class="n">no_channels</span> <span class="o">=</span> <span class="kc">False</span>
<div class="viewcode-block" id="YesNoQuestionCmdSet.at_cmdset_creation"><a class="viewcode-back" href="../../../api/evennia.utils.evmenu.html#evennia.utils.evmenu.YesNoQuestionCmdSet.at_cmdset_creation">[docs]</a> <span class="k">def</span> <span class="nf">at_cmdset_creation</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;called once at creation&quot;&quot;&quot;</span>
<span class="bp">self</span><span class="o">.</span><span class="n">add</span><span class="p">(</span><span class="n">CmdYesNoQuestion</span><span class="p">())</span></div></div>
<div class="viewcode-block" id="ask_yes_no"><a class="viewcode-back" href="../../../api/evennia.utils.evmenu.html#evennia.utils.evmenu.ask_yes_no">[docs]</a><span class="k">def</span> <span class="nf">ask_yes_no</span><span class="p">(</span><span class="n">caller</span><span class="p">,</span> <span class="n">prompt</span><span class="p">,</span> <span class="n">yes_action</span><span class="p">,</span> <span class="n">no_action</span><span class="p">,</span> <span class="n">default</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
<span class="n">allow_abort</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span> <span class="n">session</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="o">*</span><span class="n">args</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> A helper question for asking a simple yes/no question. This will cause</span>
<span class="sd"> the system to pause and wait for input from the player.</span>
<span class="sd"> Args:</span>
<span class="sd"> prompt (str): The yes/no question to ask. This takes an optional formatting</span>
<span class="sd"> marker `{suffix}` which will be filled with &#39;Y/N&#39;, [Y]/N or Y/[N]</span>
<span class="sd"> depending on the setting of `default`. If `allow_abort`, then the</span>
<span class="sd"> `A(bort)` will also be available.</span>
<span class="sd"> yes_action (callable or str): If a callable, this will be called</span>
<span class="sd"> with `(caller, *args, **kwargs) when the yes-choice is made.</span>
<span class="sd"> If a string, this string will be echoed back to the caller.</span>
<span class="sd"> no_action (callable or str): If a callable, this will be called</span>
<span class="sd"> with `(caller, *args, **kwargs)` when the no-choice is made.</span>
<span class="sd"> If a string, this string will be echoed back to the caller.</span>
<span class="sd"> default (str optional): One of &quot;N&quot;, &quot;Y&quot;, &quot;A&quot; or None for no default.</span>
<span class="sd"> If &quot;A&quot; is given, `allow_abort` is assumed set. The user can choose</span>
<span class="sd"> the default option just by pressing return.</span>
<span class="sd"> allow_abort (bool, optional): If set, the Q(uit) option is available,</span>
<span class="sd"> which is neither yes or no.</span>
<span class="sd"> session (Session, optional): This allows to specify the</span>
<span class="sd"> session to send the prompt to. It&#39;s usually only needed if `caller`</span>
<span class="sd"> is an Account in multisession modes greater than 2. The session is</span>
<span class="sd"> then updated by the command and is available (for example in</span>
<span class="sd"> callbacks) through `caller.ndb._yes_no_question.session`.</span>
<span class="sd"> *args, **kwargs: These are passed into the callables, if any.</span>
<span class="sd"> Raises:</span>
<span class="sd"> RuntimeError: If default and allow_abort clashes.</span>
<span class="sd"> Example:</span>
<span class="sd"> ask_yes_no(caller, &quot;Are you happy {suffix}?&quot;,</span>
<span class="sd"> &quot;you answered yes&quot;, &quot;you answered no&quot;)</span>
<span class="sd"> ask_yes_no(caller, &quot;Are you sad {suffix}?&quot;,</span>
<span class="sd"> _callable_yes, _callable_no, allow_abort=True)</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="k">def</span> <span class="nf">_callable_yes_txt</span><span class="p">(</span><span class="n">caller</span><span class="p">,</span> <span class="o">*</span><span class="n">args</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">):</span>
<span class="n">yes_txt</span> <span class="o">=</span> <span class="n">kwargs</span><span class="p">[</span><span class="s1">&#39;yes_txt&#39;</span><span class="p">]</span>
<span class="n">session</span> <span class="o">=</span> <span class="n">kwargs</span><span class="p">[</span><span class="s1">&#39;caller_session&#39;</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="n">yes_txt</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">def</span> <span class="nf">_callable_no_txt</span><span class="p">(</span><span class="n">caller</span><span class="p">,</span> <span class="o">*</span><span class="n">args</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">):</span>
<span class="n">no_txt</span> <span class="o">=</span> <span class="n">kwargs</span><span class="p">[</span><span class="s1">&#39;no_txt&#39;</span><span class="p">]</span>
<span class="n">session</span> <span class="o">=</span> <span class="n">kwargs</span><span class="p">[</span><span class="s1">&#39;caller_session&#39;</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="n">no_txt</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">callable</span><span class="p">(</span><span class="n">yes_action</span><span class="p">):</span>
<span class="n">kwargs</span><span class="p">[</span><span class="s1">&#39;yes_txt&#39;</span><span class="p">]</span> <span class="o">=</span> <span class="nb">str</span><span class="p">(</span><span class="n">yes_action</span><span class="p">)</span>
<span class="n">yes_action</span> <span class="o">=</span> <span class="n">_callable_yes_txt</span>
<span class="k">if</span> <span class="ow">not</span> <span class="n">callable</span><span class="p">(</span><span class="n">no_action</span><span class="p">):</span>
<span class="n">kwargs</span><span class="p">[</span><span class="s1">&#39;no_txt&#39;</span><span class="p">]</span> <span class="o">=</span> <span class="nb">str</span><span class="p">(</span><span class="n">no_action</span><span class="p">)</span>
<span class="n">no_action</span> <span class="o">=</span> <span class="n">_callable_no_txt</span>
<span class="c1"># prepare the prompt with suffix</span>
<span class="n">suffix</span> <span class="o">=</span> <span class="s2">&quot;Y/N&quot;</span>
<span class="n">abort_txt</span> <span class="o">=</span> <span class="s2">&quot;/Abort&quot;</span> <span class="k">if</span> <span class="n">allow_abort</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
<span class="k">if</span> <span class="n">default</span><span class="p">:</span>
<span class="n">default</span> <span class="o">=</span> <span class="n">default</span><span class="o">.</span><span class="n">lower</span><span class="p">()</span>
<span class="k">if</span> <span class="n">default</span> <span class="o">==</span> <span class="s2">&quot;y&quot;</span><span class="p">:</span>
<span class="n">suffix</span> <span class="o">=</span> <span class="s2">&quot;[Y]/N&quot;</span>
<span class="k">elif</span> <span class="n">default</span> <span class="o">==</span> <span class="s2">&quot;n&quot;</span><span class="p">:</span>
<span class="n">suffix</span> <span class="o">=</span> <span class="s2">&quot;Y/[N]&quot;</span>
<span class="k">elif</span> <span class="n">default</span> <span class="o">==</span> <span class="s2">&quot;a&quot;</span><span class="p">:</span>
<span class="n">allow_abort</span> <span class="o">=</span> <span class="kc">True</span>
<span class="n">abort_txt</span> <span class="o">=</span> <span class="s2">&quot;/[A]bort&quot;</span>
<span class="n">suffix</span> <span class="o">+=</span> <span class="n">abort_txt</span>
<span class="n">prompt</span> <span class="o">=</span> <span class="n">prompt</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">suffix</span><span class="o">=</span><span class="n">suffix</span><span class="p">)</span>
<span class="n">caller</span><span class="o">.</span><span class="n">ndb</span><span class="o">.</span><span class="n">_yes_no_question</span> <span class="o">=</span> <span class="n">_Prompt</span><span class="p">()</span>
<span class="n">caller</span><span class="o">.</span><span class="n">ndb</span><span class="o">.</span><span class="n">_yes_no_question</span><span class="o">.</span><span class="n">session</span> <span class="o">=</span> <span class="n">session</span>
<span class="n">caller</span><span class="o">.</span><span class="n">ndb</span><span class="o">.</span><span class="n">_yes_no_question</span><span class="o">.</span><span class="n">prompt</span> <span class="o">=</span> <span class="n">prompt</span>
<span class="n">caller</span><span class="o">.</span><span class="n">ndb</span><span class="o">.</span><span class="n">_yes_no_question</span><span class="o">.</span><span class="n">default</span> <span class="o">=</span> <span class="n">default</span>
<span class="n">caller</span><span class="o">.</span><span class="n">ndb</span><span class="o">.</span><span class="n">_yes_no_question</span><span class="o">.</span><span class="n">allow_abort</span> <span class="o">=</span> <span class="n">allow_abort</span>
<span class="n">caller</span><span class="o">.</span><span class="n">ndb</span><span class="o">.</span><span class="n">_yes_no_question</span><span class="o">.</span><span class="n">yes_callable</span> <span class="o">=</span> <span class="n">yes_action</span>
<span class="n">caller</span><span class="o">.</span><span class="n">ndb</span><span class="o">.</span><span class="n">_yes_no_question</span><span class="o">.</span><span class="n">no_callable</span> <span class="o">=</span> <span class="n">no_action</span>
<span class="n">caller</span><span class="o">.</span><span class="n">ndb</span><span class="o">.</span><span class="n">_yes_no_question</span><span class="o">.</span><span class="n">args</span> <span class="o">=</span> <span class="n">args</span>
<span class="n">caller</span><span class="o">.</span><span class="n">ndb</span><span class="o">.</span><span class="n">_yes_no_question</span><span class="o">.</span><span class="n">kwargs</span> <span class="o">=</span> <span class="n">kwargs</span>
<span class="n">caller</span><span class="o">.</span><span class="n">cmdset</span><span class="o">.</span><span class="n">add</span><span class="p">(</span><span class="n">YesNoQuestionCmdSet</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="n">prompt</span><span class="p">,</span> <span class="n">session</span><span class="o">=</span><span class="n">session</span><span class="p">)</span></div>
<span class="c1"># -------------------------------------------------------------</span>
<span class="c1">#</span>
<span class="c1"># Menu generation from menu template string</span>