Application de la modération personnalisée

Verité applique normalement les sourdines, le mode lent et les gels de chat automatiquement. Cependant, certains plugins de chat interceptent l’événement de chat standard de Minecraft et gèrent eux-mêmes la transmission des messages.

Si votre plugin fonctionne ainsi, Verité peut ne jamais voir le message, de sorte que ses propres vérifications de sourdine et de mode lent ne s’exécutent jamais. Dans ce cas, vous devez interroger Verité au sujet de l’expéditeur avant que votre plugin n’envoie le message, et arrêter le message vous-même lorsque Verité l’indique.

Vous n’avez besoin de ce guide que si votre plugin gère ou remplace le chat standard de Minecraft. Les serveurs utilisant le chat standard ne nécessitent aucune configuration supplémentaire.

Ceci est le pendant modération du guide Intégration d’un chat personnalisé. Le guide du filtre analyse le contenu des messages ; ce guide applique les sourdines, le mode lent et les gels de chat.

Intégration Java

La surface de modération se trouve dans teacommontea.api.VeriteModeration. Chaque méthode renvoie une valeur sûre lorsque le module de modération est désactivé, de sorte qu’un appelant n’a jamais à en faire un cas particulier.

1. Ajouter Verité en tant que dépendance facultative

Ajoutez Verité à votre plugin.yml :

softdepend:
  - Verite

L’utilisation d’une dépendance facultative garantit que Verité est chargé avant votre intégration lorsqu’il est installé, sans pour autant le rendre obligatoire pour le démarrage de votre plugin.

2. Vérifier si l’API est disponible

Si Verité est facultatif, vérifiez la disponibilité de l’API avant de l’utiliser :

private static final boolean VERITE_AVAILABLE;

static {
    boolean available;

    try {
        Class.forName("teacommontea.api.VeriteModeration");
        available = true;
    } catch (ClassNotFoundException ignored) {
        available = false;
    }

    VERITE_AVAILABLE = available;
}

Votre intégration peut alors simplement ne rien faire lorsque Verité n’est pas installé.

3. Appliquer les sourdines

Avant que votre système de chat personnalisé n’envoie un message, demandez à Verité si l’expéditeur est réduit au silence :

if (VERITE_AVAILABLE) {
    if (VeriteModeration.muteGate(player)) {
        return;
    }
}

muteGate renvoie true lorsque le joueur est réduit au silence, et ce faisant lui envoie l’avis de sourdine pour vous. Lorsqu’il renvoie true, arrêtez le message.

Si vous préférez construire l’avis vous-même, lisez plutôt la sourdine active :

if (VeriteModeration.isMuted(player.getUniqueId())) {
    Punishment mute = VeriteModeration.activeMute(player.getUniqueId());

    String line = mute.permanent()
        ? "You are muted."
        : "You are muted for " + mute.remaining(System.currentTimeMillis()) + " more milliseconds.";

    player.sendMessage(line);
    return;
}

isMuted est une vérification pure et n’envoie rien. activeMute renvoie la sourdine sous forme de Punishment, à partir de laquelle vous pouvez lire reason(), permanent() et remaining(now).

4. Appliquer le mode lent et le gel du chat

Verité dispose de deux freins de chat à l’échelle du serveur : un gel global du chat défini par le personnel, et un mode lent par joueur. Barrez les deux de la même manière que vous barrez les sourdines :

if (VeriteModeration.chatMuteGate(player)) {
    return;
}

if (VeriteModeration.slowmodeGate(player)) {
    return;
}

Chacun renvoie true lorsque le joueur devrait être arrêté, et lui envoie la raison (l’avis de gel du chat ou l’attente restante du mode lent) ce faisant. Vérifiez les deux avant l’envoi.

En les assemblant

Un gestionnaire de chat complet qui reproduit l’application de Verité ressemble à ceci :

if (VERITE_AVAILABLE) {
    if (VeriteModeration.muteGate(player)) {
        return;
    }

    if (VeriteModeration.chatMuteGate(player)) {
        return;
    }

    if (VeriteModeration.slowmodeGate(player)) {
        return;
    }
}

sendMessage(player, message);

Réagir aux sanctions

Si votre plugin a besoin de savoir quand une sanction est émise ou levée (pour la journalisation, les notifications ou la synchronisation d’un autre système), enregistrez un écouteur :

VeriteModeration.registerListener(new ModerationListener() {
    @Override
    public void entryAdded(Punishment punishment) {
    }

    @Override
    public void entryRemoved(Punishment punishment) {
    }
});

entryAdded se déclenche lorsqu’une sanction est émise, entryRemoved lorsqu’une est levée. Chaque Punishment porte la cible, le type, la raison, la durée, l’exécuteur et le caractère silencieux. Appelez unregisterListener avec le même écouteur pour cesser de recevoir les événements.

Verrouillage du serveur

Verité peut sceller le serveur derrière un verrouillage. Votre plugin peut lire l’état de verrouillage ou le piloter via teacommontea.api.VeriteLockdown :

if (VeriteLockdown.active()) {
    String reason = VeriteLockdown.reason();
}

VeriteLockdown.begin("Maintenance");
VeriteLockdown.end();

active() indique si un verrouillage est en vigueur, reason() renvoie la raison actuelle, begin(reason) en démarre un, et end() le lève. Utilisez active() pour barrer votre propre comportement pendant un verrouillage, ou begin et end pour piloter le verrouillage depuis vos propres commandes.


Utiliser Verité avec Skript

Si votre système de chat personnalisé est écrit en Skript, vous n’avez pas besoin d’interagir avec l’API Java.

Avec Verité et Skript installés, la syntaxe de modération de Verité est automatiquement disponible.

Appliquer les sourdines, le mode lent et le gel

Si votre script gère déjà lui-même l’envoi des messages de chat, vérifiez l’expéditeur avant l’envoi. Utilisez ceci à l’intérieur de votre événement de chat :

if chat is frozen for player:
    stop

if player is on slowmode:
    stop

chat is frozen indique le gel global du chat, et player is on slowmode indique le délai de mode lent par joueur. Les deux envoient la raison au joueur en effet de bord, alors utilisez-les là où vous comptez appliquer, et non simplement pour lire l’état.

Pour vérifier la sourdine personnelle d’un joueur :

if player is muted:
    stop

player is muted lit l’état de sourdine active sans rien envoyer, alors associez-le à votre propre avis.

Contrôler le verrouillage

Vous pouvez démarrer ou lever un verrouillage du serveur depuis un script :

begin message lockdown with reason "Maintenance"

end message lockdown

La raison est facultative ; l’omettre utilise une étiquette générique.

Référence de la syntaxe Skript

player is muted
player is not muted

chat is frozen [for %-player%]
player is rate limited
player is on slowmode

begin message lockdown [(with reason|for) %-string%]
end message lockdown

chat is frozen, is rate limited et is on slowmode envoient un avis au joueur lorsqu’ils correspondent, alors utilisez-les dans un gestionnaire de chat où vous comptez arrêter le message.


Référence de l’API

L’API publique se trouve sous :

teacommontea.api

Les classes principales pour l’application de la modération sont :

VeriteModeration
VeriteLockdown

Les méthodes utiles comprennent :

VeriteModeration.muteGate(Player player)
VeriteModeration.chatMuteGate(Player player)
VeriteModeration.slowmodeGate(Player player)

VeriteModeration.isMuted(UUID player)
VeriteModeration.activeMute(UUID player)

VeriteModeration.registerListener(ModerationListener listener)
VeriteModeration.unregisterListener(ModerationListener listener)

VeriteLockdown.active()
VeriteLockdown.reason()
VeriteLockdown.begin(String reason)
VeriteLockdown.end()

Les méthodes de barrière (muteGate, chatMuteGate, slowmodeGate) décident à la fois d’arrêter le joueur et lui envoient la raison. Les méthodes de requête (isMuted, activeMute) ne font que lire l’état et n’envoient rien.

Pour la plupart des intégrations de chat personnalisé, appliquer les trois barrières dans l’ordre est tout ce dont vous avez besoin :

if (VeriteModeration.muteGate(player)
        || VeriteModeration.chatMuteGate(player)
        || VeriteModeration.slowmodeGate(player)) {
    return;
}

Verité s’occupe du reste.