mirror of
https://github.com/evennia/evennia.git
synced 2026-04-02 05:57:16 +02:00
811 lines
No EOL
84 KiB
HTML
811 lines
No EOL
84 KiB
HTML
|
|
<!DOCTYPE html>
|
|
|
|
<html>
|
|
<head>
|
|
<meta charset="utf-8" />
|
|
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
|
<title>evennia.contrib.fieldfill — Evennia 1.0-dev documentation</title>
|
|
<link rel="stylesheet" href="../../../_static/nature.css" type="text/css" />
|
|
<link rel="stylesheet" href="../../../_static/pygments.css" type="text/css" />
|
|
<script id="documentation_options" data-url_root="../../../" src="../../../_static/documentation_options.js"></script>
|
|
<script src="../../../_static/jquery.js"></script>
|
|
<script src="../../../_static/underscore.js"></script>
|
|
<script src="../../../_static/doctools.js"></script>
|
|
<script src="../../../_static/language_data.js"></script>
|
|
<link rel="shortcut icon" href="../../../_static/favicon.ico"/>
|
|
<link rel="index" title="Index" href="../../../genindex.html" />
|
|
<link rel="search" title="Search" href="../../../search.html" />
|
|
</head><body>
|
|
<div class="related" role="navigation" aria-label="related navigation">
|
|
<h3>Navigation</h3>
|
|
<ul>
|
|
<li class="right" style="margin-right: 10px">
|
|
<a href="../../../genindex.html" title="General Index"
|
|
accesskey="I">index</a></li>
|
|
<li class="right" >
|
|
<a href="../../../py-modindex.html" title="Python Module Index"
|
|
>modules</a> |</li>
|
|
<li class="nav-item nav-item-0"><a href="../../../index.html">Evennia 1.0-dev</a> »</li>
|
|
<li class="nav-item nav-item-1"><a href="../../index.html" >Module code</a> »</li>
|
|
<li class="nav-item nav-item-2"><a href="../../evennia.html" accesskey="U">evennia</a> »</li>
|
|
<li class="nav-item nav-item-this"><a href="">evennia.contrib.fieldfill</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.contrib.fieldfill</h1><div class="highlight"><pre>
|
|
<span></span><span class="sd">"""</span>
|
|
<span class="sd">Easy fillable form</span>
|
|
|
|
<span class="sd">Contrib - Tim Ashley Jenkins 2018</span>
|
|
|
|
<span class="sd">This module contains a function that calls an easily customizable EvMenu - this</span>
|
|
<span class="sd">menu presents the player with a fillable form, with fields that can be filled</span>
|
|
<span class="sd">out in any order. Each field's value can be verified, with the function</span>
|
|
<span class="sd">allowing easy checks for text and integer input, minimum and maximum values /</span>
|
|
<span class="sd">character lengths, or can even be verified by a custom function. Once the form</span>
|
|
<span class="sd">is submitted, the form's data is submitted as a dictionary to any callable of</span>
|
|
<span class="sd">your choice.</span>
|
|
|
|
<span class="sd">The function that initializes the fillable form menu is fairly simple, and</span>
|
|
<span class="sd">includes the caller, the template for the form, and the callback(caller, result) to which the form</span>
|
|
<span class="sd">data will be sent to upon submission.</span>
|
|
|
|
<span class="sd"> init_fill_field(formtemplate, caller, formcallback)</span>
|
|
|
|
<span class="sd">Form templates are defined as a list of dictionaries - each dictionary</span>
|
|
<span class="sd">represents a field in the form, and contains the data for the field's name and</span>
|
|
<span class="sd">behavior. For example, this basic form template will allow a player to fill out</span>
|
|
<span class="sd">a brief character profile:</span>
|
|
|
|
<span class="sd"> PROFILE_TEMPLATE = [</span>
|
|
<span class="sd"> {"fieldname":"Name", "fieldtype":"text"},</span>
|
|
<span class="sd"> {"fieldname":"Age", "fieldtype":"number"},</span>
|
|
<span class="sd"> {"fieldname":"History", "fieldtype":"text"},</span>
|
|
<span class="sd"> ]</span>
|
|
|
|
<span class="sd">This will present the player with an EvMenu showing this basic form:</span>
|
|
|
|
<span class="sd"> Name:</span>
|
|
<span class="sd"> Age:</span>
|
|
<span class="sd"> History:</span>
|
|
|
|
<span class="sd">While in this menu, the player can assign a new value to any field with the</span>
|
|
<span class="sd">syntax <field> = <new value>, like so:</span>
|
|
|
|
<span class="sd"> > name = Ashley</span>
|
|
<span class="sd"> Field 'Name' set to: Ashley</span>
|
|
|
|
<span class="sd">Typing 'look' by itself will show the form and its current values.</span>
|
|
|
|
<span class="sd"> > look</span>
|
|
|
|
<span class="sd"> Name: Ashley</span>
|
|
<span class="sd"> Age:</span>
|
|
<span class="sd"> History:</span>
|
|
|
|
<span class="sd">Number fields require an integer input, and will reject any text that can't</span>
|
|
<span class="sd">be converted into an integer.</span>
|
|
|
|
<span class="sd"> > age = youthful</span>
|
|
<span class="sd"> Field 'Age' requires a number.</span>
|
|
<span class="sd"> > age = 31</span>
|
|
<span class="sd"> Field 'Age' set to: 31</span>
|
|
|
|
<span class="sd">Form data is presented as an EvTable, so text of any length will wrap cleanly.</span>
|
|
|
|
<span class="sd"> > history = EVERY MORNING I WAKE UP AND OPEN PALM SLAM[...]</span>
|
|
<span class="sd"> Field 'History' set to: EVERY MORNING I WAKE UP AND[...]</span>
|
|
<span class="sd"> > look</span>
|
|
|
|
<span class="sd"> Name: Ashley</span>
|
|
<span class="sd"> Age: 31</span>
|
|
<span class="sd"> History: EVERY MORNING I WAKE UP AND OPEN PALM SLAM A VHS INTO THE SLOT.</span>
|
|
<span class="sd"> IT'S CHRONICLES OF RIDDICK AND RIGHT THEN AND THERE I START DOING</span>
|
|
<span class="sd"> THE MOVES ALONGSIDE WITH THE MAIN CHARACTER, RIDDICK. I DO EVERY</span>
|
|
<span class="sd"> MOVE AND I DO EVERY MOVE HARD.</span>
|
|
|
|
<span class="sd">When the player types 'submit' (or your specified submit command), the menu</span>
|
|
<span class="sd">quits and the form's data is passed to your specified function as a dictionary,</span>
|
|
<span class="sd">like so:</span>
|
|
|
|
<span class="sd"> formdata = {"Name":"Ashley", "Age":31, "History":"EVERY MORNING I[...]"}</span>
|
|
|
|
<span class="sd">You can do whatever you like with this data in your function - forms can be used</span>
|
|
<span class="sd">to set data on a character, to help builders create objects, or for players to</span>
|
|
<span class="sd">craft items or perform other complicated actions with many variables involved.</span>
|
|
|
|
<span class="sd">The data that your form will accept can also be specified in your form template -</span>
|
|
<span class="sd">let's say, for example, that you won't accept ages under 18 or over 100. You can</span>
|
|
<span class="sd">do this by specifying "min" and "max" values in your field's dictionary:</span>
|
|
|
|
<span class="sd"> PROFILE_TEMPLATE = [</span>
|
|
<span class="sd"> {"fieldname":"Name", "fieldtype":"text"},</span>
|
|
<span class="sd"> {"fieldname":"Age", "fieldtype":"number", "min":18, "max":100},</span>
|
|
<span class="sd"> {"fieldname":"History", "fieldtype":"text"}</span>
|
|
<span class="sd"> ]</span>
|
|
|
|
<span class="sd">Now if the player tries to enter a value out of range, the form will not acept the</span>
|
|
<span class="sd">given value.</span>
|
|
|
|
<span class="sd"> > age = 10</span>
|
|
<span class="sd"> Field 'Age' reqiures a minimum value of 18.</span>
|
|
<span class="sd"> > age = 900</span>
|
|
<span class="sd"> Field 'Age' has a maximum value of 100.</span>
|
|
|
|
<span class="sd">Setting 'min' and 'max' for a text field will instead act as a minimum or</span>
|
|
<span class="sd">maximum character length for the player's input.</span>
|
|
|
|
<span class="sd">There are lots of ways to present the form to the player - fields can have default</span>
|
|
<span class="sd">values or show a custom message in place of a blank value, and player input can be</span>
|
|
<span class="sd">verified by a custom function, allowing for a great deal of flexibility. There</span>
|
|
<span class="sd">is also an option for 'bool' fields, which accept only a True / False input and</span>
|
|
<span class="sd">can be customized to represent the choice to the player however you like (E.G.</span>
|
|
<span class="sd">Yes/No, On/Off, Enabled/Disabled, etc.)</span>
|
|
|
|
<span class="sd">This module contains a simple example form that demonstrates all of the included</span>
|
|
<span class="sd">functionality - a command that allows a player to compose a message to another</span>
|
|
<span class="sd">online character and have it send after a custom delay. You can test it by</span>
|
|
<span class="sd">importing this module in your game's default_cmdsets.py module and adding</span>
|
|
<span class="sd">CmdTestMenu to your default character's command set.</span>
|
|
|
|
<span class="sd">FIELD TEMPLATE KEYS:</span>
|
|
<span class="sd">Required:</span>
|
|
<span class="sd"> fieldname (str): Name of the field, as presented to the player.</span>
|
|
<span class="sd"> fieldtype (str): Type of value required: 'text', 'number', or 'bool'.</span>
|
|
|
|
<span class="sd">Optional:</span>
|
|
<span class="sd"> max (int): Maximum character length (if text) or value (if number).</span>
|
|
<span class="sd"> min (int): Minimum charater length (if text) or value (if number).</span>
|
|
<span class="sd"> truestr (str): String for a 'True' value in a bool field.</span>
|
|
<span class="sd"> (E.G. 'On', 'Enabled', 'Yes')</span>
|
|
<span class="sd"> falsestr (str): String for a 'False' value in a bool field.</span>
|
|
<span class="sd"> (E.G. 'Off', 'Disabled', 'No')</span>
|
|
<span class="sd"> default (str): Initial value (blank if not given).</span>
|
|
<span class="sd"> blankmsg (str): Message to show in place of value when field is blank.</span>
|
|
<span class="sd"> cantclear (bool): Field can't be cleared if True.</span>
|
|
<span class="sd"> required (bool): If True, form cannot be submitted while field is blank.</span>
|
|
<span class="sd"> verifyfunc (callable): Name of a callable used to verify input - takes</span>
|
|
<span class="sd"> (caller, value) as arguments. If the function returns True,</span>
|
|
<span class="sd"> the player's input is considered valid - if it returns False,</span>
|
|
<span class="sd"> the input is rejected. Any other value returned will act as</span>
|
|
<span class="sd"> the field's new value, replacing the player's input. This</span>
|
|
<span class="sd"> allows for values that aren't strings or integers (such as</span>
|
|
<span class="sd"> object dbrefs). For boolean fields, return '0' or '1' to set</span>
|
|
<span class="sd"> the field to False or True.</span>
|
|
<span class="sd">"""</span>
|
|
|
|
<span class="kn">from</span> <span class="nn">evennia.utils</span> <span class="k">import</span> <span class="n">evmenu</span><span class="p">,</span> <span class="n">evtable</span><span class="p">,</span> <span class="n">delay</span><span class="p">,</span> <span class="n">list_to_string</span><span class="p">,</span> <span class="n">logger</span>
|
|
<span class="kn">from</span> <span class="nn">evennia</span> <span class="k">import</span> <span class="n">Command</span>
|
|
<span class="kn">from</span> <span class="nn">evennia.server.sessionhandler</span> <span class="k">import</span> <span class="n">SESSIONS</span>
|
|
|
|
|
|
<div class="viewcode-block" id="FieldEvMenu"><a class="viewcode-back" href="../../../api/evennia.contrib.fieldfill.html#evennia.contrib.fieldfill.FieldEvMenu">[docs]</a><span class="k">class</span> <span class="nc">FieldEvMenu</span><span class="p">(</span><span class="n">evmenu</span><span class="o">.</span><span class="n">EvMenu</span><span class="p">):</span>
|
|
<span class="sd">"""</span>
|
|
<span class="sd"> Custom EvMenu type with its own node formatter - removes extraneous lines</span>
|
|
<span class="sd"> """</span>
|
|
|
|
<div class="viewcode-block" id="FieldEvMenu.node_formatter"><a class="viewcode-back" href="../../../api/evennia.contrib.fieldfill.html#evennia.contrib.fieldfill.FieldEvMenu.node_formatter">[docs]</a> <span class="k">def</span> <span class="nf">node_formatter</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">nodetext</span><span class="p">,</span> <span class="n">optionstext</span><span class="p">):</span>
|
|
<span class="sd">"""</span>
|
|
<span class="sd"> Formats the entirety of the node.</span>
|
|
|
|
<span class="sd"> Args:</span>
|
|
<span class="sd"> nodetext (str): The node text as returned by `self.nodetext_formatter`.</span>
|
|
<span class="sd"> optionstext (str): The options display as returned by `self.options_formatter`.</span>
|
|
<span class="sd"> caller (Object, Account or None, optional): The caller of the node.</span>
|
|
|
|
<span class="sd"> Returns:</span>
|
|
<span class="sd"> node (str): The formatted node to display.</span>
|
|
|
|
<span class="sd"> """</span>
|
|
<span class="c1"># Only return node text, no options or separators</span>
|
|
<span class="k">return</span> <span class="n">nodetext</span></div></div>
|
|
|
|
|
|
<div class="viewcode-block" id="init_fill_field"><a class="viewcode-back" href="../../../api/evennia.contrib.fieldfill.html#evennia.contrib.fieldfill.init_fill_field">[docs]</a><span class="k">def</span> <span class="nf">init_fill_field</span><span class="p">(</span>
|
|
<span class="n">formtemplate</span><span class="p">,</span>
|
|
<span class="n">caller</span><span class="p">,</span>
|
|
<span class="n">formcallback</span><span class="p">,</span>
|
|
<span class="n">pretext</span><span class="o">=</span><span class="s2">""</span><span class="p">,</span>
|
|
<span class="n">posttext</span><span class="o">=</span><span class="s2">""</span><span class="p">,</span>
|
|
<span class="n">submitcmd</span><span class="o">=</span><span class="s2">"submit"</span><span class="p">,</span>
|
|
<span class="n">borderstyle</span><span class="o">=</span><span class="s2">"cells"</span><span class="p">,</span>
|
|
<span class="n">formhelptext</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
|
|
<span class="n">persistent</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span>
|
|
<span class="n">initial_formdata</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
|
|
<span class="p">):</span>
|
|
<span class="sd">"""</span>
|
|
<span class="sd"> Initializes a menu presenting a player with a fillable form - once the form</span>
|
|
<span class="sd"> is submitted, the data will be passed as a dictionary to your chosen</span>
|
|
<span class="sd"> function.</span>
|
|
|
|
<span class="sd"> Args:</span>
|
|
<span class="sd"> formtemplate (list of dicts): The template for the form's fields.</span>
|
|
<span class="sd"> caller (obj): Player who will be filling out the form.</span>
|
|
<span class="sd"> formcallback (callable): Function to pass the completed form's data to.</span>
|
|
|
|
<span class="sd"> Options:</span>
|
|
<span class="sd"> pretext (str): Text to put before the form in the menu.</span>
|
|
<span class="sd"> posttext (str): Text to put after the form in the menu.</span>
|
|
<span class="sd"> submitcmd (str): Command used to submit the form.</span>
|
|
<span class="sd"> borderstyle (str): Form's EvTable border style.</span>
|
|
<span class="sd"> formhelptext (str): Help text for the form menu (or default is provided).</span>
|
|
<span class="sd"> persistent (bool): Whether to make the EvMenu persistent across reboots.</span>
|
|
<span class="sd"> initial_formdata (dict): Initial data for the form - a blank form with</span>
|
|
<span class="sd"> defaults specified in the template will be generated otherwise.</span>
|
|
<span class="sd"> In the case of a form used to edit properties on an object or a</span>
|
|
<span class="sd"> similar application, you may want to generate the initial form</span>
|
|
<span class="sd"> data dynamically before calling init_fill_field.</span>
|
|
<span class="sd"> """</span>
|
|
|
|
<span class="c1"># Initialize form data from the template if none provided</span>
|
|
<span class="n">formdata</span> <span class="o">=</span> <span class="n">form_template_to_dict</span><span class="p">(</span><span class="n">formtemplate</span><span class="p">)</span>
|
|
<span class="k">if</span> <span class="n">initial_formdata</span><span class="p">:</span>
|
|
<span class="n">formdata</span> <span class="o">=</span> <span class="n">initial_formdata</span>
|
|
|
|
<span class="c1"># Provide default help text if none given</span>
|
|
<span class="k">if</span> <span class="n">formhelptext</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
|
|
<span class="n">formhelptext</span> <span class="o">=</span> <span class="p">(</span>
|
|
<span class="s2">"Available commands:|/"</span>
|
|
<span class="s2">"|w<field> = <new value>:|n Set given field to new value, replacing the old value|/"</span>
|
|
<span class="s2">"|wclear <field>:|n Clear the value in the given field, making it blank|/"</span>
|
|
<span class="s2">"|wlook|n: Show the form's current values|/"</span>
|
|
<span class="s2">"|whelp|n: Display this help screen|/"</span>
|
|
<span class="s2">"|wquit|n: Quit the form menu without submitting|/"</span>
|
|
<span class="s2">"|w</span><span class="si">%s</span><span class="s2">|n: Submit this form and quit the menu"</span> <span class="o">%</span> <span class="n">submitcmd</span>
|
|
<span class="p">)</span>
|
|
|
|
<span class="c1"># Pass kwargs to store data needed in the menu</span>
|
|
<span class="n">kwargs</span> <span class="o">=</span> <span class="p">{</span>
|
|
<span class="s2">"formdata"</span><span class="p">:</span> <span class="n">formdata</span><span class="p">,</span>
|
|
<span class="s2">"formtemplate"</span><span class="p">:</span> <span class="n">formtemplate</span><span class="p">,</span>
|
|
<span class="s2">"formcallback"</span><span class="p">:</span> <span class="n">formcallback</span><span class="p">,</span>
|
|
<span class="s2">"pretext"</span><span class="p">:</span> <span class="n">pretext</span><span class="p">,</span>
|
|
<span class="s2">"posttext"</span><span class="p">:</span> <span class="n">posttext</span><span class="p">,</span>
|
|
<span class="s2">"submitcmd"</span><span class="p">:</span> <span class="n">submitcmd</span><span class="p">,</span>
|
|
<span class="s2">"borderstyle"</span><span class="p">:</span> <span class="n">borderstyle</span><span class="p">,</span>
|
|
<span class="s2">"formhelptext"</span><span class="p">:</span> <span class="n">formhelptext</span><span class="p">,</span>
|
|
<span class="p">}</span>
|
|
|
|
<span class="c1"># Initialize menu of selections</span>
|
|
<span class="n">FieldEvMenu</span><span class="p">(</span>
|
|
<span class="n">caller</span><span class="p">,</span>
|
|
<span class="s2">"evennia.contrib.fieldfill"</span><span class="p">,</span>
|
|
<span class="n">startnode</span><span class="o">=</span><span class="s2">"menunode_fieldfill"</span><span class="p">,</span>
|
|
<span class="n">auto_look</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span>
|
|
<span class="n">persistent</span><span class="o">=</span><span class="n">persistent</span><span class="p">,</span>
|
|
<span class="o">**</span><span class="n">kwargs</span><span class="p">,</span>
|
|
<span class="p">)</span></div>
|
|
|
|
|
|
<div class="viewcode-block" id="menunode_fieldfill"><a class="viewcode-back" href="../../../api/evennia.contrib.fieldfill.html#evennia.contrib.fieldfill.menunode_fieldfill">[docs]</a><span class="k">def</span> <span class="nf">menunode_fieldfill</span><span class="p">(</span><span class="n">caller</span><span class="p">,</span> <span class="n">raw_string</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">):</span>
|
|
<span class="sd">"""</span>
|
|
<span class="sd"> This is an EvMenu node, which calls itself over and over in order to</span>
|
|
<span class="sd"> allow a player to enter values into a fillable form. When the form is</span>
|
|
<span class="sd"> submitted, the form data is passed to a callback as a dictionary.</span>
|
|
<span class="sd"> """</span>
|
|
|
|
<span class="c1"># Retrieve menu info - taken from ndb if not persistent or db if persistent</span>
|
|
<span class="k">if</span> <span class="ow">not</span> <span class="n">caller</span><span class="o">.</span><span class="n">db</span><span class="o">.</span><span class="n">_menutree</span><span class="p">:</span>
|
|
<span class="n">formdata</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">_menutree</span><span class="o">.</span><span class="n">formdata</span>
|
|
<span class="n">formtemplate</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">_menutree</span><span class="o">.</span><span class="n">formtemplate</span>
|
|
<span class="n">formcallback</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">_menutree</span><span class="o">.</span><span class="n">formcallback</span>
|
|
<span class="n">pretext</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">_menutree</span><span class="o">.</span><span class="n">pretext</span>
|
|
<span class="n">posttext</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">_menutree</span><span class="o">.</span><span class="n">posttext</span>
|
|
<span class="n">submitcmd</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">_menutree</span><span class="o">.</span><span class="n">submitcmd</span>
|
|
<span class="n">borderstyle</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">_menutree</span><span class="o">.</span><span class="n">borderstyle</span>
|
|
<span class="n">formhelptext</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">_menutree</span><span class="o">.</span><span class="n">formhelptext</span>
|
|
<span class="k">else</span><span class="p">:</span>
|
|
<span class="n">formdata</span> <span class="o">=</span> <span class="n">caller</span><span class="o">.</span><span class="n">db</span><span class="o">.</span><span class="n">_menutree</span><span class="o">.</span><span class="n">formdata</span>
|
|
<span class="n">formtemplate</span> <span class="o">=</span> <span class="n">caller</span><span class="o">.</span><span class="n">db</span><span class="o">.</span><span class="n">_menutree</span><span class="o">.</span><span class="n">formtemplate</span>
|
|
<span class="n">formcallback</span> <span class="o">=</span> <span class="n">caller</span><span class="o">.</span><span class="n">db</span><span class="o">.</span><span class="n">_menutree</span><span class="o">.</span><span class="n">formcallback</span>
|
|
<span class="n">pretext</span> <span class="o">=</span> <span class="n">caller</span><span class="o">.</span><span class="n">db</span><span class="o">.</span><span class="n">_menutree</span><span class="o">.</span><span class="n">pretext</span>
|
|
<span class="n">posttext</span> <span class="o">=</span> <span class="n">caller</span><span class="o">.</span><span class="n">db</span><span class="o">.</span><span class="n">_menutree</span><span class="o">.</span><span class="n">posttext</span>
|
|
<span class="n">submitcmd</span> <span class="o">=</span> <span class="n">caller</span><span class="o">.</span><span class="n">db</span><span class="o">.</span><span class="n">_menutree</span><span class="o">.</span><span class="n">submitcmd</span>
|
|
<span class="n">borderstyle</span> <span class="o">=</span> <span class="n">caller</span><span class="o">.</span><span class="n">db</span><span class="o">.</span><span class="n">_menutree</span><span class="o">.</span><span class="n">borderstyle</span>
|
|
<span class="n">formhelptext</span> <span class="o">=</span> <span class="n">caller</span><span class="o">.</span><span class="n">db</span><span class="o">.</span><span class="n">_menutree</span><span class="o">.</span><span class="n">formhelptext</span>
|
|
|
|
<span class="c1"># Syntax error</span>
|
|
<span class="n">syntax_err</span> <span class="o">=</span> <span class="p">(</span>
|
|
<span class="s2">"Syntax: <field> = <new value>|/Or: clear <field>, help, look, quit|/'</span><span class="si">%s</span><span class="s2">' to submit form"</span>
|
|
<span class="o">%</span> <span class="n">submitcmd</span>
|
|
<span class="p">)</span>
|
|
|
|
<span class="c1"># Display current form data</span>
|
|
<span class="n">text</span> <span class="o">=</span> <span class="p">(</span>
|
|
<span class="n">display_formdata</span><span class="p">(</span>
|
|
<span class="n">formtemplate</span><span class="p">,</span> <span class="n">formdata</span><span class="p">,</span> <span class="n">pretext</span><span class="o">=</span><span class="n">pretext</span><span class="p">,</span> <span class="n">posttext</span><span class="o">=</span><span class="n">posttext</span><span class="p">,</span> <span class="n">borderstyle</span><span class="o">=</span><span class="n">borderstyle</span>
|
|
<span class="p">),</span>
|
|
<span class="n">formhelptext</span><span class="p">,</span>
|
|
<span class="p">)</span>
|
|
<span class="n">options</span> <span class="o">=</span> <span class="p">{</span><span class="s2">"key"</span><span class="p">:</span> <span class="s2">"_default"</span><span class="p">,</span> <span class="s2">"goto"</span><span class="p">:</span> <span class="s2">"menunode_fieldfill"</span><span class="p">}</span>
|
|
|
|
<span class="k">if</span> <span class="n">raw_string</span><span class="p">:</span>
|
|
<span class="c1"># Test for given 'submit' command</span>
|
|
<span class="k">if</span> <span class="n">raw_string</span><span class="o">.</span><span class="n">lower</span><span class="p">()</span><span class="o">.</span><span class="n">strip</span><span class="p">()</span> <span class="o">==</span> <span class="n">submitcmd</span><span class="p">:</span>
|
|
<span class="c1"># Test to see if any blank fields are required</span>
|
|
<span class="n">blank_and_required</span> <span class="o">=</span> <span class="p">[]</span>
|
|
<span class="k">for</span> <span class="n">field</span> <span class="ow">in</span> <span class="n">formtemplate</span><span class="p">:</span>
|
|
<span class="k">if</span> <span class="s2">"required"</span> <span class="ow">in</span> <span class="n">field</span><span class="o">.</span><span class="n">keys</span><span class="p">():</span>
|
|
<span class="c1"># If field is required but current form data for field is blank</span>
|
|
<span class="k">if</span> <span class="n">field</span><span class="p">[</span><span class="s2">"required"</span><span class="p">]</span> <span class="ow">is</span> <span class="kc">True</span> <span class="ow">and</span> <span class="n">formdata</span><span class="p">[</span><span class="n">field</span><span class="p">[</span><span class="s2">"fieldname"</span><span class="p">]]</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
|
|
<span class="c1"># Add to blank and required fields</span>
|
|
<span class="n">blank_and_required</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">field</span><span class="p">[</span><span class="s2">"fieldname"</span><span class="p">])</span>
|
|
<span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">blank_and_required</span><span class="p">)</span> <span class="o">></span> <span class="mi">0</span><span class="p">:</span>
|
|
<span class="c1"># List the required fields left empty to the player</span>
|
|
<span class="n">caller</span><span class="o">.</span><span class="n">msg</span><span class="p">(</span>
|
|
<span class="s2">"The following blank fields require a value: </span><span class="si">%s</span><span class="s2">"</span>
|
|
<span class="o">%</span> <span class="n">list_to_string</span><span class="p">(</span><span class="n">blank_and_required</span><span class="p">)</span>
|
|
<span class="p">)</span>
|
|
<span class="n">text</span> <span class="o">=</span> <span class="p">(</span><span class="kc">None</span><span class="p">,</span> <span class="n">formhelptext</span><span class="p">)</span>
|
|
<span class="k">return</span> <span class="n">text</span><span class="p">,</span> <span class="n">options</span>
|
|
|
|
<span class="c1"># If everything checks out, pass form data to the callback and end the menu!</span>
|
|
<span class="k">try</span><span class="p">:</span>
|
|
<span class="n">formcallback</span><span class="p">(</span><span class="n">caller</span><span class="p">,</span> <span class="n">formdata</span><span class="p">)</span>
|
|
<span class="k">except</span> <span class="ne">Exception</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">"Error in fillable form callback."</span><span class="p">)</span>
|
|
<span class="k">return</span> <span class="kc">None</span><span class="p">,</span> <span class="kc">None</span>
|
|
|
|
<span class="c1"># Test for 'look' command</span>
|
|
<span class="k">if</span> <span class="n">raw_string</span><span class="o">.</span><span class="n">lower</span><span class="p">()</span><span class="o">.</span><span class="n">strip</span><span class="p">()</span> <span class="o">==</span> <span class="s2">"look"</span> <span class="ow">or</span> <span class="n">raw_string</span><span class="o">.</span><span class="n">lower</span><span class="p">()</span><span class="o">.</span><span class="n">strip</span><span class="p">()</span> <span class="o">==</span> <span class="s2">"l"</span><span class="p">:</span>
|
|
<span class="k">return</span> <span class="n">text</span><span class="p">,</span> <span class="n">options</span>
|
|
|
|
<span class="c1"># Test for 'clear' command</span>
|
|
<span class="n">cleartest</span> <span class="o">=</span> <span class="n">raw_string</span><span class="o">.</span><span class="n">lower</span><span class="p">()</span><span class="o">.</span><span class="n">strip</span><span class="p">()</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s2">" "</span><span class="p">,</span> <span class="mi">1</span><span class="p">)</span>
|
|
<span class="k">if</span> <span class="n">cleartest</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">"clear"</span><span class="p">:</span>
|
|
<span class="n">text</span> <span class="o">=</span> <span class="p">(</span><span class="kc">None</span><span class="p">,</span> <span class="n">formhelptext</span><span class="p">)</span>
|
|
<span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">cleartest</span><span class="p">)</span> <span class="o"><</span> <span class="mi">2</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">syntax_err</span><span class="p">)</span>
|
|
<span class="k">return</span> <span class="n">text</span><span class="p">,</span> <span class="n">options</span>
|
|
<span class="n">matched_field</span> <span class="o">=</span> <span class="kc">None</span>
|
|
|
|
<span class="k">for</span> <span class="n">key</span> <span class="ow">in</span> <span class="n">formdata</span><span class="o">.</span><span class="n">keys</span><span class="p">():</span>
|
|
<span class="k">if</span> <span class="n">cleartest</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span><span class="o">.</span><span class="n">lower</span><span class="p">()</span> <span class="ow">in</span> <span class="n">key</span><span class="o">.</span><span class="n">lower</span><span class="p">():</span>
|
|
<span class="n">matched_field</span> <span class="o">=</span> <span class="n">key</span>
|
|
|
|
<span class="k">if</span> <span class="ow">not</span> <span class="n">matched_field</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">"Field '</span><span class="si">%s</span><span class="s2">' does not exist!"</span> <span class="o">%</span> <span class="n">cleartest</span><span class="p">[</span><span class="mi">1</span><span class="p">])</span>
|
|
<span class="n">text</span> <span class="o">=</span> <span class="p">(</span><span class="kc">None</span><span class="p">,</span> <span class="n">formhelptext</span><span class="p">)</span>
|
|
<span class="k">return</span> <span class="n">text</span><span class="p">,</span> <span class="n">options</span>
|
|
|
|
<span class="c1"># Test to see if field can be cleared</span>
|
|
<span class="k">for</span> <span class="n">field</span> <span class="ow">in</span> <span class="n">formtemplate</span><span class="p">:</span>
|
|
<span class="k">if</span> <span class="n">field</span><span class="p">[</span><span class="s2">"fieldname"</span><span class="p">]</span> <span class="o">==</span> <span class="n">matched_field</span> <span class="ow">and</span> <span class="s2">"cantclear"</span> <span class="ow">in</span> <span class="n">field</span><span class="o">.</span><span class="n">keys</span><span class="p">():</span>
|
|
<span class="k">if</span> <span class="n">field</span><span class="p">[</span><span class="s2">"cantclear"</span><span class="p">]</span> <span class="ow">is</span> <span class="kc">True</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">"Field '</span><span class="si">%s</span><span class="s2">' can't be cleared!"</span> <span class="o">%</span> <span class="n">matched_field</span><span class="p">)</span>
|
|
<span class="n">text</span> <span class="o">=</span> <span class="p">(</span><span class="kc">None</span><span class="p">,</span> <span class="n">formhelptext</span><span class="p">)</span>
|
|
<span class="k">return</span> <span class="n">text</span><span class="p">,</span> <span class="n">options</span>
|
|
|
|
<span class="c1"># Clear the field</span>
|
|
<span class="n">formdata</span><span class="o">.</span><span class="n">update</span><span class="p">({</span><span class="n">matched_field</span><span class="p">:</span> <span class="kc">None</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">_menutree</span><span class="o">.</span><span class="n">formdata</span> <span class="o">=</span> <span class="n">formdata</span>
|
|
<span class="n">caller</span><span class="o">.</span><span class="n">msg</span><span class="p">(</span><span class="s2">"Field '</span><span class="si">%s</span><span class="s2">' cleared."</span> <span class="o">%</span> <span class="n">matched_field</span><span class="p">)</span>
|
|
<span class="k">return</span> <span class="n">text</span><span class="p">,</span> <span class="n">options</span>
|
|
|
|
<span class="k">if</span> <span class="s2">"="</span> <span class="ow">not</span> <span class="ow">in</span> <span class="n">raw_string</span><span class="p">:</span>
|
|
<span class="n">text</span> <span class="o">=</span> <span class="p">(</span><span class="kc">None</span><span class="p">,</span> <span class="n">formhelptext</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">syntax_err</span><span class="p">)</span>
|
|
<span class="k">return</span> <span class="n">text</span><span class="p">,</span> <span class="n">options</span>
|
|
|
|
<span class="c1"># Extract field name and new field value</span>
|
|
<span class="n">entry</span> <span class="o">=</span> <span class="n">raw_string</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s2">"="</span><span class="p">,</span> <span class="mi">1</span><span class="p">)</span>
|
|
<span class="n">fieldname</span> <span class="o">=</span> <span class="n">entry</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">.</span><span class="n">strip</span><span class="p">()</span>
|
|
<span class="n">newvalue</span> <span class="o">=</span> <span class="n">entry</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span><span class="o">.</span><span class="n">strip</span><span class="p">()</span>
|
|
|
|
<span class="c1"># Syntax error if field name is too short or blank</span>
|
|
<span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">fieldname</span><span class="p">)</span> <span class="o"><</span> <span class="mi">1</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">syntax_err</span><span class="p">)</span>
|
|
<span class="n">text</span> <span class="o">=</span> <span class="p">(</span><span class="kc">None</span><span class="p">,</span> <span class="n">formhelptext</span><span class="p">)</span>
|
|
<span class="k">return</span> <span class="n">text</span><span class="p">,</span> <span class="n">options</span>
|
|
|
|
<span class="c1"># Attempt to match field name to field in form data</span>
|
|
<span class="n">matched_field</span> <span class="o">=</span> <span class="kc">None</span>
|
|
<span class="k">for</span> <span class="n">key</span> <span class="ow">in</span> <span class="n">formdata</span><span class="o">.</span><span class="n">keys</span><span class="p">():</span>
|
|
<span class="k">if</span> <span class="n">fieldname</span><span class="o">.</span><span class="n">lower</span><span class="p">()</span> <span class="ow">in</span> <span class="n">key</span><span class="o">.</span><span class="n">lower</span><span class="p">():</span>
|
|
<span class="n">matched_field</span> <span class="o">=</span> <span class="n">key</span>
|
|
|
|
<span class="c1"># No matched field</span>
|
|
<span class="k">if</span> <span class="n">matched_field</span> <span class="ow">is</span> <span class="kc">None</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">"Field '</span><span class="si">%s</span><span class="s2">' does not exist!"</span> <span class="o">%</span> <span class="n">fieldname</span><span class="p">)</span>
|
|
<span class="n">text</span> <span class="o">=</span> <span class="p">(</span><span class="kc">None</span><span class="p">,</span> <span class="n">formhelptext</span><span class="p">)</span>
|
|
<span class="k">return</span> <span class="n">text</span><span class="p">,</span> <span class="n">options</span>
|
|
|
|
<span class="c1"># Set new field value if match</span>
|
|
<span class="c1"># Get data from template</span>
|
|
<span class="n">fieldtype</span> <span class="o">=</span> <span class="kc">None</span>
|
|
<span class="n">max_value</span> <span class="o">=</span> <span class="kc">None</span>
|
|
<span class="n">min_value</span> <span class="o">=</span> <span class="kc">None</span>
|
|
<span class="n">truestr</span> <span class="o">=</span> <span class="s2">"True"</span>
|
|
<span class="n">falsestr</span> <span class="o">=</span> <span class="s2">"False"</span>
|
|
<span class="n">verifyfunc</span> <span class="o">=</span> <span class="kc">None</span>
|
|
<span class="k">for</span> <span class="n">field</span> <span class="ow">in</span> <span class="n">formtemplate</span><span class="p">:</span>
|
|
<span class="k">if</span> <span class="n">field</span><span class="p">[</span><span class="s2">"fieldname"</span><span class="p">]</span> <span class="o">==</span> <span class="n">matched_field</span><span class="p">:</span>
|
|
<span class="n">fieldtype</span> <span class="o">=</span> <span class="n">field</span><span class="p">[</span><span class="s2">"fieldtype"</span><span class="p">]</span>
|
|
<span class="k">if</span> <span class="s2">"max"</span> <span class="ow">in</span> <span class="n">field</span><span class="o">.</span><span class="n">keys</span><span class="p">():</span>
|
|
<span class="n">max_value</span> <span class="o">=</span> <span class="n">field</span><span class="p">[</span><span class="s2">"max"</span><span class="p">]</span>
|
|
<span class="k">if</span> <span class="s2">"min"</span> <span class="ow">in</span> <span class="n">field</span><span class="o">.</span><span class="n">keys</span><span class="p">():</span>
|
|
<span class="n">min_value</span> <span class="o">=</span> <span class="n">field</span><span class="p">[</span><span class="s2">"min"</span><span class="p">]</span>
|
|
<span class="k">if</span> <span class="s2">"truestr"</span> <span class="ow">in</span> <span class="n">field</span><span class="o">.</span><span class="n">keys</span><span class="p">():</span>
|
|
<span class="n">truestr</span> <span class="o">=</span> <span class="n">field</span><span class="p">[</span><span class="s2">"truestr"</span><span class="p">]</span>
|
|
<span class="k">if</span> <span class="s2">"falsestr"</span> <span class="ow">in</span> <span class="n">field</span><span class="o">.</span><span class="n">keys</span><span class="p">():</span>
|
|
<span class="n">falsestr</span> <span class="o">=</span> <span class="n">field</span><span class="p">[</span><span class="s2">"falsestr"</span><span class="p">]</span>
|
|
<span class="k">if</span> <span class="s2">"verifyfunc"</span> <span class="ow">in</span> <span class="n">field</span><span class="o">.</span><span class="n">keys</span><span class="p">():</span>
|
|
<span class="n">verifyfunc</span> <span class="o">=</span> <span class="n">field</span><span class="p">[</span><span class="s2">"verifyfunc"</span><span class="p">]</span>
|
|
|
|
<span class="c1"># Field type text verification</span>
|
|
<span class="k">if</span> <span class="n">fieldtype</span> <span class="o">==</span> <span class="s2">"text"</span><span class="p">:</span>
|
|
<span class="c1"># Test for max/min</span>
|
|
<span class="k">if</span> <span class="n">max_value</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">:</span>
|
|
<span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">newvalue</span><span class="p">)</span> <span class="o">></span> <span class="n">max_value</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">"Field '</span><span class="si">%s</span><span class="s2">' has a maximum length of </span><span class="si">%i</span><span class="s2"> characters."</span>
|
|
<span class="o">%</span> <span class="p">(</span><span class="n">matched_field</span><span class="p">,</span> <span class="n">max_value</span><span class="p">)</span>
|
|
<span class="p">)</span>
|
|
<span class="n">text</span> <span class="o">=</span> <span class="p">(</span><span class="kc">None</span><span class="p">,</span> <span class="n">formhelptext</span><span class="p">)</span>
|
|
<span class="k">return</span> <span class="n">text</span><span class="p">,</span> <span class="n">options</span>
|
|
<span class="k">if</span> <span class="n">min_value</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">:</span>
|
|
<span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">newvalue</span><span class="p">)</span> <span class="o"><</span> <span class="n">min_value</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">"Field '</span><span class="si">%s</span><span class="s2">' reqiures a minimum length of </span><span class="si">%i</span><span class="s2"> characters."</span>
|
|
<span class="o">%</span> <span class="p">(</span><span class="n">matched_field</span><span class="p">,</span> <span class="n">min_value</span><span class="p">)</span>
|
|
<span class="p">)</span>
|
|
<span class="n">text</span> <span class="o">=</span> <span class="p">(</span><span class="kc">None</span><span class="p">,</span> <span class="n">formhelptext</span><span class="p">)</span>
|
|
<span class="k">return</span> <span class="n">text</span><span class="p">,</span> <span class="n">options</span>
|
|
|
|
<span class="c1"># Field type number verification</span>
|
|
<span class="k">if</span> <span class="n">fieldtype</span> <span class="o">==</span> <span class="s2">"number"</span><span class="p">:</span>
|
|
<span class="k">try</span><span class="p">:</span>
|
|
<span class="n">newvalue</span> <span class="o">=</span> <span class="nb">int</span><span class="p">(</span><span class="n">newvalue</span><span class="p">)</span>
|
|
<span class="k">except</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">"Field '</span><span class="si">%s</span><span class="s2">' requires a number."</span> <span class="o">%</span> <span class="n">matched_field</span><span class="p">)</span>
|
|
<span class="n">text</span> <span class="o">=</span> <span class="p">(</span><span class="kc">None</span><span class="p">,</span> <span class="n">formhelptext</span><span class="p">)</span>
|
|
<span class="k">return</span> <span class="n">text</span><span class="p">,</span> <span class="n">options</span>
|
|
<span class="c1"># Test for max/min</span>
|
|
<span class="k">if</span> <span class="n">max_value</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">:</span>
|
|
<span class="k">if</span> <span class="n">newvalue</span> <span class="o">></span> <span class="n">max_value</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">"Field '</span><span class="si">%s</span><span class="s2">' has a maximum value of </span><span class="si">%i</span><span class="s2">."</span> <span class="o">%</span> <span class="p">(</span><span class="n">matched_field</span><span class="p">,</span> <span class="n">max_value</span><span class="p">))</span>
|
|
<span class="n">text</span> <span class="o">=</span> <span class="p">(</span><span class="kc">None</span><span class="p">,</span> <span class="n">formhelptext</span><span class="p">)</span>
|
|
<span class="k">return</span> <span class="n">text</span><span class="p">,</span> <span class="n">options</span>
|
|
<span class="k">if</span> <span class="n">min_value</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">:</span>
|
|
<span class="k">if</span> <span class="n">newvalue</span> <span class="o"><</span> <span class="n">min_value</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">"Field '</span><span class="si">%s</span><span class="s2">' reqiures a minimum value of </span><span class="si">%i</span><span class="s2">."</span> <span class="o">%</span> <span class="p">(</span><span class="n">matched_field</span><span class="p">,</span> <span class="n">min_value</span><span class="p">)</span>
|
|
<span class="p">)</span>
|
|
<span class="n">text</span> <span class="o">=</span> <span class="p">(</span><span class="kc">None</span><span class="p">,</span> <span class="n">formhelptext</span><span class="p">)</span>
|
|
<span class="k">return</span> <span class="n">text</span><span class="p">,</span> <span class="n">options</span>
|
|
|
|
<span class="c1"># Field type bool verification</span>
|
|
<span class="k">if</span> <span class="n">fieldtype</span> <span class="o">==</span> <span class="s2">"bool"</span><span class="p">:</span>
|
|
<span class="k">if</span> <span class="n">newvalue</span><span class="o">.</span><span class="n">lower</span><span class="p">()</span> <span class="o">!=</span> <span class="n">truestr</span><span class="o">.</span><span class="n">lower</span><span class="p">()</span> <span class="ow">and</span> <span class="n">newvalue</span><span class="o">.</span><span class="n">lower</span><span class="p">()</span> <span class="o">!=</span> <span class="n">falsestr</span><span class="o">.</span><span class="n">lower</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">"Please enter '</span><span class="si">%s</span><span class="s2">' or '</span><span class="si">%s</span><span class="s2">' for field '</span><span class="si">%s</span><span class="s2">'."</span> <span class="o">%</span> <span class="p">(</span><span class="n">truestr</span><span class="p">,</span> <span class="n">falsestr</span><span class="p">,</span> <span class="n">matched_field</span><span class="p">)</span>
|
|
<span class="p">)</span>
|
|
<span class="n">text</span> <span class="o">=</span> <span class="p">(</span><span class="kc">None</span><span class="p">,</span> <span class="n">formhelptext</span><span class="p">)</span>
|
|
<span class="k">return</span> <span class="n">text</span><span class="p">,</span> <span class="n">options</span>
|
|
<span class="k">if</span> <span class="n">newvalue</span><span class="o">.</span><span class="n">lower</span><span class="p">()</span> <span class="o">==</span> <span class="n">truestr</span><span class="o">.</span><span class="n">lower</span><span class="p">():</span>
|
|
<span class="n">newvalue</span> <span class="o">=</span> <span class="kc">True</span>
|
|
<span class="k">elif</span> <span class="n">newvalue</span><span class="o">.</span><span class="n">lower</span><span class="p">()</span> <span class="o">==</span> <span class="n">falsestr</span><span class="o">.</span><span class="n">lower</span><span class="p">():</span>
|
|
<span class="n">newvalue</span> <span class="o">=</span> <span class="kc">False</span>
|
|
|
|
<span class="c1"># Call verify function if present</span>
|
|
<span class="k">if</span> <span class="n">verifyfunc</span><span class="p">:</span>
|
|
<span class="k">if</span> <span class="n">verifyfunc</span><span class="p">(</span><span class="n">caller</span><span class="p">,</span> <span class="n">newvalue</span><span class="p">)</span> <span class="ow">is</span> <span class="kc">False</span><span class="p">:</span>
|
|
<span class="c1"># No error message is given - should be provided by verifyfunc</span>
|
|
<span class="n">text</span> <span class="o">=</span> <span class="p">(</span><span class="kc">None</span><span class="p">,</span> <span class="n">formhelptext</span><span class="p">)</span>
|
|
<span class="k">return</span> <span class="n">text</span><span class="p">,</span> <span class="n">options</span>
|
|
<span class="k">elif</span> <span class="n">verifyfunc</span><span class="p">(</span><span class="n">caller</span><span class="p">,</span> <span class="n">newvalue</span><span class="p">)</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">True</span><span class="p">:</span>
|
|
<span class="n">newvalue</span> <span class="o">=</span> <span class="n">verifyfunc</span><span class="p">(</span><span class="n">caller</span><span class="p">,</span> <span class="n">newvalue</span><span class="p">)</span>
|
|
<span class="c1"># Set '0' or '1' to True or False if the field type is bool</span>
|
|
<span class="k">if</span> <span class="n">fieldtype</span> <span class="o">==</span> <span class="s2">"bool"</span><span class="p">:</span>
|
|
<span class="k">if</span> <span class="n">newvalue</span> <span class="o">==</span> <span class="mi">0</span><span class="p">:</span>
|
|
<span class="n">newvalue</span> <span class="o">=</span> <span class="kc">False</span>
|
|
<span class="k">elif</span> <span class="n">newvalue</span> <span class="o">==</span> <span class="mi">1</span><span class="p">:</span>
|
|
<span class="n">newvalue</span> <span class="o">=</span> <span class="kc">True</span>
|
|
|
|
<span class="c1"># If everything checks out, update form!!</span>
|
|
<span class="n">formdata</span><span class="o">.</span><span class="n">update</span><span class="p">({</span><span class="n">matched_field</span><span class="p">:</span> <span class="n">newvalue</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">_menutree</span><span class="o">.</span><span class="n">formdata</span> <span class="o">=</span> <span class="n">formdata</span>
|
|
|
|
<span class="c1"># Account for truestr and falsestr when updating a boolean form</span>
|
|
<span class="n">announced_newvalue</span> <span class="o">=</span> <span class="n">newvalue</span>
|
|
<span class="k">if</span> <span class="n">newvalue</span> <span class="ow">is</span> <span class="kc">True</span><span class="p">:</span>
|
|
<span class="n">announced_newvalue</span> <span class="o">=</span> <span class="n">truestr</span>
|
|
<span class="k">elif</span> <span class="n">newvalue</span> <span class="ow">is</span> <span class="kc">False</span><span class="p">:</span>
|
|
<span class="n">announced_newvalue</span> <span class="o">=</span> <span class="n">falsestr</span>
|
|
|
|
<span class="c1"># Announce the new value to the player</span>
|
|
<span class="n">caller</span><span class="o">.</span><span class="n">msg</span><span class="p">(</span><span class="s2">"Field '</span><span class="si">%s</span><span class="s2">' set to: </span><span class="si">%s</span><span class="s2">"</span> <span class="o">%</span> <span class="p">(</span><span class="n">matched_field</span><span class="p">,</span> <span class="nb">str</span><span class="p">(</span><span class="n">announced_newvalue</span><span class="p">)))</span>
|
|
<span class="n">text</span> <span class="o">=</span> <span class="p">(</span><span class="kc">None</span><span class="p">,</span> <span class="n">formhelptext</span><span class="p">)</span>
|
|
|
|
<span class="k">return</span> <span class="n">text</span><span class="p">,</span> <span class="n">options</span></div>
|
|
|
|
|
|
<div class="viewcode-block" id="form_template_to_dict"><a class="viewcode-back" href="../../../api/evennia.contrib.fieldfill.html#evennia.contrib.fieldfill.form_template_to_dict">[docs]</a><span class="k">def</span> <span class="nf">form_template_to_dict</span><span class="p">(</span><span class="n">formtemplate</span><span class="p">):</span>
|
|
<span class="sd">"""</span>
|
|
<span class="sd"> Initializes a dictionary of form data from the given list-of-dictionaries</span>
|
|
<span class="sd"> form template, as formatted above.</span>
|
|
|
|
<span class="sd"> Args:</span>
|
|
<span class="sd"> formtemplate (list of dicts): Tempate for the form to be initialized.</span>
|
|
|
|
<span class="sd"> Returns:</span>
|
|
<span class="sd"> formdata (dict): Dictionary of initalized form data.</span>
|
|
<span class="sd"> """</span>
|
|
<span class="n">formdata</span> <span class="o">=</span> <span class="p">{}</span>
|
|
|
|
<span class="k">for</span> <span class="n">field</span> <span class="ow">in</span> <span class="n">formtemplate</span><span class="p">:</span>
|
|
<span class="c1"># Value is blank by default</span>
|
|
<span class="n">fieldvalue</span> <span class="o">=</span> <span class="kc">None</span>
|
|
<span class="k">if</span> <span class="s2">"default"</span> <span class="ow">in</span> <span class="n">field</span><span class="p">:</span>
|
|
<span class="c1"># Add in default value if present</span>
|
|
<span class="n">fieldvalue</span> <span class="o">=</span> <span class="n">field</span><span class="p">[</span><span class="s2">"default"</span><span class="p">]</span>
|
|
<span class="n">formdata</span><span class="o">.</span><span class="n">update</span><span class="p">({</span><span class="n">field</span><span class="p">[</span><span class="s2">"fieldname"</span><span class="p">]:</span> <span class="n">fieldvalue</span><span class="p">})</span>
|
|
|
|
<span class="k">return</span> <span class="n">formdata</span></div>
|
|
|
|
|
|
<div class="viewcode-block" id="display_formdata"><a class="viewcode-back" href="../../../api/evennia.contrib.fieldfill.html#evennia.contrib.fieldfill.display_formdata">[docs]</a><span class="k">def</span> <span class="nf">display_formdata</span><span class="p">(</span><span class="n">formtemplate</span><span class="p">,</span> <span class="n">formdata</span><span class="p">,</span> <span class="n">pretext</span><span class="o">=</span><span class="s2">""</span><span class="p">,</span> <span class="n">posttext</span><span class="o">=</span><span class="s2">""</span><span class="p">,</span> <span class="n">borderstyle</span><span class="o">=</span><span class="s2">"cells"</span><span class="p">):</span>
|
|
<span class="sd">"""</span>
|
|
<span class="sd"> Displays a form's current data as a table. Used in the form menu.</span>
|
|
|
|
<span class="sd"> Args:</span>
|
|
<span class="sd"> formtemplate (list of dicts): Template for the form</span>
|
|
<span class="sd"> formdata (dict): Form's current data</span>
|
|
|
|
<span class="sd"> Options:</span>
|
|
<span class="sd"> pretext (str): Text to put before the form table.</span>
|
|
<span class="sd"> posttext (str): Text to put after the form table.</span>
|
|
<span class="sd"> borderstyle (str): EvTable's border style.</span>
|
|
<span class="sd"> """</span>
|
|
|
|
<span class="n">formtable</span> <span class="o">=</span> <span class="n">evtable</span><span class="o">.</span><span class="n">EvTable</span><span class="p">(</span><span class="n">border</span><span class="o">=</span><span class="n">borderstyle</span><span class="p">,</span> <span class="n">valign</span><span class="o">=</span><span class="s2">"t"</span><span class="p">,</span> <span class="n">maxwidth</span><span class="o">=</span><span class="mi">80</span><span class="p">)</span>
|
|
<span class="n">field_name_width</span> <span class="o">=</span> <span class="mi">5</span>
|
|
|
|
<span class="k">for</span> <span class="n">field</span> <span class="ow">in</span> <span class="n">formtemplate</span><span class="p">:</span>
|
|
<span class="n">new_fieldname</span> <span class="o">=</span> <span class="kc">None</span>
|
|
<span class="n">new_fieldvalue</span> <span class="o">=</span> <span class="kc">None</span>
|
|
<span class="c1"># Get field name</span>
|
|
<span class="n">new_fieldname</span> <span class="o">=</span> <span class="s2">"|w"</span> <span class="o">+</span> <span class="n">field</span><span class="p">[</span><span class="s2">"fieldname"</span><span class="p">]</span> <span class="o">+</span> <span class="s2">":|n"</span>
|
|
<span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">field</span><span class="p">[</span><span class="s2">"fieldname"</span><span class="p">])</span> <span class="o">+</span> <span class="mi">5</span> <span class="o">></span> <span class="n">field_name_width</span><span class="p">:</span>
|
|
<span class="n">field_name_width</span> <span class="o">=</span> <span class="nb">len</span><span class="p">(</span><span class="n">field</span><span class="p">[</span><span class="s2">"fieldname"</span><span class="p">])</span> <span class="o">+</span> <span class="mi">5</span>
|
|
<span class="c1"># Get field value</span>
|
|
<span class="k">if</span> <span class="n">formdata</span><span class="p">[</span><span class="n">field</span><span class="p">[</span><span class="s2">"fieldname"</span><span class="p">]]</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">:</span>
|
|
<span class="n">new_fieldvalue</span> <span class="o">=</span> <span class="nb">str</span><span class="p">(</span><span class="n">formdata</span><span class="p">[</span><span class="n">field</span><span class="p">[</span><span class="s2">"fieldname"</span><span class="p">]])</span>
|
|
<span class="c1"># Use blank message if field is blank and once is present</span>
|
|
<span class="k">if</span> <span class="n">new_fieldvalue</span> <span class="ow">is</span> <span class="kc">None</span> <span class="ow">and</span> <span class="s2">"blankmsg"</span> <span class="ow">in</span> <span class="n">field</span><span class="p">:</span>
|
|
<span class="n">new_fieldvalue</span> <span class="o">=</span> <span class="s2">"|x"</span> <span class="o">+</span> <span class="nb">str</span><span class="p">(</span><span class="n">field</span><span class="p">[</span><span class="s2">"blankmsg"</span><span class="p">])</span> <span class="o">+</span> <span class="s2">"|n"</span>
|
|
<span class="k">elif</span> <span class="n">new_fieldvalue</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
|
|
<span class="n">new_fieldvalue</span> <span class="o">=</span> <span class="s2">" "</span>
|
|
<span class="c1"># Replace True and False values with truestr and falsestr from template</span>
|
|
<span class="k">if</span> <span class="n">formdata</span><span class="p">[</span><span class="n">field</span><span class="p">[</span><span class="s2">"fieldname"</span><span class="p">]]</span> <span class="ow">is</span> <span class="kc">True</span> <span class="ow">and</span> <span class="s2">"truestr"</span> <span class="ow">in</span> <span class="n">field</span><span class="p">:</span>
|
|
<span class="n">new_fieldvalue</span> <span class="o">=</span> <span class="n">field</span><span class="p">[</span><span class="s2">"truestr"</span><span class="p">]</span>
|
|
<span class="k">elif</span> <span class="n">formdata</span><span class="p">[</span><span class="n">field</span><span class="p">[</span><span class="s2">"fieldname"</span><span class="p">]]</span> <span class="ow">is</span> <span class="kc">False</span> <span class="ow">and</span> <span class="s2">"falsestr"</span> <span class="ow">in</span> <span class="n">field</span><span class="p">:</span>
|
|
<span class="n">new_fieldvalue</span> <span class="o">=</span> <span class="n">field</span><span class="p">[</span><span class="s2">"falsestr"</span><span class="p">]</span>
|
|
<span class="c1"># Add name and value to table</span>
|
|
<span class="n">formtable</span><span class="o">.</span><span class="n">add_row</span><span class="p">(</span><span class="n">new_fieldname</span><span class="p">,</span> <span class="n">new_fieldvalue</span><span class="p">)</span>
|
|
|
|
<span class="n">formtable</span><span class="o">.</span><span class="n">reformat_column</span><span class="p">(</span><span class="mi">0</span><span class="p">,</span> <span class="n">align</span><span class="o">=</span><span class="s2">"r"</span><span class="p">,</span> <span class="n">width</span><span class="o">=</span><span class="n">field_name_width</span><span class="p">)</span>
|
|
|
|
<span class="k">return</span> <span class="n">pretext</span> <span class="o">+</span> <span class="s2">"|/"</span> <span class="o">+</span> <span class="nb">str</span><span class="p">(</span><span class="n">formtable</span><span class="p">)</span> <span class="o">+</span> <span class="s2">"|/"</span> <span class="o">+</span> <span class="n">posttext</span></div>
|
|
|
|
|
|
<span class="c1"># EXAMPLE FUNCTIONS / COMMAND STARTS HERE</span>
|
|
|
|
|
|
<div class="viewcode-block" id="verify_online_player"><a class="viewcode-back" href="../../../api/evennia.contrib.fieldfill.html#evennia.contrib.fieldfill.verify_online_player">[docs]</a><span class="k">def</span> <span class="nf">verify_online_player</span><span class="p">(</span><span class="n">caller</span><span class="p">,</span> <span class="n">value</span><span class="p">):</span>
|
|
<span class="sd">"""</span>
|
|
<span class="sd"> Example 'verify function' that matches player input to an online character</span>
|
|
<span class="sd"> or else rejects their input as invalid.</span>
|
|
|
|
<span class="sd"> Args:</span>
|
|
<span class="sd"> caller (obj): Player entering the form data.</span>
|
|
<span class="sd"> value (str): String player entered into the form, to be verified.</span>
|
|
|
|
<span class="sd"> Returns:</span>
|
|
<span class="sd"> matched_character (obj or False): dbref to a currently logged in</span>
|
|
<span class="sd"> character object - reference to the object will be stored in</span>
|
|
<span class="sd"> the form instead of a string. Returns False if no match is</span>
|
|
<span class="sd"> made.</span>
|
|
<span class="sd"> """</span>
|
|
<span class="c1"># Get a list of sessions</span>
|
|
<span class="n">session_list</span> <span class="o">=</span> <span class="n">SESSIONS</span><span class="o">.</span><span class="n">get_sessions</span><span class="p">()</span>
|
|
<span class="n">char_list</span> <span class="o">=</span> <span class="p">[]</span>
|
|
<span class="n">matched_character</span> <span class="o">=</span> <span class="kc">None</span>
|
|
|
|
<span class="c1"># Get a list of online characters</span>
|
|
<span class="k">for</span> <span class="n">session</span> <span class="ow">in</span> <span class="n">session_list</span><span class="p">:</span>
|
|
<span class="k">if</span> <span class="ow">not</span> <span class="n">session</span><span class="o">.</span><span class="n">logged_in</span><span class="p">:</span>
|
|
<span class="c1"># Skip over logged out characters</span>
|
|
<span class="k">continue</span>
|
|
<span class="c1"># Append to our list of online characters otherwise</span>
|
|
<span class="n">char_list</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">session</span><span class="o">.</span><span class="n">get_puppet</span><span class="p">())</span>
|
|
|
|
<span class="c1"># Match player input to a character name</span>
|
|
<span class="k">for</span> <span class="n">character</span> <span class="ow">in</span> <span class="n">char_list</span><span class="p">:</span>
|
|
<span class="k">if</span> <span class="n">value</span><span class="o">.</span><span class="n">lower</span><span class="p">()</span> <span class="o">==</span> <span class="n">character</span><span class="o">.</span><span class="n">key</span><span class="o">.</span><span class="n">lower</span><span class="p">():</span>
|
|
<span class="n">matched_character</span> <span class="o">=</span> <span class="n">character</span>
|
|
|
|
<span class="c1"># If input didn't match to a character</span>
|
|
<span class="k">if</span> <span class="ow">not</span> <span class="n">matched_character</span><span class="p">:</span>
|
|
<span class="c1"># Send the player an error message unique to this function</span>
|
|
<span class="n">caller</span><span class="o">.</span><span class="n">msg</span><span class="p">(</span><span class="s2">"No character matching '</span><span class="si">%s</span><span class="s2">' is online."</span> <span class="o">%</span> <span class="n">value</span><span class="p">)</span>
|
|
<span class="c1"># Returning False indicates the new value is not valid</span>
|
|
<span class="k">return</span> <span class="kc">False</span>
|
|
|
|
<span class="c1"># Returning anything besides True or False will replace the player's input with the returned</span>
|
|
<span class="c1"># value. In this case, the value becomes a reference to the character object. You can store data</span>
|
|
<span class="c1"># besides strings and integers in the 'formdata' dictionary this way!</span>
|
|
<span class="k">return</span> <span class="n">matched_character</span></div>
|
|
|
|
|
|
<span class="c1"># Form template for the example 'delayed message' form</span>
|
|
<span class="n">SAMPLE_FORM</span> <span class="o">=</span> <span class="p">[</span>
|
|
<span class="p">{</span>
|
|
<span class="s2">"fieldname"</span><span class="p">:</span> <span class="s2">"Character"</span><span class="p">,</span>
|
|
<span class="s2">"fieldtype"</span><span class="p">:</span> <span class="s2">"text"</span><span class="p">,</span>
|
|
<span class="s2">"max"</span><span class="p">:</span> <span class="mi">30</span><span class="p">,</span>
|
|
<span class="s2">"blankmsg"</span><span class="p">:</span> <span class="s2">"(Name of an online player)"</span><span class="p">,</span>
|
|
<span class="s2">"required"</span><span class="p">:</span> <span class="kc">True</span><span class="p">,</span>
|
|
<span class="s2">"verifyfunc"</span><span class="p">:</span> <span class="n">verify_online_player</span><span class="p">,</span>
|
|
<span class="p">},</span>
|
|
<span class="p">{</span>
|
|
<span class="s2">"fieldname"</span><span class="p">:</span> <span class="s2">"Delay"</span><span class="p">,</span>
|
|
<span class="s2">"fieldtype"</span><span class="p">:</span> <span class="s2">"number"</span><span class="p">,</span>
|
|
<span class="s2">"min"</span><span class="p">:</span> <span class="mi">3</span><span class="p">,</span>
|
|
<span class="s2">"max"</span><span class="p">:</span> <span class="mi">30</span><span class="p">,</span>
|
|
<span class="s2">"default"</span><span class="p">:</span> <span class="mi">10</span><span class="p">,</span>
|
|
<span class="s2">"cantclear"</span><span class="p">:</span> <span class="kc">True</span><span class="p">,</span>
|
|
<span class="p">},</span>
|
|
<span class="p">{</span>
|
|
<span class="s2">"fieldname"</span><span class="p">:</span> <span class="s2">"Message"</span><span class="p">,</span>
|
|
<span class="s2">"fieldtype"</span><span class="p">:</span> <span class="s2">"text"</span><span class="p">,</span>
|
|
<span class="s2">"min"</span><span class="p">:</span> <span class="mi">3</span><span class="p">,</span>
|
|
<span class="s2">"max"</span><span class="p">:</span> <span class="mi">200</span><span class="p">,</span>
|
|
<span class="s2">"blankmsg"</span><span class="p">:</span> <span class="s2">"(Message up to 200 characters)"</span><span class="p">,</span>
|
|
<span class="p">},</span>
|
|
<span class="p">{</span>
|
|
<span class="s2">"fieldname"</span><span class="p">:</span> <span class="s2">"Anonymous"</span><span class="p">,</span>
|
|
<span class="s2">"fieldtype"</span><span class="p">:</span> <span class="s2">"bool"</span><span class="p">,</span>
|
|
<span class="s2">"truestr"</span><span class="p">:</span> <span class="s2">"Yes"</span><span class="p">,</span>
|
|
<span class="s2">"falsestr"</span><span class="p">:</span> <span class="s2">"No"</span><span class="p">,</span>
|
|
<span class="s2">"default"</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
|
|
<span class="p">},</span>
|
|
<span class="p">]</span>
|
|
|
|
|
|
<div class="viewcode-block" id="CmdTestMenu"><a class="viewcode-back" href="../../../api/evennia.contrib.fieldfill.html#evennia.contrib.fieldfill.CmdTestMenu">[docs]</a><span class="k">class</span> <span class="nc">CmdTestMenu</span><span class="p">(</span><span class="n">Command</span><span class="p">):</span>
|
|
<span class="sd">"""</span>
|
|
<span class="sd"> This test command will initialize a menu that presents you with a form.</span>
|
|
<span class="sd"> You can fill out the fields of this form in any order, and then type in</span>
|
|
<span class="sd"> 'send' to send a message to another online player, which will reach them</span>
|
|
<span class="sd"> after a delay you specify.</span>
|
|
|
|
<span class="sd"> Usage:</span>
|
|
<span class="sd"> <field> = <new value></span>
|
|
<span class="sd"> clear <field></span>
|
|
<span class="sd"> help</span>
|
|
<span class="sd"> look</span>
|
|
<span class="sd"> quit</span>
|
|
<span class="sd"> send</span>
|
|
<span class="sd"> """</span>
|
|
|
|
<span class="n">key</span> <span class="o">=</span> <span class="s2">"testmenu"</span>
|
|
|
|
<div class="viewcode-block" id="CmdTestMenu.func"><a class="viewcode-back" href="../../../api/evennia.contrib.fieldfill.html#evennia.contrib.fieldfill.CmdTestMenu.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"> This performs the actual command.</span>
|
|
<span class="sd"> """</span>
|
|
<span class="n">pretext</span> <span class="o">=</span> <span class="p">(</span>
|
|
<span class="s2">"|cSend a delayed message to another player ---------------------------------------|n"</span>
|
|
<span class="p">)</span>
|
|
<span class="n">posttext</span> <span class="o">=</span> <span class="p">(</span>
|
|
<span class="s2">"|c--------------------------------------------------------------------------------|n|/"</span>
|
|
<span class="s2">"Syntax: type |c<field> = <new value>|n to change the values of the form. Given|/"</span>
|
|
<span class="s2">"player must be currently logged in, delay is given in seconds. When you are|/"</span>
|
|
<span class="s2">"finished, type '|csend|n' to send the message.|/"</span>
|
|
<span class="p">)</span>
|
|
|
|
<span class="n">init_fill_field</span><span class="p">(</span>
|
|
<span class="n">SAMPLE_FORM</span><span class="p">,</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">caller</span><span class="p">,</span>
|
|
<span class="n">init_delayed_message</span><span class="p">,</span>
|
|
<span class="n">pretext</span><span class="o">=</span><span class="n">pretext</span><span class="p">,</span>
|
|
<span class="n">posttext</span><span class="o">=</span><span class="n">posttext</span><span class="p">,</span>
|
|
<span class="n">submitcmd</span><span class="o">=</span><span class="s2">"send"</span><span class="p">,</span>
|
|
<span class="n">borderstyle</span><span class="o">=</span><span class="s2">"none"</span><span class="p">,</span>
|
|
<span class="p">)</span></div></div>
|
|
|
|
|
|
<div class="viewcode-block" id="sendmessage"><a class="viewcode-back" href="../../../api/evennia.contrib.fieldfill.html#evennia.contrib.fieldfill.sendmessage">[docs]</a><span class="k">def</span> <span class="nf">sendmessage</span><span class="p">(</span><span class="n">obj</span><span class="p">,</span> <span class="n">text</span><span class="p">):</span>
|
|
<span class="sd">"""</span>
|
|
<span class="sd"> Callback to send a message to a player.</span>
|
|
|
|
<span class="sd"> Args:</span>
|
|
<span class="sd"> obj (obj): Player to message.</span>
|
|
<span class="sd"> text (str): Message.</span>
|
|
<span class="sd"> """</span>
|
|
<span class="n">obj</span><span class="o">.</span><span class="n">msg</span><span class="p">(</span><span class="n">text</span><span class="p">)</span></div>
|
|
|
|
|
|
<div class="viewcode-block" id="init_delayed_message"><a class="viewcode-back" href="../../../api/evennia.contrib.fieldfill.html#evennia.contrib.fieldfill.init_delayed_message">[docs]</a><span class="k">def</span> <span class="nf">init_delayed_message</span><span class="p">(</span><span class="n">caller</span><span class="p">,</span> <span class="n">formdata</span><span class="p">):</span>
|
|
<span class="sd">"""</span>
|
|
<span class="sd"> Initializes a delayed message, using data from the example form.</span>
|
|
|
|
<span class="sd"> Args:</span>
|
|
<span class="sd"> caller (obj): Character submitting the message.</span>
|
|
<span class="sd"> formdata (dict): Data from submitted form.</span>
|
|
<span class="sd"> """</span>
|
|
<span class="c1"># Retrieve data from the filled out form.</span>
|
|
<span class="c1"># We stored the character to message as an object ref using a verifyfunc</span>
|
|
<span class="c1"># So we don't have to do any more searching or matching here!</span>
|
|
<span class="n">player_to_message</span> <span class="o">=</span> <span class="n">formdata</span><span class="p">[</span><span class="s2">"Character"</span><span class="p">]</span>
|
|
<span class="n">message_delay</span> <span class="o">=</span> <span class="n">formdata</span><span class="p">[</span><span class="s2">"Delay"</span><span class="p">]</span>
|
|
<span class="n">sender</span> <span class="o">=</span> <span class="nb">str</span><span class="p">(</span><span class="n">caller</span><span class="p">)</span>
|
|
<span class="k">if</span> <span class="n">formdata</span><span class="p">[</span><span class="s2">"Anonymous"</span><span class="p">]</span> <span class="ow">is</span> <span class="kc">True</span><span class="p">:</span>
|
|
<span class="n">sender</span> <span class="o">=</span> <span class="s2">"anonymous"</span>
|
|
<span class="n">message</span> <span class="o">=</span> <span class="p">(</span><span class="s2">"Message from </span><span class="si">%s</span><span class="s2">: "</span> <span class="o">%</span> <span class="n">sender</span><span class="p">)</span> <span class="o">+</span> <span class="nb">str</span><span class="p">(</span><span class="n">formdata</span><span class="p">[</span><span class="s2">"Message"</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">"Message sent to </span><span class="si">%s</span><span class="s2">!"</span> <span class="o">%</span> <span class="n">player_to_message</span><span class="p">)</span>
|
|
<span class="c1"># Make a deferred call to 'sendmessage' above.</span>
|
|
<span class="n">delay</span><span class="p">(</span><span class="n">message_delay</span><span class="p">,</span> <span class="n">sendmessage</span><span class="p">,</span> <span class="n">player_to_message</span><span class="p">,</span> <span class="n">message</span><span class="p">)</span>
|
|
<span class="k">return</span></div>
|
|
</pre></div>
|
|
|
|
<div class="clearer"></div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<div class="sphinxsidebar" role="navigation" aria-label="main navigation">
|
|
<div class="sphinxsidebarwrapper">
|
|
<p class="logo"><a href="../../../index.html">
|
|
<img class="logo" src="../../../_static/evennia_logo.png" alt="Logo"/>
|
|
</a></p>
|
|
<div id="searchbox" style="display: none" role="search">
|
|
<h3 id="searchlabel">Quick search</h3>
|
|
<div class="searchformwrapper">
|
|
<form class="search" action="../../../search.html" method="get">
|
|
<input type="text" name="q" aria-labelledby="searchlabel" />
|
|
<input type="submit" value="Go" />
|
|
</form>
|
|
</div>
|
|
</div>
|
|
<script>$('#searchbox').show(0);</script>
|
|
<h3>Versions</h3>
|
|
<ul>
|
|
<li><a href="fieldfill.html">1.0-dev (develop branch)</a></li>
|
|
<li><a href="../../../../0.9.5/index.html">0.9.5 (v0.9.5 branch)</a></li>
|
|
</ul>
|
|
|
|
</div>
|
|
</div>
|
|
<div class="clearer"></div>
|
|
</div>
|
|
<div class="related" role="navigation" aria-label="related navigation">
|
|
<h3>Navigation</h3>
|
|
<ul>
|
|
<li class="right" style="margin-right: 10px">
|
|
<a href="../../../genindex.html" title="General Index"
|
|
>index</a></li>
|
|
<li class="right" >
|
|
<a href="../../../py-modindex.html" title="Python Module Index"
|
|
>modules</a> |</li>
|
|
<li class="nav-item nav-item-0"><a href="../../../index.html">Evennia 1.0-dev</a> »</li>
|
|
<li class="nav-item nav-item-1"><a href="../../index.html" >Module code</a> »</li>
|
|
<li class="nav-item nav-item-2"><a href="../../evennia.html" >evennia</a> »</li>
|
|
<li class="nav-item nav-item-this"><a href="">evennia.contrib.fieldfill</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> |