alias problem ^wc(.+)?$

Post Reply
Caled
Posts: 403
Joined: Thu Apr 09, 2009 4:45 am

alias problem ^wc(.+)?$

Post by Caled »

Code: Select all

Alias pattern: ^wc(.+)?$
Script:
if matches[2] == nil then
    send( "clan 2 who" )
else
    send( "clan 2 tell " .. matches[2] )
end
I tried the above with "" instead of nil, and also with matches[1] just in case aliases are different to triggers. The alias just won't fire. It is supposed to allow me to:
"wc" to check my clan who
"wc <text here>" to speak on the clan channel.

I use this check for nil arguments/parameters a lot - for most aliases in fact.
Example in zscript:
#alias {cc} {#IF(%null(%1)) {#2 claw @target} {#2 claw %1}}

In Mudlet I would assume:

Code: Select all

Alias Pattern: ^cc(?:\s)?(\w+)?$
or: ^cc\s?(\w+)?$
Script:
if matches[2] == nil then
    send( "claw " .. target)
    send( "claw " .. target)
else
    send( "claw " .. matches[2])
    send( "claw " .. matches[2])
end
Please help!

Ramiel
Posts: 15
Joined: Sat Apr 25, 2009 5:57 am

Re: alias problem ^wc(.+)?$

Post by Ramiel »

Alias pattern: ^wc(.+)?$

You seem to be missing a space between the wc and the capture.

Caled
Posts: 403
Joined: Thu Apr 09, 2009 4:45 am

Re: alias problem ^wc(.+)?$

Post by Caled »

I figure the capture group will match the space.
But I did try these two alternate patterns as well. None work and i don't see why not.

Code: Select all

  ^wc\s?(.+)?$
 ^wc(?:\s)?(.+)?$

User avatar
Heiko
Site Admin
Posts: 1548
Joined: Wed Mar 11, 2009 6:26 pm

Re: alias problem ^wc(.+)?$

Post by Heiko »

Here you go:

pattern: ^wc\s?(.+)?$

Code: Select all

if matches[2] == nil then 
	echo("caled alias called without arguments\n");
else
	echo("caled alias called cap group<"..matches[2]..">\n");
end
patterns like ^wc *(.+)?$ or ^wc *(.*) would also work.
info on regex quantifiers: http://www.regular-expressions.info/repeat.html

Some background info:
As soon as the alias pattern matches the alias unit will intercept and block the command and issue the clear text substitution if you specified any and run the script. If there is no substitution specified and the script doesn't send a command, the user command will simply be consumed and ignored.
If the script causes a Lua error for some reason the script will stop execution as soon as the error happens, but run again the next time you enter the command.
In your case:

Code: Select all

echo("caled alias called without arguments\n");
echo("caled alias called cap group<"..matches[2]..">\n");
would print the first echo if there are no parameters to "wc" and both echos if there are parameters. If there is no further parameters to "wc" the script execution will cause an error on the second echo, as matches[2] is undefined, and stop execution, thus only printing the first echo.

User avatar
Heiko
Site Admin
Posts: 1548
Joined: Wed Mar 11, 2009 6:26 pm

Re: alias problem ^wc(.+)?$

Post by Heiko »

Empty capture groups
If capture group x is empty matches[x]="" (note that it is *NOT* = nil as nil means that the table index x is not defined)
Consequently, you could write:

Code: Select all

Alias Pattern: ^cc(?:\s)?(\w+)?$
or: ^cc\s?(\w+)?$
Script:
if matches[2] == "" then
    send( "claw " .. target)
    send( "claw " .. target)
else
    send( "claw " .. matches[2])
    send( "claw " .. matches[2])
end

Post Reply