Discordのアンチスパムボットは、メンバーの投稿速度、同じメッセージの繰り返し、一度にメンションする人数を監視し、設定した上限を超えた瞬間に自動でタイムアウトさせます。うまく設定されていれば、ただ速くチャットしているだけのメンバーに触れることなく、レイド用ボットや連投する人を数秒で捕捉できます。このガイドでは、何がスパムとみなされるのか、Noxyrのしきい値とタイムアウトの内部動作、そして本当のメンバーが引っかからないようにする調整方法を順に説明します。
何がスパムとみなされるのか?
ほとんどのDiscordアンチスパムの設定は、3種類の異なるパターンを監視しており、そのどれか1つだけでも対応を起こすことができます。
- メッセージの頻度:短い時間内に1人から送られるメッセージが多すぎる場合です。コピー&ペーストによる連投や、スクリプトで動くレイドアカウントを捕捉します。
- 重複した内容:同じメッセージ(またはほぼ同一のメッセージ)が何度も送られる場合です。「参加して、同じ詐欺リンクを5つのチャンネルに貼る」というパターンを捕捉します。
- 大量のメンション:1つのメッセージで、通常のメッセージよりはるかに多くのユーザーやロールにメンションする場合です。
@everyoneと@hereを含みます。
メンバーは3つのうち1つに引っかかるだけで十分です。6件の通常のメッセージを続けて送っても、内容を繰り返さず、誰もメンションしていなければ、まったく影響を受けません。
Noxyrのアンチスパムのしきい値とタイムアウトの仕組み
Noxyrは、サーバーごと、メンバーごとにスライディングウィンドウを追跡します。そのメンバーがウィンドウ内に送ったメッセージはすべてウィンドウに追加され、ウィンドウの長さより古いものは自動的に消えます。新しいメッセージが届くたびに、このウィンドウに対して3つのチェックが行われます。
- ウィンドウ内の最大メッセージ数:メンバーがウィンドウ内で設定された件数(デフォルトでは8秒間に6件超)より多くメッセージを送った場合、頻度の違反となります。
- 重複の上限:比較の前に、内容の前後の空白を取り除き、小文字に変換し、余分な空白をまとめます。そのため「Hello!!」と「hello!!」は同じメッセージとみなされます。ウィンドウ内でこの回数(デフォルトでは4回)に達した重複があれば、違反となります。
- メンションの上限:Noxyrは、メッセージ内でメンションされたユーザーとロールを数えます。メッセージが
@everyoneや@hereをメンションしている場合、その数に100が加算されます。誰もそのような高い値を上限として設定することはないため、設定された上限に関係なく、必ず違反として扱われます。
最初に違反したチェックが対応を発動させます。ボットは、2つ目のチェックも発動するかどうかを待ったりはしません。対応が発動すると、設定によって次の2つのいずれか、または両方が起こります。
- タイムアウト:メンバーは設定された分数(デフォルトは10分。コマンドからは最大7日、Discordの上限である28日が上限)の間タイムアウトされます。これは、ほかのモデレーション操作と同じく、ボットのロールがメンバーのロールより上にある場合にのみ発生します。
- メッセージの削除:有効な場合(デフォルトでオン)、違反が起きたチャンネルで、そのメンバーの追跡対象メッセージのうち直近10件までを削除します。同じ連投の間に別のチャンネルに投稿されたメッセージまでは追いかけません。
違反の後、そのメンバーのウィンドウは空にリセットされます。そのため、1回の連投で発動する対応は、上限を超えたメッセージごとではなく、1回だけです。
設定方法
上記のすべては/security antispam、またはダッシュボードのセキュリティページで設定できます。
- enabled:セキュリティモジュール自体がオンの場合でも、アンチスパムはデフォルトでオフです。そのため、モジュールをオンにしても、予告なしに誰かを処分し始めることはありません。
- max_messagesとwindow_seconds:頻度の上限と、ウィンドウの長さです。
- duplicate_limit:何回繰り返されたら、スパムとみなすかを設定します。
- mention_limit:1つのメッセージで何人にメンションしたら、大量メンションとみなすかを設定します。
- timeout_minutes:タイムアウトの長さです。
- delete_messages:スパムのメッセージも一緒に削除するかどうかです。
/security statusでは、アンチスパムとアンチヌークの現在の数値を1つの埋め込みで確認できます。何かを変更する前に、実際に有効になっている設定を確認する最も速い方法です。
誤検知を避ける
本当のメンバーをタイムアウトさせるスパムフィルターは、人を離れさせてしまいます。次のことで、それを防げます。
- 管理者は自動的に除外されます。管理者権限を持つ人や、ダッシュボードで管理者ロールとして追加したロールを持つ人は、完全にスキップされます。スタッフが投稿するお知らせやギブアウェイ(プレゼント企画)のメンションが、メンションの上限に引っかかることはありません。
- ボットとWebhookのメッセージは検査されません。アンチスパムのチェックに届くのは人間のメッセージだけです。そのため、お知らせ用のWebhookや、ログチャンネルで素早く投稿する別のボットは問題になりません。
- 回数の上限を上げる前に、ウィンドウを広げてください。活発な一般チャンネルで速く打つ人が頻度の上限に近づいている場合、
max_messagesを上げるよりも、window_secondsを少し(たとえば8秒から12秒へ)広げるほうが、通常は穏やかな対応になります。通常の会話にゆとりを与えつつ、本当の連投に対しては扉をあまり広げずに済むからです。 - テンプレートの内容に関しては、duplicate_limitに注意してください。コピー&ペーストのテンプレート(募集投稿、チケットのマクロ、応募の回答など)を使うコミュニティは、重複チェックに引っかかることがあります。重複検知を完全にオフにするのではなく、上限を少し上げてください。
- 調整中は、delete_messagesをオフにしてください。削除をオフにしておけば、スパムはタイムアウトされても、メッセージは残ります。どのメッセージがフィルターを発動させたのかを正確に確認でき、実際の証拠をもとに数値を調整しやすくなります。
- 現在、アンチスパムの違反に対して、アンチヌークのようなアラートの埋め込みは投稿されません。ボットが適用したタイムアウトはすべて、Discordの監査ログに引き続き記録されます。何が起きたかを確認したい場合は、そちらを見てください(現在の設定は
/security statusで確認できます)。
Discordアンチスパムボット対Discord標準のAutoMod
Discordのネイティブ機能であるAutoModは、スパムのようなリンクや、フラグが立てられたキーワードを含むメッセージをブロックできます。また、独自のメンションスパムのルールもあり、すべてサーバー設定で構成します。非常に便利で、オンにするのに費用もかかりません。専用のアンチスパムDiscordボットと比べて不足しているのは、それぞれの保護が別々のルールであり、ルールエディターで1つずつ作成しなければならない点です。また、どれも、メンバーごとのスライディングウィンドウのように、メッセージをまたいだそのメンバーの全体的な振る舞いを追跡しません。AutoModは単一のメッセージを切り離して反応します。「この人は8秒間に6件のメッセージを送った」とか「この1分間で、同じメッセージの4件目だ」といった概念は、標準では持っていません。
Noxyrのようなボットベースのフィルターは、頻度の制限、重複検知、メンションの上限を1つのスイッチの裏にまとめ、どこでも同じ管理者の除外を適用します。さらに、独立したルールの山ではなく、すべての数値を一度に確認・変更できる場所(ダッシュボードまたは/security status)を提供します。両方を併用しても競合はしません。AutoModのキーワードとリンクのフィルターは、頻度ベースのフィルターでは決して捕捉できないものを捕捉します。一方、メンバーごとのスパムフィルターは、AutoModが追跡するようには作られていない連投パターンを捕捉します。
よくある質問
アンチスパムはデフォルトでオンになっていますか?いいえ。セキュリティモジュールはデフォルトでオンですが、アンチスパム自体は、/security antispam enabled:True、またはダッシュボードから別途オンにする必要があります。
リアクションや速い返信を連投しているモデレーターをタイムアウトしてしまいますか?管理者権限、または設定された管理者ロールを持っていれば、タイムアウトされません。すでに管理者権限を持っていない信頼できるスタッフは、ダッシュボードのロールページから管理者ロールに追加してください。
メンバーが投稿したすべてのチャンネルのメッセージを削除しますか?いいえ。違反が起きたチャンネルのメッセージだけを、そこで追跡された直近10件まで削除します。
これとアンチヌークの違いは何ですか?アンチスパムは、通常のメンバーによるメッセージの送信を監視します。アンチヌークは、大量のチャンネル削除やロール削除のような、管理者レベルの破壊的操作を監視します。これらは別々に設定され、独立して動作させることができます。Noxyrのセキュリティモジュールの後半については、アンチヌークの完全ガイドをご覧ください。
チャンネルごとに異なる上限を設定できますか?現在はできません。上限はサーバー全体に適用されます。ただし、削除は連投が起きたチャンネルにのみ作用します。
アンチスパムは、アンチヌーク、認証、モデレーションログと並んで、Noxyrの無料のセキュリティモジュールにある1つのスイッチです。Noxyrを無料で追加して、セキュリティのドキュメントからオンにするか、モジュールの対象範囲をすべて知りたい場合はセキュリティボットの機能ページをお読みください。