Use case

Game chat moderation with AI, for every language your players speak

Online games bring players from many countries into the same lobby, and trash talk can turn into abuse in seconds. VigiMod checks every chat message on your game server, reading the messages before it, in 26 languages, with rules written for your game.

What makes it hard

Trash talk or abuse?

“Get rekt” after a match is normal; the same player attacking someone for who they are is not. Context and separate categories keep the difference.

Global lobbies

One match can mix Spanish, Portuguese, German and Italian. The model was trained on 26 languages.

Game-specific rules

Cheat selling, account trading or spoilers about a new season are rules for your game, not generic categories.

How it works with VigiMod

  1. 1

    Your game server receives the chat message and keeps the last messages of the room or match.

  2. 2

    It sends them to VigiMod with the player's id, the room as scope and your rules.

  3. 3

    If the message is flagged it is not broadcast; your server can warn, mute or report the player.

Rules you can copy

Send them in the rules field: each one comes back with its own score, like a built-in category.

{
  "rules": {
    "no-cheats": "No selling or sharing cheats, hacks or exploits",
    "no-trading": "No trading accounts or items for real money",
    "no-spoilers": "No spoilers about the new season's story",
    "no-boosting": "No offering boosting or rank selling services"
  }
}

Example

A Node.js chat server with WebSockets: each message is checked before it is sent to the other players.

JavaScript (Node.js)

// npm install ws  (Node 18+)
// A game chat server: each message is checked before it is sent to the room
import { WebSocketServer } from "ws";

const RULES = { "no-cheats": "No selling or sharing cheats, hacks or exploits" };
const recent = [];                       // the last messages of the room, sent as context
const wss = new WebSocketServer({ port: 8080 });

async function moderate(text, playerId) {
  const res = await fetch("https://api.vigimod.com/moderate", {
    method: "POST",
    headers: { "X-API-Key": process.env.VIGIMOD_KEY, "Content-Type": "application/json" },
    body: JSON.stringify({ text, context: [...recent], rules: RULES, user_id: playerId, scope: "room-1" }),
    signal: AbortSignal.timeout(2000),
  }).catch(() => null);
  return res?.ok ? res.json() : { flagged: false };   // slow or down: let the message through
}

wss.on("connection", (socket, req) => {
  const playerId = req.headers["x-player-id"] ?? "guest";   // use your own authenticated player id
  socket.on("message", async (data) => {
    const text = data.toString().slice(0, 2000);
    const result = await moderate(text, playerId);
    if (result.flagged) {
      socket.send(JSON.stringify({ type: "blocked", reason: "This message breaks the chat rules." }));
      return;
    }
    recent.push(text);
    if (recent.length > 10) recent.shift();
    for (const client of wss.clients) client.send(JSON.stringify({ type: "chat", playerId, text }));
  });
});

Tips

  • Check messages on your server, never from the game client: the API key must not ship with the game.
  • Use higher thresholds for toxic in competitive modes and lower ones in family modes: thresholds can change per request.
  • If the check fails or times out, let the message through and log it, so chat never stops.

Questions

Can I call VigiMod from Unity or Unreal directly?
Do not put the API key in the game build: call VigiMod from your game server or backend, which then decides what to broadcast.
Does it moderate voice chat?
No, only text. If you transcribe voice to text you can check the transcript like any message.
How fast is it?
One HTTP call per message. Give it a short timeout and let the message through if it is slow; the batch endpoint checks up to 20 messages in one call.
Is it suitable for games with children?
Add the opt-in child_safety category (beta), which flags attempts to groom a minor, and send those flags to a person on your team.

Try it on your community

Create a free API key in two minutes. No card, no trial period.