LoginSignup
8
8

More than 3 years have passed since last update.

discord.pyとGoogle Drive APIを利用して音楽Botを作った(Dockerでテスト→Herokuにデプロイ)

Last updated at Posted at 2020-01-28

使用したファイルはここに置いてます(認証関連除く)
2020/08/08追記:コードはこちらに移植しました
基本的に身内で楽しむ用に作りました。

やりたいこと

  1. discord 上でメッセージを送る
  2. bot が google drive から曲ファイルを探す
  3. 見つかったらダウンロードしてボイチャで再生

Untitled Diagram.png

また、音楽 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

各ファイルの説明

  • 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追記:過不足ないように変更しました

requirements.txt
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 をやってもらいます.
スクリーンショット 2020-01-28 2.14.27.png

本番環境(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

こちらを参考にビルドパックを追加。スクリーンショット 2020-01-28 3.06.39.png

詰まったところ

あとは公式のドキュメントを見ながら地道に書いたんですが、google drive の認証で詰まったので、変更点だけ載せておきます。

# 変更前
creds = flow.run_local_server(port=0)

# 変更後
creds = flow.run_console()

Docker でテストしてる関係か,ネットワーク関連でうまくいかなかったのかなーと思ったんですが,そちらを解決できず結局変更後のようになりました.もしわかる方がいれば教えていただきたいです.

完成

こんな感じで動作します.
スクリーンショット 2020-01-28 22.53.10.png

スクリーンショット 2020-01-28 22.54.28.png

今後は DB も利用して何かやってみたいですね.(曲の詳細教えてくれるとかリコメンドシステムとか)

おまけ( Heroku アドオン)

  • Papertrail:ログ監視用
  • Process Scheduler:昼間は使わないのでスリープさせます

参考

8
8
5

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
8
8