From 0362ba7e32227164a3a9f90ef94c6a6d94403563 Mon Sep 17 00:00:00 2001 From: Evan Prodromou Date: Wed, 13 Feb 2013 09:50:28 -0500 Subject: [PATCH] Script to silence spammers --- .../ActivitySpam/scripts/silencespammer.php | 114 ++++++++++++++++++ 1 file changed, 114 insertions(+) create mode 100644 plugins/ActivitySpam/scripts/silencespammer.php diff --git a/plugins/ActivitySpam/scripts/silencespammer.php b/plugins/ActivitySpam/scripts/silencespammer.php new file mode 100644 index 0000000000..2eb9461e45 --- /dev/null +++ b/plugins/ActivitySpam/scripts/silencespammer.php @@ -0,0 +1,114 @@ +. + */ + +define('INSTALLDIR', realpath(dirname(__FILE__) . '/../../..')); + +$shortoptions = 'i:n:a'; +$longoptions = array('id=', 'nickname=', 'all'); + +$helptext = <<orderBy('created'); + $user->limit($offset, $limit); + + $found = $user->find(); + + if ($found) { + while ($user->fetch()) { + try { + silencespammer($filter, $user, $minimum, $percent); + } catch (Exception $e) { + printfnq("ERROR testing user %s\n: %s", $user->nickname, $e->getMessage()); + } + } + $offset += $found; + } + + } while ($found > 0); +} + +function silencespammer($filter, $user, $minimum, $percent) { + + printfnq("Testing user %s\n", $user->nickname); + + $profile = Profile::staticGet('id', $user->id); + + $cnt = $profile->noticeCount(); + + if ($cnt < $minimum) { + printfnq("Only %d notices posted (minimum %d); skipping\n", $cnt, $minimum); + } + + $ss = new Spam_score(); + + $ss->query(sprintf("SELECT count(*) as spam_count ". + "FROM notice join spam_score on notice.id = spam_score.notice_id ". + "WHERE notice.profile_id = %d", $profile->id)); + + while ($ss->fetch()) { + $spam_count = $ss->spam_count; + } + + $spam_percent = ($spam_count * 100 / $cnt); + + if ($spam_percent > $percent) { + printfnq("Silencing user %d (%0.2f%% spam)\n", $user->nickname, $spam_percent); + try { + $profile->silence(); + } catch(Exception $e) { + printfnq("Error: %s", $e->getMessage()); + } + } +} + +try { + $filter = null; + $minimum = 5; + $percent = 80; + Event::handle('GetSpamFilter', array(&$filter)); + if (empty($filter)) { + throw new Exception(_("No spam filter.")); + } + if (have_option('a', 'all')) { + testAllUsers($filter, $minimum, $percent); + } else { + $user = getUser(); + silencespammer($filter, $user, $minimum, $percent); + } +} catch (Exception $e) { + print $e->getMessage()."\n"; + exit(1); +}