Files
danbooru/script/fixes/049_spam_1.rb
2019-12-22 21:23:37 -06:00

42 lines
1.6 KiB
Ruby
Executable File

#!/usr/bin/env ruby
require File.expand_path(File.join(File.dirname(__FILE__), '..', '..', 'config', 'environment'))
CurrentUser.user = User.system
CurrentUser.ip_addr = "127.0.0.1"
MIN_USER_ID = 528958
MIN_DATE = "2017-09-01"
NAME_REGEXP = /^[a-z0-9]+\d{3,}$/
BAD_TITLES = ["My collection", "hi", "My private videos", "My video", "hey", "My webcam", "My dirty fantasies", "My new video", "My hot photos", "My hot webcam", "All your desires", "My hot videos", "my profile", "record from my webcam", "my hot webcam"]
spammers = Set.new(Dmail.where("dmails.from_id >= ? and dmails.created_at >= ? and is_spam = ?", MIN_USER_ID, MIN_DATE, true).joins("join users on users.id = dmails.from_id").where("users.name ~ '^[a-z0-9]+[0-9]{3,}$'").pluck("users.id").map(&:to_i).uniq)
new_spammers = Set.new
User.without_timeout do
Dmail.where("created_at >= ? and is_spam = ?", MIN_DATE, false).find_each do |dmail|
from_name = dmail.from_name
if dmail.from_id >= MIN_USER_ID && from_name =~ NAME_REGEXP
dmail.update_column(:is_spam, true)
dmail.spam!
puts "marked #{dmail.id}"
if !spammers.include?(dmail.from_id)
new_spammers.add(dmail.from_id)
end
end
end
end
new_new_spammers = Set.new(Dmail.where("from_id >= ? and title in (?) and from_id not in (?)", MIN_USER_ID, BAD_TITLES, (spammers + new_spammers).to_a).pluck(:from_id))
combined_spammers = spammers + new_spammers + new_new_spammers
combined_spammers.each do |uid|
unless Ban.where(user_id: uid).exists?
Ban.create!(duration: 10000, reason: "Spam (automated ref f6147ace)", user_id: uid)
puts "banned #{uid}"
sleep 1
end
end