Pycordチュートリアル

## 初めに
Discordのボット開発は一般的にdiscord.pyを用いられていますが、個人的にPycordのほうが使いやすいと思ったのでそちらの環境構築から実際に動作するまでを書いていきます。

私自身勉強しながら書いていたので、説明が不正確だったり不足している可能性があることをご了承ください。


開発は**VSCode**を使っていきます

## 1.環境構築

まずはライブラリをインストールしていきます。

```console
$　pip install py-cord
```

以下の画像のような文章が出力されたらインストールに成功です。
![WindowsTerminal_BvXRCEseCh.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1840949/1b51ee29-30bd-eaab-d10a-bd7d9a57a664.png)

## 2.Botの作成
### アカウントの作成

次にボットを作成していきます。

Discordのデベロッパーポータルでサインインしてください。

https://discord.com/developers/applications

サインインに成功すると右上に**New Application**というボタンがあるので、そこをクリックするとBotの名前が決められます。

利用規約とポリシーに同意して作成すると**General Information**という画面が現れます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1840949/d8ea01f0-20c1-5342-ffea-57af91485908.png)

### トークンの取得
トークンとはプログラムが今作成したアカウントを認証するのに必要なコードです。

左上のメニューから**Bot**に移動してください。
そしたら以下のような画像の画面が現れます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1840949/b385ac2b-9acd-00c0-b5fc-aa1823b06834.png)

USERNAMEの欄には先ほど入力した名前が表示されているはずです。
その下に**Reset Token**というボタンがあります。
ここからトークンを取得していきます。

クリックするとトークンが表示されます。
このトークンは**絶対に**公開しないでください。

このトークンは後程使いますので、どこかにメモしておいてください。

### 導入
サーバーに今作成したボットを導入していきます。

左上のメニューからOAuth2→URL Generatorに移動してください。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1840949/150628d0-faa6-0b47-1099-765b213f9751.png)

ここでスコープと権限を設定していきます。

今回作成するボットは一般公開を想定していないのでSCOPESはbot BOTPERMISSIONSはAdministratorにします。
権限は目的に応じて変更してください。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1840949/a4e9f154-3043-d896-f6e2-01d6d066bb09.png)

設定に完了すると一番下にURLが生成されます。
それをコピーしてブラウザで検索しましょう

そうすると導入するサーバーを選択することができるので開発用サーバーを選択して**はい**を押しましょう。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1840949/1bbd1b54-5fc2-67c0-92fd-eb1e46704bb7.png)

サーバーからボットが無事に導入されていることを確認したらこちらでの作業はおしまいです。

## 3.開発
### コード
今回は ```/test```と入力するとボットが```test```と返してくる機能を追加します。

コードは以下の通りです。
```python
import discord

bot = discord.Bot()
token = 'トークン'

@bot.event
async def on_ready():
    print('起動しました。')

@bot.slash_command()
async def test(ctx):
    await ctx.respond("test")

bot.run(token)
```
### 解説
#### ライブラリ・トークン

上から説明していきます。
```python
import discord
```
ここではpycordのライブラリを取り込んでいます。

この１文を忘れるとボットを起動したり、機能を追加することができません。

```python
bot = discord.Bot()
token = 'トークン'
```

ここではクラスとトークンを代入しています。
トークンのところには先ほどメモしておいたトークンを入れてください。

#### 起動確認

```python
@bot.event
async def on_ready():
    print('起動しました。')
```
この部分はボットの起動確認を行います。
ボットが起動に成功すると、ターミナルに以下のように表示されます。
```console
起動しました。
```

また、@の部分はデコレーターと呼ばれます。
これは機能を追加したりするために必須な部分で、うまく動作しないときはこれを忘れている可能性があります。

#### コマンド
```python
@bot.slash_command()
async def test(ctx):
    await ctx.respond("test")
```

ここでコマンドを追加しています。
**/** の後のコマンド部分の指定はデフォルトでは関数名になっています。
もし変更したい場合は
```python
@bot.slash_command(name = 'hello')
```
このようにnameにコマンドを代入してください。

また、Discordのボットはネットワークを介して動作するので、非同期処理が必須となります。
```python
async
await
```
上のコードは非同期処理をするためのキーワードで**async**は関数の前に付けることで、非同期関数として定義することができます。

**await**は非同期関数内で使用され、非同期処理の結果を待つために使用されます。

```python
await ctx.respond("test")
```
ここでコマンドを受け取ったチャンネルにメッセージを送信しているので**await**が必須となっています。

#### 起動
```python
bot.run(token)
```
ここでボットを起動しています。runメソッドの中ではトークンを入れており、これがないと起動しません。

## 4.動作確認
無事に起動が完了すると、サーバー内でボットがオンラインになっています。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1840949/902e3643-fb67-d036-9ef8-2ba45dd3963c.png)

```/test```と打って無事に```test```と帰ってきたら成功です。サーバーにコマンドが反映されるまでに少し時間がかかります。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1840949/de85fe0c-2c9f-8d2d-b9fc-66956afe91c5.png)

## 終わりに

基本的な開発はこんな流れになります。
pycordの公式ドキュメントを見て、何ができるか試してみるといいと思います。


https://docs.pycord.dev/en/stable/index.html