¿Borrar automáticamente a los usuarios marcados por el sistema?

Hola

Cada día, tengo una docena de cuentas de spam marcadas como “Este nuevo usuario ingresó información de perfil sin leer ningún tema o publicación”.

En dos años, tuvimos 0 falsos positivos.

Por lo tanto, estoy pensando que podríamos eliminar automáticamente estas cuentas si se marcan por esta razón específica.

Opcionalmente, se podría enviar un correo electrónico automático al destinatario antes de la eliminación, mencionando que la cuenta fue eliminada automáticamente, pero que el administrador puede ser contactado por correo electrónico a través del foro.

Eché un vistazo a Discourse Automation pero no lo permite de inmediato.

¿Sería posible codificar un plugin utilizando los métodos de automatización de Discourse, o debería codificarse desde cero?

¿O hay una forma más fácil de evitar que este spam interminable llegue a nuestra lista de revisión?

4 Me gusta

Así que, estoy probando esto, usaré los webhooks que nunca antes había usado.
He empezado a usar Use Discourse webhooks with PHP como plantilla y devuelve datos a Discourse correctamente.

Pero necesito crear elementos de spam revisables manualmente (como “el usuario escribió demasiado rápido” o “completó su perfil sin leer ninguna publicación”). ¿Alguna idea de cómo hacerlo?

Lo he conseguido.\n\nCreando un usuario con Insomnia, rellenando su perfil con un disparador de Akismet, que activa una Revisión.\nSe realizan algunas comprobaciones y el usuario se elimina automáticamente.\n\n

\n\nLas propiedades de Revisión para que el script active la eliminación de un usuario son:\n* Tipo: ReviewableAkismetUser, ReviewableUser o ReviewableQueuedPost\n* Puntuación > 0\n\nNo quiero eliminar automáticamente a los usuarios marcados por otros que no sean @system.\n\nAquí está el script PHP que utilizo:\n\nphp\n<?php\n\n// Verifica inmediatamente la autenticidad de la solicitud.\nif (array_key_exists('HTTP_X_DISCOURSE_EVENT_SIGNATURE', $_SERVER)) {\n $discourse_payload_raw = file_get_contents('php://input');\n $discourse_payload_sha256 = substr($_SERVER['HTTP_X_DISCOURSE_EVENT_SIGNATURE'], 7);\n \n // Por seguridad, configura el webhook con un secreto en Discourse y establécelo a continuación.\n $discourse_payload_secret = '2J3tM5X4WYGkGp0tTkmu';\n \n // Verifica que la solicitud fue enviada desde un webhook autorizado.\n if (hash_hmac('sha256', $discourse_payload_raw, $discourse_payload_secret) == $discourse_payload_sha256) {\n echo 'recibido';\n }\n else {\n die('autenticación fallida');\n }\n}\nelse {\n die('acceso denegado');\n}\n\n// Prepara el payload para su uso en el script PHP.\n$discourse_json = json_decode($discourse_payload_raw);\n\n$reviewable = $discourse_json->reviewable;\n\n// Configura la URL de la API\n$api_url = \"https://discourse.canapin.com/review/$reviewable->id/perform/delete_user?version=0\";\n//$api_url = \"https://discourse.canapin.com/review/$reviewable->id/perform/delete_user?version=$reviewable->version\";\n\n\n// Verifica que las propiedades \"tipo\" y \"puntuación\" sean válidas\nif (($reviewable->type == \"ReviewableUser\" || $reviewable->type == \"ReviewableAkismetUser\" || $reviewable->type == \"ReviewableQueuedPost\") && $reviewable->score > 0) {\n // Configura las opciones de curl\n $options = array(\n CURLOPT_URL => $api_url,\n CURLOPT_RETURNTRANSFER => true,\n CURLOPT_CUSTOMREQUEST => \"PUT\", // Establece el método de solicitud a PUT\n CURLOPT_HTTPHEADER => array(\n \"Api-Key: 6666666666666666666666666666666666666666666\",\n \"Api-Username: system\"\n )\n );\n // Inicializa la sesión de curl\n $curl = curl_init();\n curl_setopt_array($curl, $options);\n // Realiza la llamada a la API\n $response = curl_exec($curl);\n curl_close($curl);\n // Decodifica la respuesta\n $response_data = json_decode($response);\n print_r($response_data);\n} else {\n exit;\n}\n\n?>\n\nEn una escala de 0 a 10… ¿Qué tan feo confiable es, considerando el contexto en el que funcionará (0 falsos positivos en 2 años para las detecciones de Discourse y akismet)?\n\n—\n\nTengo algunas preguntas sobre el payload de la solicitud de revisión iniciada por Discourse cuando un usuario es detectado como una cuenta de spam potencial.\n1. ¿Por qué hay 2 solicitudes para 1 ReviewableUser con diferencias mínimas entre sus respectivos payloads (la primera solicitud está a la izquierda)?\n\n \n\n2. ¿Qué significa link_admin?\n3. Cuando elimino manualmente un usuario (detectado por Akismet) desde el panel de revisión, se activa el webhook de revisión con un nuevo payload que contiene, entre otras cosas: \"user_deleted\": false. ¿No debería ser true? :thinking:\n4. En la URL https://discourse.canapin.com/review/355/perform/delete_user?version=0\", ¿la "version" aquí se refiere a la "version" encontrada en el payload? ¿Debo preocuparme por este parámetro? ¿Debería ser igual al parámetro version del payload?

En el estado actual, confío bastante en que funcionará (bueno, ¡más o menos por intuición!) y podemos rastrear posibles problemas mirando los resultados de los webhooks…
O listar los elementos revisados.

Pero hay un problema aquí que no puedo resolver.

A veces, la lista de elementos revisados se ve así, sin ninguna información:

Y a veces se ve así:

Me gustaría conservar toda la información para poder rastrear más fácilmente si hubo un falso positivo eliminado.

¿Alguna idea de dónde proviene este comportamiento?

Parece ocurrir después de una eliminación automática en algún momento, pero no sé cómo ni por qué.

Añado que la versión JSON de la página de elementos revisados contiene toda la información que falta de la interfaz de Discourse.


Editar: Lo descubrí. Esto es lo que sucede cuando deshabilitas el plugin Akismet.

Solo para que conste, he visto que esto aparece un puñado de veces, y una vez fue un falso positivo: un nuevo miembro sensato y atento que primero completó su perfil. Por lo tanto, puede suceder.

1 me gusta

Sí. Para ser sincero, tuve 1 falso positivo (que yo sepa) en este lapso de más de dos años.
El usuario luego se contactó conmigo por correo electrónico, que se puede encontrar fácilmente en el sitio web si los usuarios encuentran un problema.

En mi caso, y después de revisar manualmente miles de usuarios, el beneficio de esta autodestrucción sería, en mi opinión, bastante obvio, especialmente dado que es un foro de nicho: los usuarios que realmente están interesados en el tema se pondrán en contacto con nosotros si enfrentan algún inconveniente. :slight_smile:

2 Me gusta

Este tema se cerró automáticamente 30 días después de la última respuesta. Ya no se permiten nuevas respuestas.