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 curtidas

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

1 curtida

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

Olá Jeff, equipe - a quantidade de spam que recebemos é bastante alta, e temos cerca de 30-40 posts sinalizados para revisão diariamente. É muito clique repetitivo. Alguma nova técnica foi introduzida para tornar isso menos tedioso?

Olá @kirupa

Aconteceu de eu ter, de alguma forma, o mesmo problema.

Revisamos milhares de posts/usuários sinalizados automaticamente (sistema e Akismet) em meu fórum.
A precisão de ambos, sistema e Akismet, foi muito próxima de 100% (1 falso positivo, que eu saiba, para 2500 sinalizações). Não é o caso para todos os fóruns, então você tem que ter certeza do que está fazendo se quiser automatizar o banimento de usuários sinalizados automaticamente.

No final, fiz um script PHP usando dados de webhook do Discourse:

Primeiro criei o webhook:

Então usei Use Discourse webhooks with PHP para receber a solicitação e analisar os dados.

Adicionei código personalizado para acionar o banimento automático enviando uma solicitação de API para o Discourse, com base em critérios arbitrários:

Aqui está o código final:

<?php

// Verifica imediatamente a autenticidade da solicitação.
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);
    
    // Para segurança, configure o webhook com um segredo no Discourse e defina-o abaixo.
    $discourse_payload_secret = 'xxxxxxxxxxxxxxxxxxxxx';
    
    // Verifica se a solicitação foi enviada por um webhook autorizado.
    if (hash_hmac('sha256', $discourse_payload_raw, $discourse_payload_secret) == $discourse_payload_sha256) {
        echo 'recebido';
    }
    else {
        die('autenticação falhou');
    }
}
else {
    die('acesso negado');
}

// Prepara o payload para uso no script PHP.
$discourse_json = json_decode($discourse_payload_raw);

$reviewable = $discourse_json->reviewable;

// Define a URL da API
$api_url = "https://unicyclist.com/review/$reviewable->id/perform/delete_user?version=0";

// Verifica se as propriedades "type" e "score" são válidas
if (($reviewable->type == "ReviewableUser" || $reviewable->type == "ReviewableAkismetUser" || $reviewable->type == "ReviewableQueuedPost") && $reviewable->score > 0) {
  // Configura as opções do curl
    $options = array(
        CURLOPT_URL => $api_url,
        CURLOPT_RETURNTRANSFER => true,
        CURLOPT_CUSTOMREQUEST => "PUT", // Define o método da solicitação como PUT
        CURLOPT_HTTPHEADER => array(
            "Api-Key: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
            "Api-Username: system"
        )
    );
    // Inicializa a sessão curl
    $curl = curl_init();
    curl_setopt_array($curl, $options);
    // Faz a chamada da API
    $response = curl_exec($curl);
    curl_close($curl);
    // Decodifica a resposta
    $response_data = json_decode($response);
    print_r($response_data);
}   else {
    exit;
}

?>

Funciona perfeitamente até agora.

:warning: Note que meu código pode ser muito perigoso de usar em outro contexto e o conteúdo deve ser pensado cuidadosamente.

Por exemplo, uma sinalização “ReviewableUser” pode ser definida em usuários em fóruns que precisam validar usuários manualmente (não sei se é o caso, é apenas um exemplo). Outros fóruns podem ter alterado os limites de detecção de spam em suas configurações, ou a detecção automática pode simplesmente ser menos precisa em seu fórum.

3 curtidas

Obrigado por compartilhar - talvez eu tenha que usar algo assim! Eu gostaria que o Discourse suportasse este fluxo de trabalho automaticamente :slight_smile:

Tenho usado a solução do @Canapin em meu Discourse pessoal, mas também tenho uma configuração de instância separada para outra empresa. Eu preferiria não usar este script na solução deles.

Existe alguma atualização da equipe do Discourse sobre abordagens alternativas? Isso se aplica tanto a registros sinalizados quanto a postagens sinalizadas como spam:

Até o momento, não planejamos adicionar ações em massa à Fila de Revisão, mas se você puder criar uma solicitação de Feature para isso, poderíamos avaliar mais facilmente a popularidade da sugestão, o que pode lhe render mais atenção.