
初めてDiscordのサーバーに参加した時、「verify」というチェックマークなどのリアクションをすると、チャンネルが表示されてその中のメンバーと交流できるようになるパターンは、Discordを使ったことがある方のほとんどが経験されていると思います。
また、「#language」言語チャンネルで日本の国旗をクリックしてリアクションすると、日本語のチャンネルが表示されるというパターンも経験されていることでしょう。
そういう段階を踏んでコミュニティに参加させたい場合に使うのが「Carl-bot」というDiscord用のボットです。
「Bot(ボット)」というのは、人間のように振舞ってメッセージ投稿などの操作をするプログラムのことです。
今回は、この大変便利なボット「Carl-bot」の使い方を紹介します。
サーバーを作成する
一番左側のアイコンの+マークをクリックし、サーバーを追加します。

「サーバーを作成」画面が表示されます。
下の「テンプレートから始める」を使うと、最初からひな形が出来上がっているので設定が楽ですが、説明用にシンプルにしたいので【オリジナルの作成】-【クラブやコミュニティのため】でやっていきたいと思います。


「サーバーをカスタマイズ」では、プロジェクトのアイコンとサーバー名を設定して、新規作成ボタンをクリックします。

とりあえず、チャンネル設定が最小構成でサーバーが出来ました。

Carl-botを導入する
Carl-botのWebサイトを開き、「Login」か「Log in with Discord」をクリックします。

DiscordがCarl-botからのアクセス許可を尋ねてくるので、「認証」をクリックします。
p.s.「ケーキを焼く」というのはギャグなのでしょうかw

「Server picker」画面が表示されます。保有しているサーバーの一覧が表示されます。
設定の対象となるサーバーのアイコンをクリックして選択します。

するとまた確認画面が表示されます。これはcarl-botのロール(権限)を与えて良いかどうかの確認です。
「サーバーに追加」の項目が対象のサーバーになっているかを確認し、「はい」をクリックします。

さらに認証画面が出てきます。これはcarl-botのロールにどのような機能の権限を付与するかを尋ねています。細かく確認しながら許可・不許可を設定する必要がありますが、どの権限が影響するかは分からないので、ここでは全部許可します。
必要な機能的に考えると、特定のメッセージのリアクションを読んで、ユーザーにロールを付与できれば良いので、「メッセージを読む」と「管理者」もしくは「サーバー管理」だけで良いのかなと思います。
あと、「~さんが参加しました」などのメッセージを自動的に送る機能などを使う場合は、「メッセージを送信」で良いのかなと思います。

Bot対策の画面が出てくるのでもちろん「私は人間です」にチェックを入れます。

DiscordのサーバーにCarl-botを追加することができたよと表示されるのと同時に、Discord側でもCarl-botが参加した反応があります。
下の画面は、「SKIP」をクリックしておきます。Carl-botのサイトでの設定はひとまずここで置いておき、次はDiscord側の設定に移ります。

Discord側でメンバーを見てみると、Carl-botが参加しているのが分かります。

参加時に必ず読んで欲しいメッセージとその専用チャンネルを作成する
まず専用チャンネルの作成を行う必要があるので、左上にあるサーバー名のドロップダウンボタンをクリックします。

専用チャンネルが所属するカテゴリーを作成する必要があるので、「カテゴリーを作成」を選択します。

カテゴリー名を入力する画面が表示されるので、ここでは「ガイドライン」と入力し、「カテゴリーを作成」ボタンをクリックします。

左ペインのチャンネルリストに「ガイドライン」のカテゴリーが出来たことが分かります。
ガイドラインは全チャンネルの一番上に表示したいので、ドラッグ&ドロップして移動させます。

ガイドラインのカテゴリー内にチャンネルを作るので、「+」ボタンをクリックします。

チャンネルの種類は「Text」を作成します。チャンネル名はここでは「挨拶と利用規約」にします。
チャンネル名を入力したら「チャンネルを作成」ボタンをクリックします。

チャンネルが作成されました。

次は、必ず読んでもらいたいメッセージを書き込みます。これは任意の文章を入力してください。
テンプレとなるような文章を掲載しておきます。ここではこのテンプレ文章を投稿します。
挨拶
当該DAOは「XXXXXX」を母体としたXXXXXXを目指す人々のコミュニティです。
メンバー同士の積極的な情報交換や教え合いの場としてご利用ください。
利用規約
A:当該DAOに参加するすべての人を尊重してください。
- すべての人に敬意を払い、コミュニケーションをとってください。以下のようなチャットや表現を禁止します。
01:他のユーザーや特別な人物を侮辱したり、不快にさせるような投稿。
02:プライバシーを侵害したり、個人情報を明らかにするような投稿
03:卑猥な言葉、ポルノ、わいせつな言葉を含む投稿
04:人種、国籍、性別、性癖などを差別する投稿
05:荒らし行為やスパムとみなされる行為
06:宣伝行為となるコメントやURLの投稿
07:不適切なニックネームでの投稿
08:著作権を侵害する投稿
09:その他、管理者が不適切と判断した場合
- グループ管理者への荒らし行為や不必要なタグ付けはご遠慮ください。
B:グループの話題にふさわしい会話を心がけてください。
- 壁紙、広告、検証不可能な虚偽の内容、コミュニティを乱すようなチャットはご遠慮ください。
- 政治、特定の思想、宗教、その他個人の価値観など、不適切と思われるチャットはご遠慮ください。
- アフィリエイトが付与されたリンクの投稿は禁止いたします。確認された場合は削除対象となりますのでご了承ください。
C:当該DAOへの参加は自由ですが、参加の際には下記のルールを厳守願います。
01:XXXXXXを目指す方に限ります。
02:友人を紹介することは可能としますが、自己紹介部屋にて既存メンバーへの自己紹介と参加の目的を発信してください。
03:紹介されて参加された方からの紹介は、不可とします。
04:自己紹介部屋で参加不適切と判断された場合は、不参加になることもあります。
D:当該DAOでのユーザー名について
01:「[会員ID]-ニックネーム」としてください。(例:02-torijika)
02:紹介ユーザーの方は、「G[紹介者の会員ID]-ニックネーム」としてください。(例:G02-paisen)※「G」はゲストの意味
E:ユーザーやチャットユーザーが上記の規則のいずれかに違反しているのを見た場合、当該DAOのモデレーターにお知らせください。
- ルールを破った場合、警告、一時的な禁止、または永久的な禁止を受けることになります。
メッセージを投稿したら、メッセージの先頭までスクロールして、誘導のために、ユーザーに押してもらいたいリアクションをつけます。
ここではチェックマーク「white_check_mark」をつけます。

ロールを作成する
ロールとは権限の名称のようなものです。例えば管理権限をつけたロールを作成したくて「管理者」というロールを作ったとしたら、この「管理者」と命名したものがロールと言います。
ロールを作成するにはサーバー名の横にあるドロップダウンボタンをクリックし、「サーバーの設定」を開きます。

サーバーの設定を開いたら、左ペインの「ロール」を選びます。

ロール設定画面が表示されたら、「ロールを作成」ボタンをクリックします。

ロールを編集画面が表示されたら、ロール名と、ロール保持者のユーザー名の文字色を決めます。
ここではロール名を「fren1」とし文字色を「青」とします。

下にスクロールすると、いろいろな設定が出てきますが、ここではメンションを許可する設定のみONにしておきます。

「表示」タブの次は、「権限」タブを見ていきます。
このコミュニティでの最下位の権限は何ができるのかを設定するところです。ここではデフォルトのままにします。

次は「メンバーの管理」ですが、メンバーはいないのでここの設定は必要ありません。

下に表示されている「変更を保存する」ボタンをクリックして設定を反映し、ESCボタンで元の画面に戻ります。

元の画面に戻ったら、早速チャンネルに設定していきたいところですが、カテゴリーに設定すれば、カテゴリー内のチャンネルすべてに適用できるので、カテゴリーにロールを設定していきます。
カテゴリーを右クリックし、「カテゴリーの編集」を選択します。

左ペインの「権限」を選択します。

プライベートカテゴリーをONにし、「メンバーまたはロールを追加」ボタンをクリックします。

先ほど作成した「fren1」をチェックすると、上のボックスにロールが追加されるので、確認したら「完了」ボタンをクリックします。

下に表示されている「変更を保存する」をクリックし、ESCボタンをクリックして元の画面に戻ります。

次に、カテゴリー内のチャンネルがカテゴリーの権限設定に準じているかを確認します。
チャンネルの1つのチャンネルの編集ボタン(歯車マーク)をクリックします。

左ペインで「権限」を選択し、チャンネルの権限で表示された「権限はカテゴリー:テキストチャンネルと同期しています」と表示されていればOKです。ESCボタンで元の画面に戻りましょう。

テスト用アカウントを追加する
テスト用アカウントで、ロールの付与がない場合と、ロールを付与した場合とで、チャンネルが表示されるかされないかを確認する必要があります。
テスト用アカウントをサーバーに招待しておきましょう。サーバー名の右にあるドロップダウンボタンをクリックし、「友達を招待」を選択します。

招待リンクURLが記載されている右側の「コピー」ボタンをクリックし、テキストエディタなどに貼り付けておきましょう。

次に、テスト用アカウントに切り替えします。
画面左下にあるアカウントをクリックし、「アカウントの切り替え」-「アカウントの管理」を選択します。

「アカウントを追加」をクリックします。

自分が持っている別のメールアドレスを使って、テスト用のアカウントを追加します。
※ここは新たにDiscordアカウントを作る画面ではなく、既にDiscordに登録済みのアカウントを追加する画面なので、別のテスト用Discordアカウントがない場合は、ログアウトしてから、再度新しいアカウントを作成してからアカウントを追加しましょう。

ボット対策の確認画面が出てくるので、もちろん「私は人間です」にチェックを入れます。

テスト用アカウントをサーバーに参加させる
テストアカウントで対象サーバーに参加します。
左上の「+」ボタンをクリックします。


先ほど発行した招待URLを貼り付け、「サーバーに参加する」ボタンをクリックします。

ロールがない時にチャンネル非表示、ロール付与時にチャンネル表示になるかを確認する
参加直後のチャンネル表示は下記のようになっています。
「#挨拶と利用規約」チャンネルの下に、「テキストチャンネル」のカテゴリー自体が表示されていません。
テストアカウントは、何もロールを付与されていないので、設定したとおり「テキストチャンネル」カテゴリーが表示されていません。これで第1ステップはクリアしました。

次はテストアカウントにfren1のロールを付与したら、「テキストチャンネル」カテゴリー及びその配下のチャンネルが表示されるかを試します。
管理アカウントを切り替えましょう。画面の左下にあるアカウントから、「アカウントの切り替え」を選び、管理アカウントに切り替えます。

管理アカウントに切り替えたら、サーバー名の右にあるドロップダウンボタンをクリックし、「サーバー設定」を選択します。
左ペインの下の方にある「メンバー」を選択します。

テストアカウントの右側の「+」ボタンをクリックすると、作成したロールが表示されるので選択します。

テストアカウントに「fren1」が付与されました。ESCボタンで元の画面に戻ります。

再度テストアカウントに切り替えて、「テキストチャンネル」カテゴリーが表示されているかを確認します。
想定通り「テキストチャンネル」カテゴリーが表示されていました。これで第2ステップはクリアです。

次は、Carl-botのWebサイトでの設定になるのですが、リアクション対象のメッセージIDを取得しておく必要があるので、再度管理者アカウントに切り替えます。
切り替えたらアカウント横のユーザー設定ボタン(歯車マーク)をクリックします。

左ペインの下の方にある「詳細設定」を選択します。

管理者モードをONにし、ESCボタンで元の画面に戻ります。

「#挨拶と利用規約」チャンネルの、リアクション対象のメッセージを右クリックし、「IDをコピー」をクリックします。テキストエディタなどに貼り付けておきましょう。

これでDiscord側の設定は終わりました。次はCarl-botのサイトに戻って設定を進めます。
Carl-botでリアクション時にロールを付与する設定をする
Carl-botのサイトに戻り、左ペインをスクロールした下の方にある「Reaction roles」を選択し、右ペインからは「+Create new reaction role」ボタンをクリックします。

「Mode」で「Use ID」を選択します。

「Use ID」を選ぶと、「message ID」と「channel」を選ぶフィールドが表示されるので、先ほど取得しておいたIDを貼り付け、チャンネルは見てほしいメッセージがあるチャンネルを選びます。ここでは「#挨拶と利用規約」を選択します。

「Add emoji」をクリックし、ユーザーにリアクションしてもらいたいマークを選びます。ここではチェックマーク(white check mark)を選びます。

リアクションマークを設定すると、「Select option」フィールドが表示されるので、ここで付与したいロールを選択します。ここでは「fren1」を選択します。
「Message type」は最終的には「verify」にするのですが、今はテスト的に「normal」のままとします。※「verify」は一度ロールを付与すると、リアクションを解除してもロールは剥奪されないような設定です。「normal」はリアクションするとロールが付与され、リアクション解除するとロールも剥奪できる設定です。

これでリアクションでロールを付与する設定が出来たので、下の方にある「Create」ボタンをクリックして元の画面に戻ります。

設定した内容が表示されていることを確認します。(数秒間表示されないので焦りますが、しばらく何もせず待ってみてください。)

ロールの付与と剥奪で対象チャンネルが表示・非表示となるかテストする
Carl-botで設定したリアクションしてロールを付与・剥奪する機能が有効になっているかをテストしてみます。
テスト環境としては、Discordアプリ側とWebブラウザ側に、それぞれ管理者アカウントとテスト用アカウントを別々にログインし、動作を確認します。
ここではDiscordアプリ側に管理者アカウントを、Webブラウザ側にテスト用アカウントをログインします。動作確認がしやすいように並べて表示しておきましょう。

Discordアプリ側のサーバー設定を開きます。左ペインの下の方にある「メンバー」を選択し、テスト用アカウントのロールの「✕」をクリックして削除します。

すると、「✕」を押した瞬間にWebブラウザ側のテストアカウントのチャンネルに変化があります。成功です。もしここで反応がない場合は・・・「もしチャンネルが表示・非表示にならない場合は」をご覧ください。

次は、逆にロールを付与してみると・・・チャンネルが表示されます。

あとは、Carl-botのサイトに戻って、再度設定内容を編集し「Message type」を「normal」にしたところを「verify」にして、テストしてみましょう。一度付与したロールを削除しても、チャンネルが非表示にならないことを確認します。
以上で設定は完了です。
テストユーザーをサーバーから削除する
あとはテストユーザーをサーバーから削除して、立つ鳥跡を濁さず状態にしておきましょう。テストユーザーを削除するには「サーバー設定」を開き、「メンバー」を選択し、縦に3つ並んだ点のマークをクリックし、「~を追放」を選択すると、削除できます。

もしチャンネルが表示・非表示にならない場合は
管理者アカウントのサーバー設定で、「ロール」を選択し、「carl-bot」のロールが、一番上に設定されているかを確認します。例えば設定付与する側の「carl-bot」が設定対象の「fren1」よりも下にあると、「carl-bot」のロールよりも権限が下になり、Carl-botによる操作が拒否されてしまうことになります。
もし下にある場合は、「carl-bot」と名前の左にある、縦に4つ並んだ点が2列あるマーク(マウスカーソルを合わせると表示されます)をドラッグ&ドロップで上にもっていくと位置を変えることができます。
