maybe a trie with valid strings as keys...perhaps one trie per room.., and if not matched to room trie then fall back to global trie...
the content at a point in the trie is some kind of action id/class that says what to do... that way you can it multiple times to the trie with slightly different keys (input strings) to cover people spelling things differently or saying something that means the same as what you intended.
I'm using a shell command with options type of deal. Every command with option combination has a help option, so it should be alright for those that have used shells.