discord.pyとGoogle Drive APIを利用して音楽Botを作った(Dockerでテスト→Herokuにデプロイ)
使用したファイルはここに置いてます(認証関連除く)
2020/08/08追記:コードはこちらに移植しました
基本的に身内で楽しむ用に作りました。
やりたいこと
- discord 上でメッセージを送る
- bot が google drive から曲ファイルを探す
- 見つかったらダウンロードしてボイチャで再生
また、音楽 bot に対して個人的な要件がいくつかあって、
- 自分以外も好きに曲をリクエストできる
- 曲名を正確に把握していなくても、一部さえ入力すれば再生したり候補を表示したりしてほしい
- bot は常に起動させておきたい
これらを満たすために google drive や heroku を利用することになりました。
環境
2020/08/08追記:環境がアップデートされました
- macOS Catalina 10.15.6
- Docker 19.03.5
- discord.py 1.4.0
- Google Drive API v3
ディレクトリ構造
discord-musicbot
├── Procfile
├── citron.py
├── client_secrets.json
├── commands.py
├── requirements.txt
├── runtime.txt
└── token.pickle
discord-musicbot
├── Procfile
├── citron.py
├── client_secrets.json
├── commands.py
├── requirements.txt
├── runtime.txt
└── token.pickle
各ファイルの説明
- citron.py:bot 本体
- commands.py:bot が反応するコマンドの一覧
- client_secrets.json, token.pickle:google drive 認証関連
- Procfile, runtime.txt, requirements.txt:Heroku デプロイに必要
テスト環境構築(Docker コンテナ)
2020/08/08追記:Docker を使わない場合はGitHub の README に使い方の手順を書いているので、そちらをご覧ください
docker pull python:3.7
docker images
# コンテナ作成
docker run -d -it --name python --mount type=bind,source=path/to/mydir,target=/home/ python:3.7
# コンテナに入る
docker exec -it python bash
# 以下コンテナ内の操作
python3 -m pip install -U discord.py
pip install --upgrade google-api-python-client google-auth-httplib2 google-auth-oauthlib
apt update
apt -y upgrade
apt install ffmpeg
必要なものは適宜インストールして最終的にはこうなりました.不要なものも含まれてるだろうけど気にしない。
2020/08/08追記:過不足ないように変更しました
aiohttp==3.6.2
async-timeout==3.0.1
attrs==19.3.0
beautifulsoup4==4.9.1
cachetools==4.1.1
certifi==2020.6.20
cffi==1.14.1
chardet==3.0.4
discord==1.0.1
discord.py==1.4.0
google-api-core==1.22.0
google-api-python-client==1.10.0
google-auth==1.20.1
google-auth-httplib2==0.0.4
google-auth-oauthlib==0.4.1
googleapis-common-protos==1.52.0
httplib2==0.18.1
idna==2.10
multidict==4.7.6
mysqlclient==2.0.1
oauthlib==3.1.0
protobuf==3.12.4
pyasn1==0.4.8
pyasn1-modules==0.2.8
pycparser==2.20
PyNaCl==1.4.0
pytz==2020.1
requests==2.24.0
requests-oauthlib==1.3.0
rsa==4.6
six==1.15.0
soupsieve==2.0.1
uritemplate==3.0.1
urllib3==1.25.10
yarl==1.5.1
youtube-dl==2020.7.28
Discord Bot
https://discordapp.com/developers/applications/
今回は柚に DJ をやってもらいます.
本番環境(Heroku)
# Heroku CLIをインストール
brew install heroku/brew/heroku
heroku login
# アプリケーション作成
heroku create hoge
heroku open
# デプロイ
git init
heroku git:remote -a <herokuのアプリ名>
git add .
git commit -m "first commit"
git push heroku master
# Heroku CLIをインストール
brew install heroku/brew/heroku
heroku login
# アプリケーション作成
heroku create hoge
heroku open
# デプロイ
git init
heroku git:remote -a <herokuのアプリ名>
git add .
git commit -m "first commit"
git push heroku master
こちらを参考にビルドパックを追加。
詰まったところ
あとは公式のドキュメントを見ながら地道に書いたんですが、google drive の認証で詰まったので、変更点だけ載せておきます。
# 変更前
creds = flow.run_local_server(port=0)
# 変更後
creds = flow.run_console()
Docker でテストしてる関係か,ネットワーク関連でうまくいかなかったのかなーと思ったんですが,そちらを解決できず結局変更後のようになりました.もしわかる方がいれば教えていただきたいです.
完成
今後は DB も利用して何かやってみたいですね.(曲の詳細教えてくれるとかリコメンドシステムとか)
おまけ( Heroku アドオン)
- Papertrail:ログ監視用
- Process Scheduler:昼間は使わないのでスリープさせます
参考
Author And Source
この問題について(discord.pyとGoogle Drive APIを利用して音楽Botを作った(Dockerでテスト→Herokuにデプロイ)), 我々は、より多くの情報をここで見つけました https://qiita.com/ysk0832/items/372e5beb80df7f752bb5著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .