The predictable pause between each action the bot does makes it very easy to spot. If the action has no random outcome or triggered effects, like attacking face when no secrets are in play, don't do the action, add it to an action queue and calculate the next action, run the action queue only when there are no more actions to take or the latest calculated action will result in some kind of random effect. Basically the logic is like this:
- Loop Start
- Calculate next action and add it to action queue
- If last action in queue will result in any random effects OR if last action in queue is end turn run action queue
- If last action performed was end turn end the loop
- Return to Loop Start
- Wait for next turn
This will result in smoother gameplay and the bot will be less obvious since it will more resemble the actions of a real person.