In the previous exercise, we learned how to access command arguments. We saw, though, that cmd.args
was a string. We can’t do numeric operations on string. What if we wanted to count our little piggies?
Ares provides a variety of argument parsing utilities to handle args that are numbers, lists, or even complex sequences like “name=subject/message”. We’re just going to go over a couple here, but the rest are documented in Arg Parsers. You can check that out later.
We’ll start with the integer_arg
helper, which will help us turn our number of piggies from a string to a number that we can do something with.
def handle
piggies = integer_arg(cmd.args)
if (piggies < 5)
client.emit_ooc "#{piggies} is a small number of piggies."
else
client.emit_ooc "#{piggies} is a lot of piggies!"
end
end
Try tinkering with different numbers of piggies and see how the message changes when you have a small or large number.
tinker
by itself, you’ll get an error. We’ll talk about why this is and how to fix it in the next exercise.
What if we have multiple parts to our arguments, like tinker <number of piggies>=<names of piggies>
?
Here we can leverage the ArgParser
helper class. args = cmd.parse_args(parser)
will crack apart the command arguments according to the parser you supply, and store the value in args
. You can then do things like args.arg1
and args.arg2
to access the different pieces.
ArgParser provides pre-set parsers for a variety of common MUSH command formats, including arg1_equals_arg2
or arg1_equals_arg2_slash_arg3
. For a complete list, you can check out Arg Parsers after you’ve finished the quickstart.
Let’s try it.
def handle
args = cmd.parse_args(ArgParser.arg1_equals_arg2)
num_piggies = integer_arg(args.arg1)
names = list_arg(args.arg2)
client.emit "You have #{num_piggies} and their names are #{names.join(', ')}"
if (num_piggies > names.count)
client.emit_failure "You didn't name all your piggies!"
end
end
Calling parse_args
will split our argument string into the “3” (arg1) and the “A B C” (arg2). Then we use the other two arg helpers to interpret the 3 as a number and the names as a list.
Now that we’ve converted our number of piggies to an actual number, we can use it in a numeric comparison to make sure we named all our piggies.
Join is a commonly-used method that takes a list and displays it as a string separated by the specified characters (in this case by commas).
Try using the command with a number of piggies and their names, like tinker 3=Larry Moe Curly
.