pycordで作成したdiscord botのトークンをenvファイルに保存して、githubにpushしよう

# はじめに
前回の記事で[pycordを使ったdiscord botの作成記事](https://qiita.com/maooz4426/items/2c39929756af5541648f)を書いたのですが、discordbotのアカウントトークンを直書きしていました。
これをGitでpushすると、、、


```
git push origin main
Enumerating objects: 8, done.
Counting objects: 100% (8/8), done.
Delta compression using up to 8 threads
Compressing objects: 100% (6/6), done.
Writing objects: 100% (6/6), 1.02 KiB | 1.02 MiB/s, done.
Total 6 (delta 1), reused 0 (delta 0), pack-reused 0
remote: Resolving deltas: 100% (1/1), completed with 1 local object.
remote: error: GH013: Repository rule violations found for refs/heads/main.
remote:
remote: - GITHUB PUSH PROTECTION
remote:   —————————————————————————————————————————
remote:     Resolve the following violations before pushing again
remote:
remote:     - Push cannot contain secrets
remote:
remote:
remote:      (?) Learn how to resolve a blocked push
remote:      https://docs.github.com/code-security/secret-scanning/pushing-a-branch-blocked-by-push-protection
remote:
remote:
remote:       —— Discord Bot Token —————————————————————————————————
remote:        locations:
remote:          - commit: 45004e35db27dbc13e04410a292de8a588550f2d
remote:            path: main.py:5
remote:
remote:        (?) To push, remove secret from commit(s) or follow this URL to allow the secret.
remote:        https://github.com/maooz4426/pycord-hello/security/secret-scanning/unblock-secret/2g88va6BkOfhqBS7zbdd6nuZm4H
remote:
remote:
remote:
To https://github.com/maooz4426/pycord-hello.git
 ! [remote rejected] main -> main (push declined due to repository rule violations)
error: failed to push some refs to 'https://github.com/maooz4426/pycord-hello.git'
```

長々とこんなエラーが出てしまいます。
エラーを読んでみると
```
remote:       —— Discord Bot Token —————————————————————————————————
remote:        locations:
remote:          - commit: 45004e35db27dbc13e04410a292de8a588550f2d
remote:            path: main.py:5
remote:
remote:        (?) To push, remove secret from commit(s) or follow this URL to allow the secret.
remote:        https://github.com/maooz4426/pycord-hello/security/secret-scanning/unblock-secret/2g88va6BkOfhqBS7zbdd6nuZm4H
```

と書いてあります。
これはgithubがデフォルトでトークンなどの秘密の情報が含まれていたら、公開できないように警告を出してくれるというクソありがたい機能によってエラーが吐かれてしまっていました。

::: note
[こちらの記事](https://trends.codecamp.jp/blogs/media/news266#:~:text=%E3%81%97%E3%81%A6%E3%81%84%E3%81%BE%E3%81%99%E3%80%82-,GitHub%E3%81%AE%E3%83%97%E3%83%83%E3%82%B7%E3%83%A5%E4%BF%9D%E8%AD%B7%E6%A9%9F%E8%83%BD%E3%81%8C%E9%96%8B%E7%99%BA%E8%80%85%E3%81%AE%E5%AE%89%E5%85%A8,%E3%81%A7%E3%81%8D%E3%82%8B%E3%82%88%E3%81%86%E3%81%AB%E3%81%AA%E3%81%A3%E3%81%9F%E3%80%82z)から参照しました。
:::

ですが、このままだとgithubでdiscord botのコードが共有できないので困りますよね（僕は困ったので、頷いてもらえると）

なので、今回はトークンを環境変数として設定してgithubにpushできるようにしてみようと思います。

# .envファイルの準備

.envファイルとは、コードで使う環境変数を保存しておくテキストファイルです。

:::note 
##### 環境変数とは
コンピューター上において、プログラムで使う値を入れておく名前のついた箱のようなものです
:::

.envファイルには、以下のような情報を書きます

```
TOKEN = "your_discord_bot_token"
```

::: note warn
例えばトークンがABCだったら"your_discord_bot_token"を"ABC"に書き換えてください
:::

# .envファイルの読み込み

.envファイルを読み込むためにosとdotenvをインポートします。
osは標準ライブラリで最初からimportできるので、dotenvをpipinstallします。

```
pip install python-dotenv
```

::: note warn
pip install dotenvではありません、気をつけてください。
:::

インストールし終わったら、main.pyで以下のコードを書いていきます。

```
import discord
import os
from dotenv import load_dotenv

load_dotenv()  # これにより .env ファイルが読み込まれる



# アクセストークンを設定
TOKEN = os.getenv("TOKEN") 


#インテントを取得
intents = discord.Intents.all()

#botの設定
bot = discord.Bot(command_prefix='!',intents=intents)


#起動するとターミナルに表示
@bot.event
async def on_ready():
    print("ready!")

# pycordがメッセージを受け取ったら実行されるイベントハンドラ
@bot.event
async def on_message(message: discord.Message):
    
    # メッセージが"hello"だった場合、"Hello!"と返信する
    if message.content == 'hello':
        await message.reply("Hello!")

#botの起動
bot.run(TOKEN)
```

dotenvモジュールのload_dotenvメソッドを使って、.envファイルを読み込みます。
そして、osモジュールのgetenvメソッドで環境変数を取得します。

:::note
getenvメソッドはenviron.getでも可能です、ただ違いがよくわからなかったので、またの機会に調べます
:::

これで起動してみると

![スクリーンショット 2024-05-07 17.45.22.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3766230/d5f0a03d-f755-1b59-1b45-f9d95deaebf6.png)

できました！

:::note
起動しているbotの作り方は[こちら](https://qiita.com/maooz4426/items/2c39929756af5541648f)を参照してください
:::

# gitにpushしてみる

　リポジトリにpushしてみます
 
```
git push origin main
Enumerating objects: 4, done.
Counting objects: 100% (4/4), done.
Delta compression using up to 8 threads
Compressing objects: 100% (3/3), done.
Writing objects: 100% (3/3), 748 bytes | 748.00 KiB/s, done.
Total 3 (delta 0), reused 0 (delta 0), pack-reused 0
To https://github.com/maooz4426/pycord-hello.git
   23f2a95..bb84045  main -> main
```
できました！

# 最後に
大事な情報は環境変数に設定して、githubとかに上げないように気をつけないとですね

作った　botのリポジトリ⇩

https://github.com/maooz4426/pycord-hello