3
0
mirror of https://github.com/pragma-/pbot.git synced 2024-11-09 13:39:34 +01:00
Commit Graph

2139 Commits

Author SHA1 Message Date
Pragmatic Software
21ffced2d7 Update version 2019-06-24 19:02:06 -07:00
Pragmatic Software
8e21de1f60 Interpreter: split_line is now smarter about JSON and code 2019-06-24 16:47:31 -07:00
Pragmatic Software
3e2395370f AntiRepeat: strip nick-like prefixes 2019-06-24 12:59:09 -07:00
Pragmatic Software
87e0d33870 AntiRepeat: pay attention to /me 2019-06-24 12:52:41 -07:00
Pragmatic Software
bbd015e607 Update version 2019-06-23 10:34:46 -07:00
Pragmatic Software
8f8b11b9e6 ChanOpCommands: respect effective-level override for chan op commands 2019-06-23 10:34:41 -07:00
Pragmatic Software
0f81e39276 WebPaste: remove ptpb.pw 2019-06-22 18:48:06 -07:00
Pragmatic Software
ee33d9f5d6 Update version 2019-06-22 18:30:44 -07:00
Pragmatic Software
1e15848442 FactoidCommands: quote arugments only if necessary 2019-06-22 18:30:40 -07:00
Pragmatic Software
5cf13c1bdd Factoids: Remove use of shellwords 2019-06-22 18:29:54 -07:00
Pragmatic Software
51fa020de2 Commands: Remove unused reference 2019-06-22 18:28:38 -07:00
Pragmatic Software
5c8eab8a4c Update version 2019-06-21 12:36:55 -07:00
Pragmatic Software
624c036146 AntiFlood: minor text changes for unbanme 2019-06-21 12:36:43 -07:00
Pragmatic Software
baa33d9fce Update version 2019-06-20 08:55:05 -07:00
Pragmatic Software
3676aed1eb Update version 2019-06-14 18:49:44 -07:00
Pragmatic Software
2832298af3 FactoidModuleLauncher: remove obsoleted escape-handling "magic" 2019-06-10 11:53:04 -07:00
Pragmatic Software
4826b1c851 Interpreter: add default options to split_line() 2019-06-10 11:51:48 -07:00
Pragmatic Software
f0181c7a69 Factoids: add default options for named parameters 2019-06-10 09:21:35 -07:00
Pragmatic Software
75a31458b0 FactoidCommands: factlog/factundo/factredo now work with keywords containing spaces 2019-06-09 21:50:40 -07:00
Pragmatic Software
e1abf1a1a7 MessageHistory: remove no-longer-necessary single-quote logic 2019-06-09 21:49:47 -07:00
Pragmatic Software
982d4b4b8d Factoids: find_factoid now takes an options hash instead 2019-06-09 16:33:27 -07:00
Pragmatic Software
8480d3ce61 FactoidCommands: factchange closing delimiter now optional 2019-06-09 15:36:48 -07:00
Pragmatic Software
6b0d2d0835 Update version 2019-06-09 13:57:58 -07:00
Pragmatic Software
22f899612b FactoidCommands: factchange is now aware of quoted keywords; factchange and factshow now preserve spaces in output 2019-06-09 13:57:52 -07:00
Pragmatic Software
0f81584d8f Interpreter: split_line() now takes an options hash; now accepts "strip_quotes" and "keep_spaces" 2019-06-09 13:57:08 -07:00
Pragmatic Software
b3ac27758d Factoids: keywords can now contain spaces 2019-06-09 09:54:42 -07:00
Pragmatic Software
5d102ee574 Update version 2019-06-09 08:30:05 -07:00
Pragmatic Software
5f0a581096 ParseDate: fix time zones 2019-06-09 08:30:00 -07:00
Pragmatic Software
119d9617bc Update version 2019-06-08 17:57:36 -07:00
Pragmatic Software
90f3d390bd Factoids: er, preserve the quotes in arguments 2019-06-08 17:57:31 -07:00
Pragmatic Software
e0e9cbed25 Update version 2019-06-08 17:52:28 -07:00
Pragmatic Software
f00cabe4ec Factoids: correct edge-case mishandling of quoted arguments 2019-06-08 17:52:25 -07:00
Pragmatic Software
39a2f612f8 Update version 2019-06-08 17:24:54 -07:00
Pragmatic Software
7824a5e6db ParseDate: encourage DateTime::Format::Flexible to understand more kinds of natural input 2019-06-08 17:24:50 -07:00
Pragmatic Software
7523fbcede FactoidCommands: fix an issue where factchange could sometimes fail 2019-06-08 16:00:11 -07:00
Pragmatic Software
be0c487694 Update version 2019-06-07 13:57:13 -07:00
Pragmatic Software
648537f427 Quotegrabs: use split_line instead of parse_arguments 2019-06-07 13:57:05 -07:00
Pragmatic Software
0979ac86d9 Interpreter: split_line now accepts a parameter to strip quotes 2019-06-07 13:56:41 -07:00
Pragmatic Software
ed0c857389 Update version 2019-06-07 13:16:57 -07:00
Pragmatic Software
5d1310adb3 Factoids: variable modifiers such as :ucfirst now pass through to replacements 2019-06-07 13:16:54 -07:00
Pragmatic Software
8f35fa3430 ParseDate: correct typo in sanitizer 2019-06-07 00:41:19 -07:00
Pragmatic Software
23d20abd59 ParseDate: add a couple of more sanitizers 2019-06-07 00:32:06 -07:00
Pragmatic Software
bf77f9e3dc Update version 2019-06-06 23:08:47 -07:00
Pragmatic Software
5496d1a481 ParseDate now understands concise things like "1w5d" or "7h30m" 2019-06-06 23:08:42 -07:00
Pragmatic Software
61004dd077 ParseDate: clarified a couple of comments 2019-06-06 21:52:39 -07:00
Pragmatic Software
dd4dcf2e0a Update version 2019-06-06 21:46:19 -07:00
Pragmatic Software
b1729a13e2 ParseDate: complete rewrite, replacing Time::ParseDate with DateTime::Format::Flexible
Now supports more types of input, including those containing timezones!

Converted PBot::Utils::ParseDate to an internal PBot module.
2019-06-06 21:46:00 -07:00
Pragmatic Software
4a27a7e59f Factoids: factoid variable identifiers can now be delimited with braces (e.g.: ${foo}) 2019-06-06 15:21:15 -07:00
Pragmatic Software
8fc3594bcd Update version 2019-06-03 08:50:49 -07:00
Pragmatic Software
bffbc8b3d0 Factoids: add requires_arguments metadata to tell usage metadata if a usage is required in a pipe or other expansion 2019-06-03 08:50:42 -07:00
Pragmatic Software
563f8da40f Factoids: usage metadata now understands $0 for keyword 2019-06-03 08:01:52 -07:00
Pragmatic Software
21acc5ed55 Update version 2019-06-02 22:35:17 -07:00
Pragmatic Software
ff3ffea15e Factoids: factoid variables can now be quoted properly 2019-06-02 22:34:54 -07:00
Pragmatic Software
8814fdfe9b FactoidCommands: factadd now supports -f option to force overwriting existing factoid 2019-06-02 22:34:17 -07:00
Pragmatic Software
460df9ef64 Factoids: Remove packages left-over from execute_code_factoid_using_safe's removal 2019-06-02 19:37:34 -07:00
Pragmatic Software
939d96141a Update version 2019-06-02 19:31:29 -07:00
Pragmatic Software
5eeabccaf2 Factoids: remove execute_code_factoid_using_safe 2019-06-02 19:31:25 -07:00
Pragmatic Software
bb08250673 Factoid usage metadata can now interrupt pipes to display usage message as appropriate 2019-06-02 19:30:35 -07:00
Pragmatic Software
838b52f6b5 Update version 2019-06-02 16:59:31 -07:00
Pragmatic Software
f87e3c7cd8 Factoids: add usage metadata to show usage message if no arguments supplied 2019-06-02 16:59:27 -07:00
Pragmatic Software
63b523dbc7 Update version 2019-06-02 16:29:10 -07:00
Pragmatic Software
6e98c471d2 Factoids: add allow_empty_args metadata to prevent empty $args from expanding as $nick 2019-06-02 16:28:55 -07:00
Pragmatic Software
47c05cfdac FactoidCommands: factundo/factlog can now express deleted metadata keys 2019-06-02 16:21:42 -07:00
Pragmatic Software
ef96ba21cb Interpreter: slightly increase human-like delay 2019-06-01 18:55:08 -07:00
Pragmatic Software
4c9496a2b3 UrlTitles: Do not show titles for bot-commands 2019-05-31 08:59:59 -07:00
Pragmatic Software
e9fc0e5474 Factoids: add flag to prevent --keyword-override parsing 2019-05-31 08:21:27 -07:00
Pragmatic Software
e0a6d9bcb6 Interpreter: remove left-over declaration 2019-05-31 02:27:30 -07:00
Pragmatic Software
a068fe8359 Update version 2019-05-30 09:25:35 -07:00
Pragmatic Software
fcb4404012 Interpreter: extract_bracketed: fix indentation, minor tweaks 2019-05-30 09:25:31 -07:00
Pragmatic Software
0b856c680b Update version 2019-05-30 00:27:58 -07:00
Pragmatic Software
acf35a5df3 Interpreter: write custom extract_bracketed to gracefully handle unbalanced brackets or quotes 2019-05-30 00:27:52 -07:00
Pragmatic Software
c97d0a5561 Update version 2019-05-29 14:34:19 -07:00
Pragmatic Software
d8a9660e39 Factoids: undo weird $args man-in-the-middle behavior 2019-05-29 10:36:09 -07:00
Pragmatic Software
56f7e2ab7d Factoids: stop repeatedly trying to expand undefined factoid variables 2019-05-29 09:49:24 -07:00
Pragmatic Software
ccfb109829 Update version 2019-05-28 11:56:12 -07:00
Pragmatic Software
b04015286c Interpreter: minor corrections to split_line 2019-05-28 11:56:06 -07:00
Pragmatic Software
e287887765 Interpreter: rewrite make_args to gracefully handle unbalanced quotes 2019-05-28 11:11:32 -07:00
Pragmatic Software
925a5e57bd Minor whitespace syntax clean-up throughout 2019-05-28 09:19:42 -07:00
Pragmatic Software
00618c5502 Update version 2019-05-27 19:40:56 -07:00
Pragmatic Software
6f282d2968 factset: respect locked metadata 2019-05-27 19:40:24 -07:00
Pragmatic Software
064b4bd72c Update version 2019-05-27 07:43:29 -07:00
Pragmatic Software
aa19260a24 Interpreter: fix mishandling of spaces when building arglist 2019-05-27 07:43:14 -07:00
Pragmatic Software
a851c08ffe Update version 2019-05-22 23:12:34 -07:00
Pragmatic Software
17f5b92a8f Factoids: use correct arguments when calling alias 2019-05-22 23:12:31 -07:00
Pragmatic Software
e617428a72 Update version 2019-05-20 14:06:45 -07:00
Pragmatic Software
cd22e21a6a MessageHistory: recall's arguments now behave more sanely 2019-05-20 14:05:58 -07:00
Pragmatic Software
a892e8e5c1 Interpreter: add tell nick the <command> syntax 2019-05-20 13:10:08 -07:00
Pragmatic Software
8ca11c808b Spinach: add missing comma 2019-05-17 08:46:20 -07:00
Pragmatic Software
2dc78f7383 Interpreter: fix incorrect handling of quoted arguments 2019-05-15 10:59:48 -07:00
Pragmatic Software
6f6090efc5 Interpreter: reduce human-like delay durations 2019-05-15 10:59:20 -07:00
Pragmatic Software
57a4434289 Spinach: Wrap state debug dump with debug_state flag 2019-05-15 10:58:32 -07:00
Pragmatic Software
cb1a88ed9a Update version 2019-05-13 18:04:12 -07:00
Pragmatic Software
14601ef5f5 Spinach: er, use \s not \b to get word count for one word detection 2019-05-13 18:04:09 -07:00
Pragmatic Software
7bec7a0320 Update version 2019-05-13 17:59:31 -07:00
Pragmatic Software
a027f563ca Spinach: reveal lies when skipping/rerolling; do not allow one word lies if truth contains more than one word 2019-05-13 17:59:15 -07:00
Pragmatic Software
1b3def08e4 Update version 2019-05-13 08:37:40 -07:00
Pragmatic Software
bebddb5ea9 Factoids: add require_explicit_args metadata to prevent $args from appending undesirably in aliases 2019-05-13 08:37:36 -07:00
Pragmatic Software
b838a08f8d Update version 2019-05-13 00:24:11 -07:00
Pragmatic Software
5b4af4ce4b Factoids: see previous commit message 2019-05-13 00:24:08 -07:00
Pragmatic Software
62dad2d2df Update version 2019-05-13 00:07:10 -07:00
Pragmatic Software
786d1f75b1 Factoids: effective-level override now actually does something; add locked_to_channel metadata 2019-05-13 00:07:08 -07:00
Pragmatic Software
164d02b886 Update version 2019-05-09 21:11:20 -07:00
Pragmatic Software
73741e5418 code-factoids: handle arguments a little better 2019-05-09 21:04:28 -07:00
Pragmatic Software
2d41c849bc Update version 2019-05-09 18:04:54 -07:00
Pragmatic Software
7da4003ffd Factoids: replace hard-coded max length values with registry values 2019-05-09 18:04:52 -07:00
Pragmatic Software
f9a50f0d27 MessageHistory: get_ancestor_id: ensure id has a valid value 2019-05-09 18:04:15 -07:00
Pragmatic Software
516e093a20 Update version 2019-05-09 13:25:38 -07:00
Pragmatic Software
89b4b1da67 Spinach: stats are now nick-agnostic 2019-05-09 13:25:33 -07:00
Pragmatic Software
d416b01359 Update version 2019-05-09 00:18:30 -07:00
Pragmatic Software
0ecde9d690 Spinach: Minor whitespace fix 2019-05-09 00:18:23 -07:00
Pragmatic Software
9ccd2141a5 Update version 2019-05-09 00:16:45 -07:00
Pragmatic Software
383705aca8 Spinach: clean up previous commit 2019-05-09 00:16:37 -07:00
Pragmatic Software
ed774ac379 Spinach: Reveal answer when skipping/rerolling 2019-05-08 23:07:59 -07:00
Pragmatic Software
7dbaa0b6c3 Update version 2019-05-08 21:08:02 -07:00
Pragmatic Software
69ea38bec6 PBot: load registry before autoloading plugins 2019-05-08 21:07:57 -07:00
Pragmatic Software
207fcba402 Plugins: add replug command 2019-05-08 21:06:56 -07:00
Pragmatic Software
3c3a96461e Minor bugfix for two rarely used plugins 2019-05-08 21:06:10 -07:00
Pragmatic Software
62387c48ef findfactoid now accepts a -regex flag to do a regex search instead of whole-word 2019-05-08 20:48:26 -07:00
Pragmatic Software
d22fe7972d Update version 2019-05-08 20:09:50 -07:00
Pragmatic Software
4ce8e8b316 Increase minimum factoid name length to 60 2019-05-08 20:09:34 -07:00
Pragmatic Software
02c8cfd83b FactoidCommands: allow non-admins to inspect factset values on factoids they do not own, and to be able to factset admin on any factoids instead of using factchange 2019-05-08 13:06:30 -07:00
Pragmatic Software
15aaa6fa1a Spinach: allow non-admins to inspect settings values 2019-05-08 12:48:10 -07:00
Pragmatic Software
e1b6c2d64a Spinach: Use ancestor account id to unify all nicks belonging to one person 2019-05-08 01:39:52 -07:00
Pragmatic Software
f0c0f26138 MessageHistory: Add wrapper to get ancestor id directly from message account 2019-05-08 01:38:59 -07:00
Pragmatic Software
c5c905e74f Spinach: Add commands to show/set game state; improve logging of state 2019-05-08 01:37:00 -07:00
Pragmatic Software
13a1791d2f Update version 2019-05-07 19:57:13 -07:00
Pragmatic Software
0f8966a9ff No longer trips over its feet 2019-05-07 19:57:09 -07:00
Pragmatic Software
acc1c45ba3 Update version 2019-05-07 12:51:29 -07:00
Pragmatic Software
a0359c27dd Spinach: Immediately stop game when last player exits 2019-05-07 03:26:40 -07:00
Pragmatic Software
a75c4b4a65 Update version 2019-05-07 02:19:29 -07:00
Pragmatic Software
d73d5825b6 Spinach: Bug fixes and improvements 2019-05-07 02:19:03 -07:00
Pragmatic Software
7f8272c0f3 Spinach: Do not attempt to choose categories that do not contain questions that meet game configuration (min_difficulty, seen_expiry, etc); slightly speed up some delays 2019-05-06 21:08:09 -07:00
Pragmatic Software
c032450d82 Spinach: Correct extremely minor typo 2019-05-05 23:17:33 -07:00
Pragmatic Software
39952413c7 Update version 2019-05-05 23:11:52 -07:00
Pragmatic Software
e4cddeb54e Spinach: Add difficulty settings; minor bug fixes and improvements 2019-05-05 23:11:45 -07:00
Pragmatic Software
755febc2d7 Update version 2019-05-04 19:32:32 -07:00
Pragmatic Software
e81826e5bd Spinach: Oops, fix bug 2019-05-04 19:32:28 -07:00
Pragmatic Software
8fbc6eda80 Update version 2019-05-04 19:28:50 -07:00
Pragmatic Software
f7825b996e Spinach: add keep command to vote to prevent question from being skipped 2019-05-04 19:28:34 -07:00
Pragmatic Software
f8d8cac7d4 Interpreter: case-insensitive "Why would I want to do that to myself?" exceptions 2019-05-04 19:04:11 -07:00
Pragmatic Software
0538a37678 MessageHistory: recall is now aware of mock 2019-05-04 14:52:25 -07:00
Pragmatic Software
6d08967780 Update version 2019-05-03 17:19:22 -07:00
Pragmatic Software
0b500616b9 Spinach: Remove debugging statements 2019-05-03 17:18:59 -07:00
Pragmatic Software
a3d0f4e0d4 Spinach: sort questions by last_seen timestamp; skip categories whose questions have all been seen; etc 2019-05-02 23:13:27 -07:00
Pragmatic Software
d23af40565 Update version 2019-05-02 15:04:08 -07:00
Pragmatic Software
2c66a7144b Factoids: Properly look-up root keyword data when overriding 2019-05-02 15:04:04 -07:00
Pragmatic Software
06c22f8fda Update version 2019-05-02 14:09:50 -07:00
Pragmatic Software
1ff38eaacc Factoids: root keyword can now be overridden 2019-05-02 14:09:33 -07:00
Pragmatic Software
1f6d655a3e Factoids: Fix broken ref_from when using factfind on an alias 2019-05-02 12:39:05 -07:00
Pragmatic Software
60f279759c Spinach: Lowercase question if more than 80% of the words are title-cased 2019-05-02 12:06:45 -07:00
Pragmatic Software
e09751e0d2 Update version 2019-04-28 01:14:38 -07:00
Pragmatic Software
25b3417080 Spinach: add stats metadata setting; 2nd to last warning time remaining message is now yellow' 2019-04-28 00:21:15 -07:00
Pragmatic Software
7de3cb6dd1 Spinach: show expression used in output for rank expr 2019-04-27 19:09:43 -07:00
Pragmatic Software
8bd1a00ce2 Rectify minor whitespace ugliness 2019-04-27 14:45:59 -07:00
Pragmatic Software
2e41641037 Update version 2019-04-27 14:40:37 -07:00
Pragmatic Software
1a74f7287e Spinach: rank can now accept arbitrary expressions 2019-04-27 14:40:28 -07:00
Pragmatic Software
9707e133ff Spinach: remove ^(THE|A|AN) in answer normalization; fix rolling average score calculation 2019-04-26 22:20:54 -07:00
Pragmatic Software
c15740a820 Spinach: remove decimals from avgscore output 2019-04-26 12:44:20 -07:00
Pragmatic Software
a599a78444 ChanOps: Don't attempt to gain ops for disabled channels 2019-04-25 14:11:54 -07:00
Pragmatic Software
a927ee27a2 Update version 2019-04-24 23:04:15 -07:00
Pragmatic Software
59b5f61de3 Spinach: Rename Stats.pm and Statskeeper.pm 2019-04-24 23:04:09 -07:00
Pragmatic Software
1c5ed2fb0e Update version 2019-04-24 03:55:56 -07:00
Pragmatic Software
940b40e24f Spinach: add stats tracking and ranking 2019-04-24 03:55:48 -07:00
Pragmatic Software
b2b74875e1 Spinach: Add settings metadata: category_autopick and min_players 2019-04-23 18:41:57 -07:00
Pragmatic Software
0b0390dbd7 Spinach: add set/unset commands to modify metadata 2019-04-23 18:22:52 -07:00
Pragmatic Software
781faa678b Spinach: use HashObject to store metadata 2019-04-23 17:59:39 -07:00
Pragmatic Software
958c0bfeb5 Update version 2019-04-22 15:51:20 -07:00
Pragmatic Software
7542e1041f Spinach: Persist filters 2019-04-22 15:51:09 -07:00
Pragmatic Software
f61addcbac Update Spinach filter to distinct inclusion and exclusion 2019-04-21 20:48:07 -07:00
Pragmatic Software
85841ea45c Spinach categories can now be filtered 2019-04-21 19:00:17 -07:00
mannito
d179b87c52 Connect4 fixes: board display and challenge options parsing (#48)
* Connect4: Fix winner_line display logic

* Connect4: Fix challenge options parsing and cleanup.

* Connect4: saner board sizes and error messages
2019-04-21 02:19:48 -07:00
Pragmatic Software
c1f9c902c8 Update version 2018-08-13 20:06:13 -07:00
Pragmatic Software
42f0bb7002 Interpreter: ignore bot commands from unidentified users in +z channels 2018-08-13 20:06:07 -07:00
Pragmatic Software
93b386b0ca RelayUnreg: Correct notification timeout behavior 2018-08-13 20:05:42 -07:00
Pragmatic Software
07c9762cb7 Update version 2018-08-13 14:26:01 -07:00
Pragmatic Software
75f6d86a88 AntiFlood: disregard unreg spam floods on +z channels 2018-08-13 14:25:35 -07:00
Pragmatic Software
8e615fe6a3 MessageHistory: ensure host is always normalized for get_message_account() 2018-08-13 14:24:37 -07:00
Pragmatic Software
fb2124632a AntiRepeat: Disregard unregistered spam 2018-08-13 14:23:47 -07:00
Pragmatic Software
05b1159421 RelayUnreg: limit notification to once every 15 minutes 2018-08-13 14:23:13 -07:00
Pragmatic Software
6929e1ed5d Update version 2018-08-10 22:57:06 -07:00
Pragmatic Software
147c7337d8 No URL titles for unidentified users 2018-08-10 22:57:00 -07:00
Pragmatic Software
4324fe5db3 Update version 2018-08-10 13:14:01 -07:00
k
a19f40251d Fix some broken ,fact behavior (#49) 2018-08-10 13:12:24 -07:00
Pragmatic Software
0fd8e595a5 Update version 2018-08-09 22:44:32 -07:00
Pragmatic Software
16b708851a Replace missed split with split_args 2018-08-09 22:44:28 -07:00
Pragmatic Software
e3df4f3f8e Update version 2018-08-09 10:55:59 -07:00
Pragmatic Software
5fe46db2ce Add quotes around keys in more places 2018-08-09 10:55:53 -07:00
Pragmatic Software
1bedb74720 Update version 2018-08-08 17:58:55 -07:00
Pragmatic Software
8af3682dc3 Add quotes around keywords with spaces in output messages 2018-08-08 17:58:53 -07:00
Pragmatic Software
f255bca0ca Update version 2018-08-08 17:39:02 -07:00
Pragmatic Software
174de2be8e Update all commands to understand quoted arguments; factoid names, etc, can now contain spaces 2018-08-08 17:38:57 -07:00
Pragmatic Software
bbe817cd28 Update version 2018-08-06 20:24:19 -07:00
Pragmatic Software
3141397632 AntiSpam: use positional arguments; minor text changes 2018-08-06 20:24:15 -07:00
Pragmatic Software
6454ff82aa Interpreter: support array of positional arguments 2018-08-06 20:23:35 -07:00
Pragmatic Software
99e0182e11 Update version 2018-08-06 18:47:13 -07:00
Pragmatic Software
7b20a00797 Interpreter: improve parsing of pipes 2018-08-06 18:47:07 -07:00
Pragmatic Software
3007096546 Update version 2018-08-06 11:24:09 -07:00
Pragmatic Software
bb11282e13 AntiSpam: "unless" is too confusing 2018-08-06 11:24:05 -07:00
Pragmatic Software
e861c9dea2 Update version 2018-08-06 11:09:16 -07:00
Pragmatic Software
d10acb815b AntiSpam: Oops, inverted "unless" logic. Tricky, tricky "unless"! 2018-08-06 11:09:13 -07:00