There's no such list, but will a little bit of JavaScript it's possible to generate this list yourself. You'll need to visit the Marshal badge page (on the target site), open the browser console and execute the code below. Sometimes, a little patience is required (generating this list with 2910 top flaggers on Stack Overflow took about 15 minutes), but the console will give some indication about the progress and finally spit out some Markdown you can use to update the top list.
// Execute this snippet in the browser console on the Marshal badge page,
// e.g. https://meta.stackexchange.com/help/badges/160/marshal
// It'll probably work on Deputy as well, but then it takes longer...
// { relative URL to profile page -> display name }
var users = {};
// { relative URL to profile page -> flag count }
var flagCounts = {};
// [ relative URL to profile page ]
var urls = [];
// Determine current & last page number
let pager = $(".s-pagination--item.is-selected");
let currentPage = pager.length == 0 ? 1 : parseInt(pager[0].innerText);
var lastPage = 1;
let pageLinks = $("div.pager").find("a");
let baseLink = window.location.href.split('?')[0] + "?page=";
if (pageLinks.length != 0) {
// The last link is 'next', unless we're on the last page itself.
if ("next" == pageLinks[pageLinks.length - 1].getAttribute("rel")) {
// We need the one before to determine the # of pages.
lastPage = parseInt(pageLinks[pageLinks.length - 2].getAttribute("href").split("?page=")[1]);
} else {
lastPage = currentPage;
}
}
// Process a single user
function processUser(index) {
if (index == urls.length) {
// All profiles have been read
// Sort by # of helpful flags
urls.sort(function (a, b) {
return flagCounts[b] - flagCounts[a];
});
// Output to console
var output = "";
for (var rank = 0; rank < urls.length; rank++) {
let topFlagger = urls[rank];
output += (rank + 1) + ". [" + users[topFlagger] + "](" + topFlagger + "), " + flagCounts[topFlagger] + " helpful flags\n";
}
console.log(output);
return;
}
if (index > 0 && index % 10 == 0) {
console.log(index + " top flagger details fetched");
}
// Fetch profile page
let url = urls[index];
$.get(url + "?tab=topactivity", function (data) {
// NOTE: second cell (the last cell is the # of unhelpful flags, if you're a moderator on that site)
for (let header of $(data).find("h1")) {
if (header.innerText == "Impact") {
for (let label of $(header).parent().find("div")) {
if (label.innerText == "helpful flags") {
flagCounts[url] = parseInt($(label).parent().children()[0].innerText.replace(",", ""));
processUser(++index);
break;
}
}
break;
}
}
}).error(function(xhr, status, error) {
console.error(url + ': ' + status + ' - ' + error);
processUser(++index);
});
}
// Process a single page of users with the badge
function processPage(page, lastPage) {
if (page > lastPage) {
// Fetch profile pages
let numberOfUsers = Object.keys(users).length;
if (numberOfUsers == 0)
return;
console.log("Found " + numberOfUsers + " top flaggers");
urls = Object.keys(users);
processUser(0);
return;
}
console.log("Page " + page);
let selector = "div.user-details a";
if (page == currentPage) {
// Process current page
$(selector).each(function() {
users[$(this).attr("href")] = $(this).text();
});
processPage(page + 1, lastPage);
} else {
// Fetch page
$.get(baseLink + page, function (data) {
// Process fetched page
$(data).find(selector).each(function() {
users[$(this).attr("href")] = $(this).text();
});
processPage(page + 1, lastPage);
});
}
}
// Start processing pages
processPage(1, lastPage);
Some notes:
- Profile links are relative, so if you want to update the list above, you'll need to find
/users/
and replace it with https://stackoverflow.com/users/
.
- The script works for Deputy as well, but this will of course take more time. You might even get rate-limited because the script has to fetch each profile page separately.
- Some users have less helpful flags than the badge requirement; this is due to an old bug in the system, cf. I got the Marshal badge with less than 500 helpful flags.