Skip to content

ChatEvent

Koukunn_ edited this page Feb 25, 2025 · 2 revisions

ChatEvent Module

このモジュールは、Minecraft Bedrock Edition の Script API を使用して、チャットを監視、記録、管理するためのモジュールです。スパム対策、不適切発言のフィルタリング機能を備えています。

機能概要

  • チャットの記録:

    • プレイヤーのチャットメッセージをスコアボード(message)に記録します。
    • スコアボードのエントリ名は {送信者名}_{メッセージ内容} の形式になります。
    • 記録されたチャットは3秒後に自動的に削除されます。
    • モジュール有効化時に、既存のチャットログをクリアします。
  • チャットタグの付与:

    • w:chat_[メッセージ内容] という形式のタグをメッセージ送信者に付与します(メッセージ内容はタグの長さに収まる範囲)。
    • 付与されたタグは、1秒後に削除されます
    • w:chat_cancelタグを持つプレイヤーのメッセージは送信されません。
  • 文字数制限:

    • 150文字を超えるメッセージは送信できません。
  • スパム対策:

    • 同一メッセージ検知: 短時間に同じメッセージを複数回送信することを検知します。
    • 類似メッセージ検知: 短時間に類似したメッセージを複数回送信することを検知します(Jaro-Winkler距離で類似度を計算)。
    • スパムと判定されたプレイヤーは、30秒間メッセージを送信できなくなります。
  • 不適切発言フィルタ:

    • 定義済みの禁止ワードリストに一致する単語を含むメッセージは送信できません
    • 不適切な発言と判断した場合、ワールド全体に警告メッセージを表示します。

使用するタグ

タグ名 説明 付与対象 備考
w:chat_[メッセージ内容] メッセージ送信時に、その内容に基づいてプレイヤーに付与されます。 プレイヤー 1秒後に自動削除。メッセージが長い場合は、タグの長さに合わせて切り詰められます。
w:chat_cancel このタグを持つプレイヤーは、メッセージを送信できません。 プレイヤー

スコアボード

スコアボード名 説明 キー(Key) 値(Value)
message プレイヤーのチャットメッセージを一時的に保存します。 {送信者名}_{メッセージ内容} の形式 常に 0

禁止ワードリスト

このモジュールには、多数の禁止ワードが設定されています。差別用語、侮辱、猥褻な言葉、挑発的な言葉などが含まれます。具体的なリストはコード内の blockedWords 配列を参照してください。

スパム検知の仕組み

  1. 同一メッセージ検知:

    • recentMessages (Map) に、各プレイヤーの最近のメッセージとその送信時刻を記録します。
    • メッセージ送信時に、spamTimeframe (デフォルト: 2秒) 以内に送信されたメッセージを抽出します。
    • 抽出したメッセージの中に、送信しようとしているメッセージと完全に一致するものがあれば、identicalCount を増やします。
    • identicalCount が spamThreshold (デフォルト: 2) 以上の場合、スパムと判定します。
  2. 類似メッセージ検知:

    • 上記と同様に、最近のメッセージを抽出します。
    • Jaro-Winkler距離を用いて、送信しようとしているメッセージと、抽出した各メッセージとの類似度を計算します。
    • similarityThreshold (デフォルト: 0.8) 以上の類似度を持つメッセージがあれば、similarCount を増やします。
    • similarCount が spamThreshold 以上の場合、スパムと判定します。

注意点

  • メッセージに {、}、_ が含まれていると、スコアボードのエントリ名が正しく生成されない可能性があります。
  • スコアボードに記録されたチャットは3秒後に自動削除されますが、定期的なログ整理を推奨します。

Clone this wiki locally