DiscordのAPIでサーバーに招待したりサーバーから退出させたりする方法


#使い方
##1.applicationを作成
https://discordapp.com/developers/applications
の右上のNew Applicationで登録
→
General Informationページでclient_idとclient_secretを取得できる

##2.Botアカウントを作成
参考
https://discordpy.readthedocs.io/ja/latest/discord.html

Botアカウントを作成し、アクセストークンを取得。
→
利用するチャンネルにBotを招待し、必要な権限を与える。

##3.APIの呼び出し方

```text:baseURL
https://discordapp.com/api
```
```text:header
{Authorization: Bot 取得したボットトークン}
```
のようにボットトークンをヘッダーで送る。

#APIでできること(一部のみ)

##チャンネル系
###・チャンネル招待リンクURL作成

参考
https://discordapp.com/developers/docs/resources/channel#create-channel-invite

```terminal:API
POST https://discordapp.com/api/channels/{channel.id}/invites
```

```json-doc:bodyパラメータ
{
"max_uses":1,  //招待コードを1回のみ有効にする。
"unique":true  //発行する度に新しい文字列の招待コードを発行する。
} 
```

```json:response
{
"code": "リンクのコード"
"その他":"その他"
}
```

```javascript:招待リンクURL
`https://discord.gg/${responsebody.code}`
```

##サーバー系

###・サーバーから退出させる
**チャンネルから退出させるAPIはなさそう。。。**

Remove Guild Member
https://discordapp.com/developers/docs/resources/guild#remove-guild-member


```terminal:API
DELETE https://discordapp.com/api/guilds/{guild.id}/members/{user.id}
```

###・サーバーに追加する

注）チャンネル自体に登録するAPIはない。
privateチャンネルに登録したければ、サーバーに追加する際にそのチャンネルを閲覧できる権限を与えればよい。


**1.codeの取得**
以下のAPIを呼び出し、画面上でユーザにIDとパスワードを入力してもらう

```text:API
GET https://discordapp.com/api/oauth2/authorize?
client_id=  クライアントID
&redirect_uri= リダイレクトURL
&response_type= code
&scope=guilds.join
```
```text:リダイレクトURL
http://指定したリダイレクトURL?code=　コードの文字列
```

**2.access_tokenの取得**

上記codeを使って以下のAPIを呼びたしアクセストークンを取得する。

```text:API
POST https://discordapp.com/api/v6/oauth2/token
```
```text:header
{Content-Type:application/x-www-form-urlencoded}
```

```:body(multipartで送る？)
{
grant_type:authorization_code,
code: 取得したコード,
redirect_uri: リダイレクトURL,
scope:guilds.join"
}
```
```text:response例
{
  "access_token": "",
  "expires_in": 604800,
  "refresh_token": "",
  "scope": "guilds.join",
  "token_type": "Bearer"
}
```

**3.guildに追加**

Add Guild Member
https://discordapp.com/developers/docs/resources/guild#add-guild-member
注）追加したいギルド内で'CREATE_INSTANT_INVITE'の権限を持つボットのトークンが必要


```text:API
PUT https://discordapp.com/api/guilds/{guild.id}/members/{user.id}
```
```text:header
{Authorization: Bot ボットトークン}
```
```text:body
{
"access_token"(required): 取得したaccess_token,
  "roles": [ロールのID],  　　guild内のロールを付与する
}
```

```json:response例
{
  "user": {
    "id": "",
    "username": "",
    "avatar": null,
    "discriminator": "",
    "public_flags": 0
  },
  "roles": [],
  "nick": null,
  "premium_since": null,
  "mute": false,
  "deaf": false,
  "joined_at": ""
}
```

###・ロールを付与する
Add Guild Member Role
https://discordapp.com/developers/docs/resources/guild#add-guild-member-role

```text:API
PUT　https://discordapp.com/api/guilds/{guild.id}/members/{user.id}/roles/{role.id}
```

###・ロールを剥奪する
Remove Guild Member Role
https://discordapp.com/developers/docs/resources/guild#remove-guild-member-role

```text:API
DELETE　https://discordapp.com/api/guilds/{guild.id}/members/{user.id}/roles/{role.id}
```


##ユーザー
###・ユーザのuserIDを取得する方法

**1.codeを追加**
以下のAPIを呼び出し、画面上でユーザにIDとパスワードを入力してもらう
参考
https://discordapp.com/developers/docs/topics/oauth2#authorization-code-grant

```text:API
GET https://discordapp.com/api/oauth2/authorize?
client_id=  クライアントID
&redirect_uri= リダイレクトURL
&response_type= code
&scope=identify
```
```text:リダイレクトURL
http://指定したリダイレクトURL?code=　コードの文字列
```
**2.アクセストークンを取得**
上記codeを使って以下のAPIを呼びたしアクセストークンを取得する。

```text:API
POST https://discordapp.com/api/v6/oauth2/token
```

```text:header
{Content-Type:application/x-www-form-urlencoded}
```

```text:body
{
grant_type:authorization_code,
code: 取得したコード,
redirect_uri: リダイレクトURL,
scope:identify
}
```
```text:response
{
access_token: トークン
その他:その他
}
```

**3.ユーザー情報を取得**
トークンを用いてget current userAPIでユーザ情報を取得する
参考
https://discordapp.com/developers/docs/resources/user#get-current-user

```text:API
GET https://discordapp.com/api/users/@me
```
```text:header
{Authorization:Bearer 取得したトークン}
```
```text:response
id:ユーザID
その他:その他
```

#モジュールについて
js
https://discord.js.org/#/docs/main/stable/general/welcome

python
https://discordpy.readthedocs.io/ja/latest/