Way to bulk process/delete flagged registrations?

Hi everyone - for the past few days, our forums have been getting a lot of spam registrations that are properly being flagged for us to review. The problem is the large quantity of them every few hours:

Is there a way to quickly review and do a bulk edit so that we don’t have to click on each entry and click again to select the delete + ban option? That gets pretty tedious after some time.

2 Me gusta

As an alternative, can we just auto-delete users who fall into this category:

1 me gusta

You are catching up on a backlog of old spam profiles. Once you fully catch up you should be ok.

Hola Jeff, equipo: la cantidad de spam que recibimos es bastante alta y tenemos entre 30 y 40 publicaciones marcadas para revisión diariamente. Es mucho trabajo repetitivo de hacer clic. ¿Se han introducido nuevas técnicas para hacer esto menos tedioso?

Hola @kirupa

Me encontré con un problema similar.

Revisamos miles de publicaciones/usuarios marcados automáticamente (sistema y Akismet) en mi foro.
La precisión de ambos, el sistema y Akismet, estuvo muy cerca del 100% (1 falso positivo que yo sepa de 2500 marcas). No es el caso de todos los foros, así que debes estar seguro de lo que haces si quieres automatizar la prohibición de usuarios marcados automáticamente.

Al final, creé un script PHP utilizando datos de un webhook de Discourse:

Primero creé el webhook:

Luego usé Use Discourse webhooks with PHP para recibir la solicitud y analizar los datos.

Agregué código personalizado para activar la prohibición automática enviando una solicitud API a Discourse, basándome en criterios arbitrarios:

Aquí está el código final:

<?php

// Verifica inmediatamente la autenticidad de la solicitud.
if (array_key_exists('HTTP_X_DISCOURSE_EVENT_SIGNATURE', $_SERVER)) {
    $discourse_payload_raw = file_get_contents('php://input');
    $discourse_payload_sha256 = substr($_SERVER['HTTP_X_DISCOURSE_EVENT_SIGNATURE'], 7);
    
    // Por seguridad, configura el webhook con un secreto en Discourse y establécelo a continuación.
    $discourse_payload_secret = 'xxxxxxxxxxxxxxxxxxxxx';
    
    // Verifica que la solicitud fue enviada desde un webhook autorizado.
    if (hash_hmac('sha256', $discourse_payload_raw, $discourse_payload_secret) == $discourse_payload_sha256) {
        echo 'recibido';
    }
    else {
        die('autenticación fallida');
    }
}
else {
    die('acceso denegado');
}

// Prepara el payload para su uso en el script PHP.
$discourse_json = json_decode($discourse_payload_raw);

$reviewable = $discourse_json->reviewable;

// Configura la URL de la API
$api_url = "https://unicyclist.com/review/$reviewable->id/perform/delete_user?version=0";

// Verifica que las propiedades "type" y "score" sean válidas
if (($reviewable->type == "ReviewableUser" || $reviewable->type == "ReviewableAkismetUser" || $reviewable->type == "ReviewableQueuedPost") && $reviewable->score > 0) {
  // Configura las opciones de curl
    $options = array(
        CURLOPT_URL => $api_url,
        CURLOPT_RETURNTRANSFER => true,
        CURLOPT_CUSTOMREQUEST => "PUT", // Establece el método de solicitud a PUT
        CURLOPT_HTTPHEADER => array(
            "Api-Key: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
            "Api-Username: system"
        )
    );
    // Inicializa la sesión de curl
    $curl = curl_init();
    curl_setopt_array($curl, $options);
    // Realiza la llamada a la API
    $response = curl_exec($curl);
    curl_close($curl);
    // Decodifica la respuesta
    $response_data = json_decode($response);
    print_r($response_data);
}   else {
    exit;
}

?>

Funciona perfectamente hasta ahora.

:warning: Ten en cuenta que mi código puede ser muy peligroso de usar en otro contexto y el contenido debe ser pensado cuidadosamente.

Por ejemplo, una marca “ReviewableUser” puede ser establecida en usuarios en foros que necesitan validar usuarios manualmente (no sé si es el caso, es solo un ejemplo). Otros foros podrían haber cambiado los umbrales de detección de spam en su configuración, o la detección automática podría ser simplemente menos precisa en su foro.

3 Me gusta

Gracias por compartir. ¡Quizás tenga que usar algo como esto! Desearía que Discourse soportara este flujo de trabajo automáticamente :slight_smile:

He estado usando la solución de @Canapin en mi Discourse personal, pero también tengo una instancia separada configurada para otra empresa. Preferiría no usar este script en su solución.

¿Hay alguna actualización del equipo de Discourse sobre enfoques alternativos? Esto se aplica tanto a los registros marcados como a las publicaciones marcadas como spam:

Hasta ahora, no tenemos nada planeado para agregar acciones masivas a la Cola de Revisión, pero si pudieras crear una solicitud de #funcionalidad para ello, podríamos medir más fácilmente la popularidad de la sugerencia, lo que podría darle más atención.