Blocking node creation after validation We have a lot of spammers (which are logged in users) creating content on our site. They are creating photo nodes without photos (which I have recently allowed as a way to catch them and ignore them, sort of a honeypot). I have also added the honeypot module but the 10 second delay doesn't seem to be working too well...

Is there a way to catch these nodes that don't have photos and block them from ever actually being created? I was thinking that it could be done in the presave hook, but unsetting the node didn't seem to work.

Edit

I could make the image required, but the bot is filling out all of the required fields so far, and it isn't hard to upload an image using a script.

I have implemented what I put in my answer and it seems to work, and I am giving the spammers 10 tries/day before they get banned. This may or may not be too lenient.

So far I have caught and banned 14 spam accounts (~1 hour of it being live).
Maybe this is the solution... doesn't create the node, sends them to a blank 403 page.

function _utils_photo_nodeapi(&amp;$node, $op, $teaser = NULL, $page = NULL) {
  switch($op){
    case 'presave':
      if(empty($node-&gt;field_image[0]['fid'])){
        _utils_check_spammer($node-&gt;uid);
        //try again?
        die(header('Location: /node/add/photo', TRUE));
      }
      break;
  }
}
//meta code
function _utils_check_spammer($uid){
    if (in_spam_table &amp;&amp; spam_count &gt; spam_limit_for_today)
        //nice knowing you...
        ban_user($uid);
    else
        //you get some more chances
        increment_spam_count($uid)
    endif;
}