Limnoria/plugins/Aka
Valentin Lorentz 78dc45e99e Aka: eliminate race condition in tests?
Sometimes (very rarely), the test errors with:

```
======================================================================
FAIL: testHistsearch (Aka.test.AkaChannelTestCase)
----------------------------------------------------------------------
Traceback (most recent call last):
  File "/usr/lib/python3/dist-packages/supybot/test.py", line 214, in runTest
    originalRunTest()
  File "/usr/lib/python3/dist-packages/supybot/plugins/Aka/test.py", line 67, in testHistsearch
    self.assertResponse('histsearch .*', '@echo foo')
  File "/usr/lib/python3/dist-packages/supybot/test.py", line 402, in assertResponse
    self.assertEqual(m.args[1], expectedResponse,
AssertionError: '@aka add histsearch "last --from [cif true[80 chars]"]]"' != '@echo foo'
- @aka add histsearch "last --from [cif true \"echo test\" \"echo test\"] --regexp [concat \"m/$1/\" [re s/g// \"@2\"]]"
+ @echo foo
 : '@echo foo' != '@aka add histsearch "last --from [cif true \\"echo test\\" \\"echo test\\"] --regexp [concat \\"m/$1/\\" [re s/g// \\"@2\\"]]"'
```

ie. histsearch returns the 'aka add' message instead of the 'echo foo'
one.

My guess is that if they happen too closely to each other, they get
added to the history in the wrong order (how? it's not threaded)

So this commit works around the issue by making the regexp unambiguous.
2021-02-21 00:18:03 +01:00
..
local Aka: First commit. 2013-07-23 21:02:06 +02:00
locales Fix msgfmt warnings. 2020-03-26 22:10:28 +01:00
__init__.py Aka, Debug: cleanup imports 2020-01-26 10:42:43 -08:00
config.py Aka: Add web UI (#1373) 2019-10-10 17:27:34 +02:00
messages.pot Squashed commit of the following: 2014-12-20 14:37:27 +01:00
plugin.py Aka: Add web UI (#1373) 2019-10-10 17:27:34 +02:00
README.md Aka: fix backquote matching in readme 2017-05-04 14:58:48 +02:00
test.py Aka: eliminate race condition in tests? 2021-02-21 00:18:03 +01:00

This plugin allows the user to create various aliases (known as “Akas”, since Alias is the name of another plugin Aka is based on) to other commands or combinations of other commands (via nested commands).
It is a good idea to always quote the commands that are being aliased so that any nested commands are not immediately run.

Basic usage

Alias

Add an aka, Alias, which eases the transitioning to Aka from Alias.

First we will load Alias and Aka.

<jamessan> @load Alias
<bot> jamessan: The operation succeeded.
<jamessan> @load Aka
<bot> jamessan: The operation succeeded.

Then we import the Alias database to Aka in case it exists and unload Alias.

<jamessan> @importaliasdatabase
<bot> jamessan: The operation succeeded.
<jamessan> @unload Alias
<bot> jamessan: The operation succeeded.

And now we will finally add the Aka alias itself.

<jamessan> @aka add "alias" "aka $1 $*"
<bot> jamessan: The operation succeeded.

Now you can use Aka as you used Alias before.

Trout

Add an aka, trout, which expects a word as an argument

<jamessan> @aka add trout "reply action slaps $1 with a large trout"
<bot> jamessan: The operation succeeded.
<jamessan> @trout me
* bot slaps me with a large trout

This trout aka requires the plugin Reply to be loaded since it provides the action command.

LastFM

Add an aka, lastfm, which expects a last.fm username and replies with their most recently played item.

@aka add lastfm "rss [format concat http://ws.audioscrobbler.com/1.0/user/ [format concat [web urlquote $1] /recenttracks.rss]]"

This lastfm aka requires the following plugins to be loaded: RSS, Format and Web.

RSS provides rss, Format provides concat and Web provides urlquote.

Note that if the nested commands being aliased hadnt been quoted, then those commands would have been run immediately, and @lastfm would always reply with the same information, the result of those commands.