Tracking Down Useless Reports on Mastodon

Handling reports is a constant chore on woof.group, and the frustrating part is that most of them aren't actually actionable. They're for posts that are already properly content-warned, or that don't need a warning at all under the server's policy—things like faces, butts, or shirtless photos.

Blocking reports from a domain entirely is tempting, but it risks missing genuinely important ones. Talking to remote admins about tweaking their users' behavior is possible, but it's slow and only worth it for recurring problems.

Getting the Data

To see which remote servers are the biggest source of dead-end reports, Mastodon admins can run this in the rails console:

# Map of domains to [action, no-action] counts
stats = Report.all.reduce({}) do |stats, r|
  domain = r.account.domain
  domain_stats = stats[domain] || [0, 0]
  action = r.history.any? do |a|
    # If you took action, there'd be a Status or Account target_type
    a.target_type != 'Report'
  end
  if action
    domain_stats[0] += 1
  else
    domain_stats[1] += 1
  end
  stats[domain] = domain_stats
  stats
end

# Top 20 domains, sorted by descending no-action count
stats.sort_by do |k, stats|
  stats[1]
end.reverse.take(20)

Here's what the output looks like in practice:

[[nil, [77, 65] ; nil is your local instance
 ["foo.social", [3, 52]],
 ["mastodon.oh.my.gosh", [40, 24]],
 ...