Ayudé a un sitio que recibió alrededor de 30 publicaciones de spam por hora. Activamos AI Spam, pero eso no resolvió el problema de las publicaciones existentes. Esto es lo que hice. Esto podría funcionar para ti. No está probado en tu sitio, así que si haces alguna de estas cosas, deberías hacer una copia de seguridad y también asegurarte de que no parezca que esto fue escrito por una IA que intenta derribar tu sitio.
Esto asume que sabes qué es rails y cómo ejecutarlo. Si no es así, probablemente no deberías estar haciendo esto.
Primero, deberías poner tu sitio en Modo de Solo Lectura en Discourse para que la gente no cree cosas mientras cometes algún error terrible. Luego haz una copia de seguridad. Eso significará que hasta que desactives el modo de solo lectura, puedes volver de forma segura a tu copia de seguridad.
Obtener publicaciones recientes
El ataque comenzó hace poco más de un día, así que retrocedí dos días. También podrías hacer cosas como 36.hours.ago si quieres ser más explícito. Si fuera más inteligente, habría hecho algo para omitir las publicaciones en mensajes privados, pero decidí no preocuparme por eso.
posts = Post.where("created_at >= ?", 2.days.ago)
.where(deleted_at: nil)
.where("user_id > ?", 1)
Llamar a SpamScanner en esas publicaciones
No estoy muy seguro de qué sucedió para que algunas de ellas fallaran, pero si obtienes algunos “ups”, probablemente no sea motivo de preocupación.
posts.each do |post|
begin
puts "https://talk.commonmark.org/p/#{post.id}"
DiscourseAi::AiModeration::SpamScanner.perform_scan(post)
rescue
puts "ups";
end;
sleep 0.2;
end
Obtener las publicaciones que ahora necesitan ser revisadas
Esto obtiene las publicaciones revisables que acaban de ser marcadas como revisables (presumiblemente por las acciones anteriores). No queremos aplicar esto ciegamente a cosas que no son parte de esta peligrosa aventura.
reviewables = Reviewable.where(status: "pending")
.where(potential_spam: true)
.where("created_at >= ?", 1.hour.ago)
.where("updated_at >= ?", 1.hour.ago)
Confiar ciegamente en la IA
Por supuesto, revisaste cuidadosamente los temas que se ocultaron y todos parecen ser realmente spam, así que vas a seguir adelante. El encabezado es una broma. ¡No confías ciegamente en la IA, ¿verdad?!?!?
Esto eliminará las publicaciones y eliminará y bloqueará a los usuarios. Es realmente, realmente peligroso.
reviewables.each do |reviewable|
begin
puts "eliminando https://talk.commonmark.org/t/#{reviewable.topic_id}"
if reviewable.topic.nil?
puts "ya eliminado"
next
end
reviewable.perform(user, :delete_user_block)
rescue
puts "ups"
end
end