18
12

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

CAMPFIREAdvent Calendar 2021

Day 19

DiscordのAPIをちょっと触ってみる

Posted at

🎄🎄この記事は、2021年CAMPFIRE Advent Calendar 19日目の記事です🎄🎄

こんにちは、CAMPFIREコミュニティのエンジニアのmoriです。
今回はDiscordのAPIを少し触って見ようと思います!

実行環境

cURL

今回の目標

  • botでサーバーを作成する
  • メンバーを参加/退会させる

とりあえずアプリケーションとBotの作成

Discordアカウントでログイン後
https://discord.com/developers/applications
こちらにアクセスして、「New Application」からアプリケーションを作ります。
スクリーンショット 2021-12-19 21.21.10.png

次にBotを「Bot」メニューから作成していきます。
スクリーンショット 2021-12-19 21.22.47.png
USERNAMEはDiscordサーバーに追加されるユーザー名になるので、Botとわかる名前にしていたら親切かなと思いました。
スクリーンショット 2021-12-19 21.26.06.png

こちらの画面で、BotのTOKENを「Copy」ボタンからコピーして控えておきます。
以後この値は${BOT_TOKEN}と表記します。

Botでサーバーの作成

今回公式ドキュメントを読むにあたって最初に戸惑ったのが、RESOURCESの中にServerがいないというところでした。
読み進めていくと、Guildが表でのServerにあたるようです。
ドキュメントはこちら↓

 curl -i -X POST \
   -H "Authorization:Bot ${BOT_TOKEN}" \
   -H "Content-Type:application/json" \
   -d \
'{
  "name": "テストサーバー",
  "type": 0
}' \
 'https://discordapp.com/api/guilds'

※ Authorization: Bot ~ は引っかかりました。(Not Bearer)

{"id": "********", "name": "\u30c6\u30b9\u30c8\u30b5\u30fc\u30d0\u30fc", "icon": null, ....

実行結果のJsonのidが作成されたGuild IDです。こちらもコピーして控えておきます。(以下${GUILD_ID})

メンバーを参加/退会させる

とりあえずドキュメントから見ていきます。

Adds a user to the guild, provided you have a valid oauth2 access token for the user with the guilds.join scope.

guilds.joinのScopeのあるoauth2のアクセストークンが必要とのことなのでoauth2の準備をします。

Application画面のOAuth2メニューから「General」を開きます。
スクリーンショット 2021-12-19 22.11.52.png
こちらの画面から「CLIENT ID」(以下${CLIENT_ID})、「CLIENT SECRET
」(以下${CLIENT_SECRET})をコピーして控えておきます。

その後、「Add Redirect」からRedirectURLを追加します。
スクリーンショット 2021-12-19 22.15.30.png

今回は特にWebアプリケーションを作るわけではないので、ローカルの適当なURLに飛ばすことにします。
こちらのURLも必要になるため、控えておきましょう(以下${REDIRECT_URL})

次は「URL Generator」を開きます。

以下のSCOPESを選択します。

identify
connections
guilds.join

SELECT REDIRECT URLは先程追加したURLを選択します。

選択が完了するとGENERATED URLにURLが作成されるので、コピーしてブラウザでアクセスします。

スクリーンショット 2021-12-19 22.22.05.png

認証を押すと先程のREDIRECT_URLに遷移するのでURLからcodeのパラメーターの値を控えます。(以下${CODE}
※CODEの有効期限は短いので注意

http://localhost/callback?code=************

ここまでに用意したものを組み合わせてAccessTokenを取得します

curl -i -X POST \
   -H "Content-Type:application/x-www-form-urlencoded" \
   -d "client_id=${CLIENT_ID}" \
   -d "client_secret=${CLIENT_SECRET}" \
   -d "grant_type=authorization_code" \
   -d "code=${CODE}" \
   -d "redirect_uri=${REDIRECT_URL}" \
 'https://discordapp.com/api/oauth2/token'

結果

{"access_token": "********", "expires_in": 604800, "refresh_token": ""********",", "scope": "identify connections guilds.join", "token_type": "Bearer"}

AccessTokenも控えます(以下${ACCESS_TOKEN})

次はAccessTokenを使ってユーザーIDを取得します。
https://discord.com/developers/docs/resources/user#get-user

curl -i -X GET \
   -H "Authorization:Bearer ${ACCESS_TOKEN}" \
 'https://discordapp.com/api/users/@me'

結果

{"id": "*********", "username": "***", "avatar": "***********", "discriminator": "9484", "public_flags": 0, "flags": 0, "banner": null, "banner_color": null, "accent_color": null, "locale": "ja", "mfa_enabled": false}

idをUSER IDとして控えます(以下${USER_ID}

必要なものは揃ったので、Add Guild Memberに戻ってユーザーを追加・削除してみます。

メンバー参加

curl -i -X PUT \
   -H "Authorization:Bot ${BOT_TOKEN}" \
   -H "Content-Type:application/json" \
   -d \
'{"access_token": "${ACCESS_TOKEN}"}' \
 'https://discordapp.com/api/guilds/${GUILD_ID}/members/${USER_ID}'

メンバー退会

curl -i -X DELETE \
   -H "Authorization:Bot ${BOT_TOKEN}" \
 'https://discordapp.com/api/guilds/${GUILD_ID}/members/${USER_ID}'

感想

まとめ終わらなかったのですが、他にもチャンネル追加やスケジュールイベントなども触ってみました。
サーバー作成については1Botにつき10個までなので、実際にサービスで活用する際には設計で考慮しておかないと厳しい制限ですね。
でも想像以上にできることが多く、さすがDiscordだなと思いました。

今回はお試しでしたが、CAMPFIREコミュニティではDiscordでコミュニティ運営されているオーナー様も多いため、なにかサービスとつなげていけたらなと思っています。

以上、明日のアドベントカレンダーも楽しみにされていてください!

18
12
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
18
12

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?