はじめに
前回の記事でpycordを使ったdiscord botの作成記事を書いたのですが、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がデフォルトでトークンなどの秘密の情報が含まれていたら、公開できないように警告を出してくれるというクソありがたい機能によってエラーが吐かれてしまっていました。
こちらの記事から参照しました。
ですが、このままだとgithubでdiscord botのコードが共有できないので困りますよね(僕は困ったので、頷いてもらえると)
なので、今回はトークンを環境変数として設定してgithubにpushできるようにしてみようと思います。
.envファイルの準備
.envファイルとは、コードで使う環境変数を保存しておくテキストファイルです。
.envファイルには、以下のような情報を書きます
TOKEN = "your_discord_bot_token"
例えばトークンがABCだったら"your_discord_bot_token"を"ABC"に書き換えてください
.envファイルの読み込み
.envファイルを読み込むためにosとdotenvをインポートします。
osは標準ライブラリで最初からimportできるので、dotenvをpipinstallします。
pip install python-dotenv
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メソッドで環境変数を取得します。
getenvメソッドはenviron.getでも可能です、ただ違いがよくわからなかったので、またの機会に調べます
これで起動してみると
できました!
起動しているbotの作り方はこちらを参照してください
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のリポジトリ⇩