The can't use shouts or yells doesn't need to be set that way. Otherwise newbies won't be able to use it either. The cooldown, yes that will work, but so would a rate limiter (>90wpm) The shouts/yells ability needs to be triggered by something with more substance, a level cap is meaningless to a bot who will just grind past it anyway and it does nothing for hacked accounts.
The developers need to throw a language-strip regex into the input buffers. If the game client is in english, and set to english, strip all non-english characters except for the emoji used by Japanese users. Half the stuff I report either has greek or other accented characters that aren't used in French or German, and mostly consist of fullwidth (japanese) roman characters interspersed with halfwidth/normal sized ones. But this is just a monkey wrench where we need a bulldozer. Throw error 90000 at game clients that are exceeding 90wpm, and be done with it. Also use a buffer dupe check by checking for the string to be at least 60% different from the last 5 things said. This would be far more efficient (throttle+duplicate word test) than simply trying to block 90000 variations of O's
As for killing their business. Just prevent one-sided/uneven trades and limit Gil transfers to 10000gil/day per level acquired. It's not that hard to 95% percentile check the current market to see if someone is making uneven trades.