Discordの連投荒らしの事後処理の記録

今日の夜中の寝入りばな、自分のサーバーが荒らされていることに気がついて、眠いので放置してから起きたところ、大量のメッセージ(15,000件くらい)を投下されてしまった。

@everyoneを使った通知荒らしと、個別のユーザーにメンションをすることで@everyoneのブロッキングを回避する通知荒らしについてはAutomodで対策をしていたので防げたが、それ以外の部分の対策に穴があった。具体的には、単純な連投荒らしと、botのコマンドを連投することでbotも巻き込む連投荒らしへの対策ができていなかった。

そのため、単純な連投によるメッセージと、botの投票コマンドの連投によるメッセージで、合わせて15,000件くらい溜まってしまった。

 

荒らされてしまったものは仕方ないが、メッセージが残ったままになっていると雑談の流れを追うことに支障が出る。私はチャンネルごと削除をするのが嫌いなので、メッセージだけを削除する方法を模索した。

 

まず、連投荒らしをしていたアカウントをBANすることでメッセージを削除しようとした。Discordでは、特定のアカウントをBANする際に、そのアカウントから投稿されたメッセージを削除するかどうかを選択することができる。

ところが、この機能では大量のメッセージを一括削除することができなかった。ちゃんとした記録を取れなかったので検証する必要があるが、おそらくは1アカウントごとに500件ほどのメッセージしか削除できず、しかもペースも20件/分ほどだった。

 

次に考えたのは、botを利用してメッセージを削除することだった。いくつかのbotを試してみたところ、mee6の /clear コマンドが非常に使いやすかった。

このコマンドでは、member パラメーターを指定することで、削除の対象を特定のアカウントから投稿されたメッセージに限定することができた。ただし、このパラメーターではサーバーを抜けたアカウントを指定することができなかった。そのため、大量のメッセージを一括削除する場合は、できる限りアカウントをBANせず、 /clear コマンドでメッセージを削除してからBANするのが最も効率的だと言える。

mee6の /clear コマンドは削除するメッセージ数の上限が高く、10,000件のメッセージを拒否せずに削除してくれた。しかも、削除ペースも非常に早く、1,000件/分は優に超えるようだった。

結局、botによるメッセージしか指定できなかったので、残りのメッセージは amount パラメーターに件数を指定して消すことにした。

途中、元からチャンネルに書き込まれていたメッセージを500件ほど消しそうになってしまったので、寸前でmee6をキックして削除を無理やり止めた。その後、検索を利用して削除すべきメッセージの件数を確認してから /clear を実行したのだが、検索結果のヒット件数の表示が正確でなかったようで、3日分ほどのログが消えてしまった。とはいえ、botをいじるのが久しぶりだった割には上出来だったと思う。

 

おわり