Go Back   vb.org Archive > vBulletin Modifications > Archive > vB.org Archives > vBulletin 3.7 > vBulletin 3.7 Add-ons
FAQ Community Calendar Today's Posts Search

Reply
 
Thread Tools
Keyword weight based spam detector Details »»
Keyword weight based spam detector
Version: 0.1.0, by HuangA HuangA is offline
Developer Last Online: Jun 2013 Show Printable Version Email this Page

Category: Mini Mods - Version: 3.7.0 Beta 5 Rating:
Released: 07-07-2008 Last Update: 07-08-2008 Installs: 40
Uses Plugins
Translations Is in Beta Stage  
No support by the author.

I coded this one because I constantly had to moderate and / delete them lengthy lame cell phone ads on vBulletin.com's forums and my own forums. You know, buy iphone, ipod touch, noika blah blah blah sony ericsson blah blah blah etc. etc. etc. email us, we're legitimate business in a country you've never heard of, blah blah blah spam.

While Akismet does work on filtering them out, some times they still leak through.

I know there's two other keyword based tools that automatically adds things to moderation queue (One from SirAdrian and one from tweakmonkey), but it doesn't work too well for me, because I run an iPhone / iPod Touch site and I can't have those keywords on auto spam for simply appearing. So, here's what I did for mine...

What does this product do?
  • Adds 1 vBulletin Options setting group, with 4 settings
  • Allows you to define a list of keywords with associated score
  • Allows you to set a threshold for automatic moderation
  • Allows you to set a threshold for automatic rejection
  • Allows you to set a post count limit for posts to be scanned
  • Adds 1 plugin which gets ran at newpost_process
  • Adds 1 plugin which gets ran at editpost_update_process

How does it work?
1) You configure your keyword list, and score weight. For example, I use this list:
Code:
Nokia|0.5
iPhone|0.5
iPod Touch|0.5
Order|0.5
HTC|0.5
Samsung|0.5
Sony Ericsson|0.5
hotmail|0.5
$|0.5
usd|0.5
url|0.3
email|0.5
The list basically means each time the plugin sees "Noika", it will get a score of 0.5, $, 0.5, etc. etc. A tally of all the score is totaled, and
2) You configure your moderation score, for example, I use 50.
3) You configure your rejection score, for example, I use 100.
4) You configure your exemption post count, for example, I use 5.

When a new post is being created (this could be a thread, or a reply, doesn't matter, they both trigger newpost_process hook), the plugin will count how many times each keyword appears, and total the score. If it is higher than or equal to the moderation score, it will tuck the post into moderation queue. If it is higher than or equal to the rejection score, a standard vBulletin error message is shown to the user.

How much overhead does this add? Realistically, not much... depending on amount of keywords used, I'd say most likely under 0.05 seconds of your CPU time for each post. If you are really that worried, you can set your exemption post count to something lower, and so lesser posts are scanned. Default is 5 right now.

This have been tested on 3.7.0 Beta 5, and 3.7.2. I see no reason why it would not work on 3.6.x series, too.

Change log
0.0.0 => 0.1.0
  • Changed error message to use vBulletin error message screen instead of die()
  • Added option for omitting after certain post count (default 5)
  • Added default values to options
  • Fixed options not appearing after product import (I forgot to export them for 0.0.0)
  • Added scanning for editing post (AJAX doesn't seem to give error... I'll work on that for 0.1.1 later)

Show Your Support

  • This modification may not be copied, reproduced or published elsewhere without author's permission.

Comments
  #32  
Old 07-08-2010, 08:34 PM
robk6364 robk6364 is offline
 
Join Date: Oct 2005
Posts: 5
Благодарил(а): 0 раз(а)
Поблагодарили: 0 раз(а) в 0 сообщениях
Default

This is excellent, thanks a million times!
Reply With Quote
  #33  
Old 08-16-2010, 07:13 AM
EtaiWix EtaiWix is offline
 
Join Date: Jun 2010
Posts: 23
Благодарил(а): 0 раз(а)
Поблагодарили: 0 раз(а) в 0 сообщениях
Default

Slight problem: I see it's not working for ''partial' words- i.e. if I blocked' nike', and someone spams 'nikefun', then his post goes through...

Can you add that it will block any instance of it even if it's part of another word?
Reply With Quote
  #34  
Old 12-24-2011, 05:22 AM
ArchAngelz ArchAngelz is offline
 
Join Date: May 2010
Posts: 137
Благодарил(а): 0 раз(а)
Поблагодарили: 0 раз(а) в 0 сообщениях
Default

Would something like this work for vb4?
Reply With Quote
  #35  
Old 10-04-2013, 12:56 PM
chrisrouse chrisrouse is offline
 
Join Date: Sep 2013
Location: AccountKiller
Posts: 5
Благодарил(а): 0 раз(а)
Поблагодарили: 0 раз(а) в 0 сообщениях
Default

Does this work with vb4? This would be perfect for the issue we're having with people advertising handbags and Uggs.
Reply With Quote
  #36  
Old 12-15-2015, 10:12 AM
jaslon jaslon is offline
 
Join Date: May 2005
Posts: 6
Благодарил(а): 0 раз(а)
Поблагодарили: 0 раз(а) в 0 сообщениях
Default

I just installed this on vBulletin 3.8.9. It seems to work well. I found one bug though which I think affects all vBulletin versions. If you set the Reject threshold to 0 to disable rejections the moderation will also be disabled, so if you do not want to use reject you should instead set the reject threshold to something very high. I can see in the source code that this is a bug. It wouldn't be very difficult to correct it, but just using a very high reject threshold also works.
Reply With Quote
  #37  
Old 12-21-2015, 02:19 PM
jaslon jaslon is offline
 
Join Date: May 2005
Posts: 6
Благодарил(а): 0 раз(а)
Поблагодарили: 0 раз(а) в 0 сообщениях
Default

I have discovered an annoying bug in the edit part of this script. Here is an example of when the bug occurs:

1. A spammer first posts a message without any spam keywords so that a new thread and a new post is created

2. The spammer then returns and edits his message and adds spam keywords to the post

3. The filter then auto-moderates the post using the following code linked to the "editpost_update_process" hook:
$dataman->set('visible', 0);
$edit['visible'] = 0;

4. If the edit has been done within the time-limit when no "Edited by..." is displayed and the old version of the post is not saved then this will result in a visible thread that contains no posts visible for normal users. There is a post there, but the spam keyword filter has unapproved it so it is not visible for normal users.

I think that I have found a solution to this. I have disabled the "editpost_update_process" hook used in this mod and I have instead written my own routine for the "editpost_update_complete" hook. My code only works with moderation, since I only use moderation and the php code for this new hook looks like this:

Code:
if ($vbulletin->userinfo['posts'] < $vbulletin->options['kwas_antispam_posts']) {
	$scan = strtolower($edit['message']);
	$keywords = explode("\r\n", strtolower($vbulletin->options['kwas_keyword_weights']));
	$total = 0;
	foreach($keywords as $keyword) {
		$keyword = explode("|", $keyword);
		$total += substr_count($scan, $keyword[0]) * $keyword[1];
	}
	if (($total >= $vbulletin->options['kwas_moderate_threshold']) &&($total < $vbulletin->options['kwas_reject_threshold']) && $vbulletin->options['kwas_moderate_threshold']) {
     require_once(DIR.'/includes/functions_databuild.php');
    unapprove_post($postinfo['postid'],($foruminfo['countposts'] AND !$post['skippostcount']), true, $postinfo, $threadinfo, false);
  } 
}
This more "high-level" solution using the buildt-in unapprove routines in vBulletin also unapproves threads, re-calculates post counts etc. so it seems to be a better solution.
Reply With Quote
Reply


Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off

Forum Jump


All times are GMT. The time now is 08:25 AM.


Powered by vBulletin® Version 3.8.12 by vBS
Copyright ©2000 - 2024, vBulletin Solutions Inc.
X vBulletin 3.8.12 by vBS Debug Information
  • Page Generation 0.04404 seconds
  • Memory Usage 2,274KB
  • Queries Executed 23 (?)
More Information
Template Usage:
  • (1)SHOWTHREAD
  • (1)ad_footer_end
  • (1)ad_footer_start
  • (1)ad_header_end
  • (1)ad_header_logo
  • (1)ad_navbar_below
  • (1)ad_showthread_beforeqr
  • (2)bbcode_code
  • (1)footer
  • (1)forumjump
  • (1)forumrules
  • (1)gobutton
  • (1)header
  • (1)headinclude
  • (1)modsystem_post
  • (1)navbar
  • (6)navbar_link
  • (120)option
  • (1)pagenav
  • (1)pagenav_curpage
  • (2)pagenav_pagelink
  • (7)post_thanks_box
  • (7)post_thanks_button
  • (1)post_thanks_javascript
  • (1)post_thanks_navbar_search
  • (7)post_thanks_postbit_info
  • (6)postbit
  • (7)postbit_onlinestatus
  • (7)postbit_wrapper
  • (1)spacer_close
  • (1)spacer_open
  • (1)tagbit_wrapper 

Phrase Groups Available:
  • global
  • inlinemod
  • postbit
  • posting
  • reputationlevel
  • showthread
Included Files:
  • ./showthread.php
  • ./global.php
  • ./includes/init.php
  • ./includes/class_core.php
  • ./includes/config.php
  • ./includes/functions.php
  • ./includes/class_hook.php
  • ./includes/modsystem_functions.php
  • ./includes/functions_bigthree.php
  • ./includes/class_postbit.php
  • ./includes/class_bbcode.php
  • ./includes/functions_reputation.php
  • ./includes/functions_post_thanks.php 

Hooks Called:
  • init_startup
  • init_startup_session_setup_start
  • init_startup_session_setup_complete
  • cache_permissions
  • fetch_postinfo_query
  • fetch_postinfo
  • fetch_threadinfo_query
  • fetch_threadinfo
  • fetch_foruminfo
  • style_fetch
  • cache_templates
  • global_start
  • parse_templates
  • global_setup_complete
  • showthread_start
  • showthread_getinfo
  • forumjump
  • showthread_post_start
  • showthread_query_postids
  • showthread_query
  • bbcode_fetch_tags
  • bbcode_create
  • showthread_postbit_create
  • postbit_factory
  • postbit_display_start
  • post_thanks_function_post_thanks_off_start
  • post_thanks_function_post_thanks_off_end
  • post_thanks_function_fetch_thanks_start
  • post_thanks_function_fetch_thanks_end
  • post_thanks_function_thanked_already_start
  • post_thanks_function_thanked_already_end
  • fetch_musername
  • postbit_imicons
  • bbcode_parse_start
  • bbcode_parse_complete_precache
  • bbcode_parse_complete
  • postbit_display_complete
  • post_thanks_function_can_thank_this_post_start
  • pagenav_page
  • pagenav_complete
  • tag_fetchbit_complete
  • forumrules
  • navbits
  • navbits_complete
  • showthread_complete