🛡️

Discordの必須セキュリティ機能「コマンド権限」についてのご紹介

2022/08/19に公開

自己紹介

VOISCORDというBOTを運営しているVOISCORD運営と申します。
長いので以降筆者と呼びます。

VOISCORDに関しては本題とは異なるのでここでは記載致しません。
詳細を知りたい方は以下の記事をお読み下さい。
https://zenn.dev/voiscord/articles/47a23c98884a4a

概要

  • スラッシュコマンドにはセキュリティ上の欠点があった
  • それを解決したのが「コマンド権限」機能
  • 設定の仕方は設定方法より

はじめに

皆様はDiscord上でスラッシュコマンドを利用したことはありますか?
筆者はあります。作ったこともあります。

スラッシュコマンド

Discordが2021年から移行を進めている/から始まるBOTのコマンドの体系です。
それ以前は今ではテキストコマンドやプレフィクスコマンドと呼ばれる!とか?から始まるコマンドを使っていました。
しかし2022年8月31日以降、後者のコマンドは多くのBOTで使用できなくなり、BOT開発者に向けてスラッシュコマンドへの移行が再三通告されていました。
スラッシュコマンドについて詳しく調べたい方は以下の公式ブログをお読み下さい。
https://discord.com/blog/welcome-to-the-new-era-of-discord-apps

コマンド権限とはなんぞや

上記のスラッシュコマンド。実は大きな欠点がありました。
それは特定のBOTや特定のコマンドの使用権限を設定できないという点です。

極端な例を紹介します。
2つの機能を備えているBOTを入れているサーバーがあるとしましょう。
BOTの名前はMusic
MusicBOTには/playという音楽を再生するコマンドと/banという任意のメンバーをBANするコマンドがあります。

当然サーバー管理者は全員が/ban機能を使える状態にするわけにはいきません。
しかし従来のロール設定ではコマンドの権限を利用者側で設定する場合「全てのBOTの全てのコマンドを使用できるか」、「全てのBOTの全てのコマンドを使用できないか」の二択しか選ぶことができませんでした。

そうなると/ban機能を使えなくした場合、MusicBOTの/play機能までもが使えなくなり、一般ユーザーからすると少しばかり不便になってしまいます。

そこで登場したのがコマンド権限。
2022年春あたり(うろ覚え)に一部のサーバーでβテストが開始され、7月下旬に一般公開された機能です。
これによってコマンドの使用権限を「ロール」と「チャンネル」によって管理することができるようになりました。

設定方法

「サーバー設定」 > 「連携サービス」 > 「Botおよびアプリ」欄で制限をかけたいものを選びます。
なお、ここに表示されていない場合はそもそもBOTが正しく導入されていない場合がありますので、各BOTの公式サイトやサポートサーバー等を参考に導入してください。


するとこのような画面が出てくるので「ロールとメンバー」「チャンネル」「コマンド」をそれぞれ設定していきます。


今回はこのようにしました。

  • ロールとメンバー権限としては以下のように
    • @everyone(全員)は使えない
    • Memberロールを持ったユーザーのみ利用可能
  • チャンネル権限としては以下のチャンネルでのみコマンドを実行可能にする
    • テスト1
    • テスト2
    • Test
    • Auto
  • VOISCORDが提供するコマンドは個別には特に制限を設けない

これにより、Memberロールを持った人かつ特定のチャンネルでのみコマンドが使えるようになりました。

確認してみましょう。
「テスト1」チャンネルでは使えて

「質問・要望」チャンネルでは「VOISCORDのコマンドを使用する権限がありません」と出てきますね。

また、今回は設定しませんでしたが、「コマンド」欄ではコマンド1つ1つに制限をかけることもできますのでMEE6などの大規模サーバー管理系BOTなどではそういう所を細かく設定すべきでしょう。

注意

この「コマンド権限」は新機能で、まだあまり周知されていません。
大規模BOTならまだしもアップデートが頻繁にされていないBOTではモデレーターロールや権限による独自の制限を設けているBOTもあります。
というより現時点ではそれがほぼ全てです。

なので「ちゃんと許可しているのにコマンドが打てない」という方は各コマンドに必要な権限などをしっかりを確認しましょう。

おわりに

如何だったでしょうか。
従来のスラッシュコマンドはBOTのチャンネル閲覧権限や書き込み権限をも無視して使用できてしまうそれなりにヤバい仕様だったのですが(現在もできてしまいますが)、この機能の実装によりさらに便利に、さらに安全にBOTを扱うことができるようになりました。

この記事を通してサーバーを管理している全ての方々に貢献できたら幸いです。

それでは良きDiscordライフを!

追記

先駆者様方がいらしたのでご紹介します。

https://note.com/bardbot/n/n534e10010aa0

https://yuika-bot.com/articles/tips/restrict-slashcommand/

Discussion