Try this:
on *:text:where *:*: {
if ($istok($1-,says,32)) {
set %animal $gettok($1-,$calc($findtok($1-,says,32) - 1),32)
}
}
That will store whatever "word" (anything separated by spaces is a word in this case) is before "says" into %animal. It will set the variable as long as the first word is "where" and if "says" is a word in the sentence.
If you need help doing something with multiple animals, like you showed, after the variable is set, just ask.