I started to make a new post on the following information but this one isn't that old and is related to spam so i'll just put it here.
Here are the steps I have taken to deal with spam. this has been very effective so far as I'm getting 20-30 a day trying to get through but rarely ( maybe once a week) get actual spam posts on the board.
First off and I think this is the most effective step I modified the welcome message so that the spammers software can't find the login and password. this keeps them from automatically activating the account. Just change the formating up and maybe the wording.
Secondly I created a shell script which I run from cron that does a delete on any account older than 24 hours with 0 posts and a group_id of 32000 I also note in the welcome email that the user has until midnight to finish the activation process.
Next I modified the code in <forum_root>/index.php which read:
$result = $db->query('SELECT id, username FROM '.$db->prefix.'users ORDER BY registered DESC LIMIT 1') or error('Unable to fetch newest registered user', __FILE__, __LINE__, $db->error());
$stats['last_user'] = $db->fetch_assoc($result);
to read:
$result = $db->query('SELECT id, username FROM '.$db->prefix.'users WHERE group_id != 32000 ORDER BY registered DESC LIMIT 1') or error('Unable to fetch newest registered user', __FILE__, __LINE__, $db->error());
$stats['last_user'] = $db->fetch_assoc($result);
This ensures only validated user names are displayed keeping offensive words off the page. I honestly think this is the way it should be since a user that hasn't completed the activation process isn't actually registered yet.
I also made a similar change to the query that brings up the total number of registered users and added a new query that displays the total number of unactivated accounts. the last change also requred em to add a line to the language file.
These changes have worked well for me so I wanted to share.
So to review here is the entire section of code:
// Collect some statistics from the database
$result = $db->query('SELECT COUNT(id)-1 FROM '.$db->prefix.'users WHERE group_id != 32000') or error('Unable to fetch total user count', __FILE__, __LINE__, $db->error());
$stats['total_users'] = $db->result($result);
$result = $db->query('SELECT id, username FROM '.$db->prefix.'users WHERE group_id != 32000 ORDER BY registered DESC LIMIT 1') or error('Unable to fetch newest registered user', __FILE__, __LINE__, $db->error());
$stats['last_user'] = $db->fetch_assoc($result);
$result = $db->query('SELECT SUM(num_topics), SUM(num_posts) FROM '.$db->prefix.'forums') or error('Unable to fetch topic/post count', __FILE__, __LINE__, $db->error());
list($stats['total_topics'], $stats['total_posts']) = $db->fetch_row($result);
// Added by bbray
$result = $db->query('SELECT COUNT(id)-1 FROM '.$db->prefix.'users WHERE group_id = 32000') or error('Unable to fetch total user count', __FILE__, __LINE__, $db->error());
$stats['total_users_noactivation'] = $db->result($result);
?>
<div id="brdstats" class="block">
<h2><span><?php echo $lang_index['Board info'] ?></span></h2>
<div class="box">
<div class="inbox">
<dl class="conr">
<dt><strong><?php echo $lang_index['Board stats'] ?></strong></dt>
<dd><?php echo $lang_index['No of users'].': <strong>'. $stats['total_users'] ?></strong></dd>
<dd><?php echo $lang_index['No of non activated users'].': <strong>'. $stats['total_users_noactivation'] ?></strong></dd>
<dd><?php echo $lang_index['No of topics'].': <strong>'.$stats['total_topics'] ?></strong></dd>
<dd><?php echo $lang_index['No of posts'].': <strong>'.$stats['total_posts'] ?></strong></dd>
</dl>