0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

HowTelevisionAdvent Calendar 2024

Day 10

新型質問箱サービスと Discord の連携

Posted at

はじめに

この記事は HowTelevision Advent Calendar 2024 10日目の記事になります。

私は新型質問箱サービス「mond」の開発に携わっています。

mond では月額のサブスクとして、メンバー限定の回答を閲覧できるメンバーシップという機能を提供しています。
mond の回答者の中には、メンバー限定のコンテンツを Discord サーバーで展開している方々がいらっしゃいます。そのため、mond のメンバーシップ加入者限定でその Discord サーバーに参加できる権利を付与できたらいいよね、という話になりました。
最近この機能の実装に取り組んだので、本記事ではこの機能に関する設計についてまとめていこうと思います。

DB 設計

mond のメンバーシップ情報を格納するテーブルなど一部省略していますが、Discord 連携に必要なのはざっと下記のテーブルたちです。

テーブル名 概要
user mond のユーザー情報
discord_user メンバーシップ参加者の Discord ユーザー情報
discord_guild メンバーシップ開設者の Discord サーバー情報
discord_guild_member Discord サーバーへの参加情報を格納する中間テーブル

Discord サーバーのデータを保持するテーブル名は下記を参考にして discord_guild としています。

Discord内では、いわゆるグループのことをサーバーと呼ぶが、APIを使ってボットを作るときはGuildと呼ぶことが多い

メンバーシップ開設者側

まずは、メンバーシップ開設者側の Dicord 連携です。メンバーシップ開設者が保有する Discord サーバーと mond を連携させるための処理になります。

全体像

アクセストークンに必要なスコープ

スコープ名 説明 認可画面に表示される文言
identify allows /users/@me without email ユーザー名、アバター画像、バナーにアクセス
guilds allows /users/@me/guilds to return basic information about all of a user's guilds あなたがどのサーバーに入っているか確認します
bot for oauth2 bots, this puts the bot in the user's selected guild by default Bot をサーバーに追加

Bot に与える必要がある権限

権限名 説明 認可画面に表示される文言
CREATE_INSTANT_INVITE Allows creation of instant invites 招待を作成
KICK_MEMBERS Allows kicking members メンバーをキック
MANAGE_CHANNELS Allows management and editing of channels チャンネルの管理
MANAGE_GUILD Allows management and editing of the guild サーバー管理
MANAGE_ROLES Allows management and editing of roles ロールの管理
MANAGE_WEBHOOKS Allows management and editing of webhooks ウェブフックの管理

実際の流れ

1. mond の設定画面から連携を開始する 2. Discord サーバー情報へのアクセスを mond に許可する 3. mond の Bot に与える権限を許可する 4. Bot が Discord サーバーに追加される
1.png 2.png 3.png 4.png

メンバーシップ参加者側

次に、メンバーシップ参加者側の Dicord 連携です。こちらはメンバーシップ参加者の Discord アカウントと mond を連携させるための処理になります。

全体像

アクセストークンに必要なスコープ

スコープ名 説明 認可画面に表示される文言
identify allows /users/@me without email ユーザー名、アバター画像、バナーにアクセス
guilds.join allows /guilds/{guild.id}/members/{user.id} to be used for joining users to a guild サーバーに参加します

実際の流れ

1. mond のメンバーシップを購読開始する 2. Discord アカウント情報へのアクセスを mond に許可する 3. Bot によってDiscord サーバーに追加される
1.png 2.png 3.png

おわりに

今回は mond における Discord 連携の設計に関する記事を書いてみました。
だいぶ端折っているので、年末年始に余裕があれば設計の続きと実装編も書こうと思います。

弊社のアドベントカレンダーで mond に関する記事が他にも公開されていますので、ご興味があれば覗いてみてください。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?