Brazil's biggest MU Online portal — since 2003
Tutorial Intermediate Web

How to Build a Moderated Comment System for a MU Online Website

Implement a moderated comment system on your MU Online server website, with an approval queue, anti-spam filter, community reporting, and clear moderation rules for news, rankings, and profiles.

RO Rodrigo · Updated on Aug 7, 2024 · ⏱ 13 min read
Quick answer

Comments open valuable space for the community to react to news, discuss rankings, and interact on player profiles — but without proper moderation, they quickly become a stage for spam, guild flame wars, and personal attacks. A well-designed moderated comment system balances openness (the community

Comments open valuable space for the community to react to news, discuss rankings, and interact on player profiles — but without proper moderation, they quickly become a stage for spam, guild flame wars, and personal attacks. A well-designed moderated comment system balances openness (the community feels heard) with control (the team can contain abuse before it becomes a reputation problem). This tutorial covers the data model, the moderation queue, the anti-spam filter, and the community rules.

Where comments make sense on the site

Not every page needs comments. The places that benefit most are: blog posts (feedback and discussion), ranking pages (comments about top-spot disputes), player profiles (congratulations, light banter), and event pages (real-time reactions). Avoid enabling comments on purely technical pages (like tutorials or terms of use), where discussion tends to be irrelevant to the content.

Data model

CREATE TABLE comments (
  id INT PRIMARY KEY AUTO_INCREMENT,
  account_id INT NOT NULL,
  target_type ENUM('blog_post','ranking','profile','event') NOT NULL,
  target_id INT NOT NULL,
  parent_id INT NULL,
  content TEXT NOT NULL,
  status ENUM('pending','approved','rejected','flagged') DEFAULT 'pending',
  created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
  ip_hash VARCHAR(64)
);

CREATE TABLE comment_reports (
  id INT PRIMARY KEY AUTO_INCREMENT,
  comment_id INT NOT NULL,
  reporter_account_id INT NOT NULL,
  reason VARCHAR(100),
  created_at DATETIME DEFAULT CURRENT_TIMESTAMP
);

target_type + target_id make the table generic enough to serve the blog, ranking, profile, and events without needing separate tables per context. parent_id allows threaded replies.

Requiring a registered account to comment

Fully anonymous comments are the main vector for spam and abuse. Requiring login with the same game account used for the panel (reusing existing authentication) creates a minimal identity cost — the player knows the comment is tied to the account they use to play, which already reduces most toxic behavior without any additional rule.

Pre-moderation vs. reactive moderation

ModelHow it worksBest for
Pre-moderation (approval queue)Every comment enters as pending and only appears after manual approvalSmall/medium servers, low daily volume
Reactive (reporting)Comment appears immediately; the community reports it; a moderator reviewsLarge servers, high daily volume
HybridAn automatic filter blocks the obvious cases; the rest goes through reactive moderationMost growing servers

The hybrid model tends to be the best balance: an automatic filter (next section) already blocks obvious spam and direct insults, and the rest stays under reactive moderation with community reports, without overloading the team with manual approval of everything.

Automatic anti-spam filter

Before a comment becomes pending or approved, run it through a basic filter:

function filterComment($content) {
    $bannedWords = loadBannedWordsList(); // list of banned words
    $lower = mb_strtolower($content);

    foreach ($bannedWords as $word) {
        if (str_contains($lower, $word)) {
            return 'rejected';
        }
    }

    if (preg_match('/(https?:\/\/|www\.)/i', $content)) {
        return 'flagged'; // suspicious links go to manual review
    }

    if (substr_count($content, strtoupper($content)) > 0 && strlen($content) > 20) {
        return 'flagged'; // all-caps text, possible aggressive spam
    }

    return 'pending';
}

Links in comments almost always deserve manual review (flagged), since they're the main vector for spam from external sites and phishing scams targeting players.

Moderation queue for the team

The moderation team needs a simple screen listing pending and flagged comments, with context (where it was posted, who posted it, the author's history) visible without needing to navigate to another page. Minimum actions: approve, reject, and mute the author from commenting for a configurable period.

ActionEffectReversible
ApproveComment moves to approved and becomes publicYes, can be reverted later
RejectComment stays hidden, author isn't notified of the reasonYes
Temporary muteAccount can't comment for X daysYes, expires automatically
Comment banAccount permanently barred from commentingOnly by admin decision

Community reporting system

A "report" button on every comment, tied to the comment_reports table, lets the community itself flag abuse that got past the automatic filter. When a comment accumulates a minimum number of reports (e.g. 3 from distinct accounts), it automatically moves to flagged and enters the priority review queue, even without any manual intervention up to that point.

Community rules and progressive punishment

Publish clear rules on what's not allowed: personal attacks, out-of-context guild fights, promoting other servers, offensive content. Punishment should be progressive:

  1. First violation: warning + comment removal.
  2. Second violation: 7-day mute.
  3. Third violation: 30-day mute.
  4. Repeat offense: permanent comment ban (not necessarily an account ban).

Document these rules on a public page, linked near the comment box, to reduce claims of "I didn't know that was against the rules."

Detecting coordinated accounts (brigading)

When several accounts comment in a coordinated way on the same post, targeting the same person, cross-reference IP hash and fingerprint between those accounts — the same anti-fraud infrastructure used in other site systems (affiliates, betting) can be reused here, since the detection pattern (related accounts by IP/device acting together) is the same.

Display and formatting

Allow basic formatting (bold, italics, mentioning another player) but avoid free HTML — always sanitize the content on the backend before saving, never relying solely on frontend validation. A comment with an unfiltered malicious script is a classic XSS vulnerability that can compromise other players' sessions.

Common errors and fixes

SymptomLikely causeFix
Link spam getting throughFilter not catching URL patternsAdjust the link-detection regex and add mandatory manual review
Comment with HTML breaks the page layoutMissing backend sanitizationSanitize and escape content before saving and before rendering
Moderation queue grows faster than the team can review100% pre-moderation on a high-volume serverMove to a hybrid model with automatic filter + reporting
Same group of accounts repeatedly attacking the same playerMissing coordinated-account detectionCross-reference IP/fingerprint and apply punishment jointly
Players complain about unfair censorshipMissing public rules and consistent criteriaPublish clear rules and apply documented progressive punishment

Launch checklist

  • Comment and report tables created.
  • Mandatory login (game account) to comment.
  • Automatic anti-spam filter active (banned words, links, all-caps).
  • Moderation queue with approve/reject/mute actions implemented.
  • Community report button working.
  • Community rules published and linked near the comment box.
  • Content sanitization (anti-XSS) validated on the backend.
  • Basic coordinated-account detection configured.

With the moderated comment system live, the community gains a healthy interaction channel on news, rankings, and profiles — to review the account base and infrastructure this system relies on, see the guide on how to create a MU Online server.

Frequently asked questions

Is pre-moderation (before publishing) or reactive moderation (via reports) better?

It depends on volume. Small/medium servers can sustain pre-moderation without delaying conversation too much. Large servers usually need reactive moderation with a strong automatic filter, since manual pre-moderation doesn't scale to hundreds of comments per day.

Do I need a registered account to comment, or should anonymous comments be allowed?

Requiring a registered account drastically reduces spam and abusive comments, because it creates a minimal identity cost. The recommendation is to require login with at least a game account — fully anonymous comments are the main vector for spam and attacks.

How do I handle flame wars between rival guild players in the comments?

Set explicit rules against personal attacks and guild fights in public comments, with progressive punishment (warning, temporary mute, comment ban). Redirect heated discussions to dedicated Discord channels, where real-time moderation is more viable.

Is it worth using a third-party service (Disqus, for example) instead of a custom system?

Third-party services are quick to integrate, but they take away full control over data, moderation, and design, and bring third-party ads on most free plans. For a MU server site, a custom system integrated with the existing login is usually worth the extra effort.

How do I identify multi-login accounts used to brigade in the comments?

Cross-reference IP and browser fingerprint between accounts that comment in a coordinated way on the same posts, and apply the same anti-fraud rules already used in other site systems (affiliates, betting), reusing the same detection infrastructure.

RO
Founder & editor-in-chief

Rodrigo has run ViciadosMU since the portal's early days. A specialist in MU Online server creation and administration, game history and the evolution of the seasons — he wrote much of the archive before 2024.

Keep reading

Related articles