mastodon-admintools/t2.php

66 lines
2.9 KiB
PHP

<?php
require_once("bootstrap.php");
// $db is a PDO object connected to the Postgresql DB
// exclude those accounts that I know are NOT spammeurs but fit the other criteria:
// search for potential spammy accounts:
// AND username=display_name
$stmt=$db->prepare("select id,username,domain,display_name,avatar_file_name from accounts where username ~ '^[0-9a-z]{10}$' and created_at > '2024-02-15 00:00:00' and suspended_at IS NULL AND avatar_file_name IS NULL AND id NOT IN (".implode(",",$conf["exclude"]).");");
$stmt->execute();
$first=true;
$badsizes=["1009x200"];
$badblur=['UkKBv%k8Oas:t1f9V[ae|;afoJofs;bYovjZ', 'UkKBv%k8Oas:t1f9V[ae|;agoJoft7bYovjZ','UkKBv%k8Oas:t1f9V[ae|;afoKofs;bYovjs'];
$badtext=["画像が貼れなか","ったのでメンションだけ","荒らし.com","ctkpaarr.org"];
while ($c=$stmt->fetch(PDO::FETCH_ASSOC)) {
if ($first) {
$api=get_api_client();
$first=false;
}
// print_r($c);
// get the statuses of one account
$statuses = $api->get("/accounts/".$c["id"]."/statuses");
// print_r($statuses);
// search for statuses having :
// a picture of 1009x200 AND at least one mention
// or a blurhash of UTQcbkVY%gIU8w8_%Mxu%2Rjayt7.8?bMxRj ? (maybe not good)
$isbad=false;
foreach($statuses as $s) {
foreach($badtext as $text) {
if (strpos($s["content"],$text)!==false) {
$reason="bad text $text";
$isbad=true; break 2;
}
}
if (is_array($s["media_attachments"])) {
foreach($s["media_attachments"] as $i) {
if ($i["type"]=="image") {
if (in_array($i["blurhash"],$badblur)) {
// echo "Bad BlurHash (".$i["blurhash"].")\n";
$reason="bad BlurHash (".$i["blurhash"].")";
$isbad=true; break 2;
}
if (in_array($i["meta"]["original"]["width"]."x".$i["meta"]["original"]["height"],$badsizes)) {
// echo "Bad Size (".$i["meta"]["original"]["width"]."x".$i["meta"]["original"]["height"].")\n";
$reason="bad size (".$i["meta"]["original"]["width"]."x".$i["meta"]["original"]["height"].")";
$isbad=true; break 2;
}
echo "Unknwon Image (not bad?): ".$i["meta"]["original"]["width"]."x".$i["meta"]["original"]["height"]." blur ".$i["blurhash"]." at:\n ".$i["url"]." for ".$c["id"]."\n";
}
}
}
if ($isbad) break;
}
if ($isbad) {
echo "Will block ".$c["username"]."@".$c["domain"]." reason $reason\n";
$result = $api->post("/admin/accounts/".$c["id"]."/action",["type" => "suspend", "text" => "Automatic suspend: $reason"] );
print_r($result);
} else {
echo "skip ".$c["id"]." ".$c["username"]." good user\n";
}
sleep(1);
} // for each bad user (potentially)