[PYTHON] J'ai créé un robot musical en utilisant discord.py et l'API Google Drive (testé avec Docker → déployé sur Heroku)

Le fichier utilisé est placé dans ici (hors authentification) En gros, je l'ai fait pour que mes proches puissent en profiter.

Chose que tu veux faire

  1. Envoyez un message sur Discord
  2. le bot recherche les fichiers de chansons sur Google Drive
  3. Si trouvé, téléchargez et jouez avec la voix

Untitled Diagram.png

En outre, il existe deux exigences personnelles pour le robot musical,

――Vous pouvez demander des chansons comme vous le souhaitez, à part vous-même

J'ai décidé d'utiliser google drive et heroku pour répondre à ces exigences.

environnement

Structure du répertoire

.
├── Procfile
├── citron.py
├── client_secrets.json
├── commands.py
├── requirements.txt
├── runtime.txt
└── token.pickle

Description de chaque fichier

--citron.py: corps du bot --commands.py: Liste des commandes auxquelles le bot répond --client_secrets.json, token.pickle: lié à l'authentification Google Drive --Procfile, runtime.txt, requirements.txt: requis pour le déploiement Heroku

Construction de l'environnement de test (conteneur Docker)

docker pull python:3.7
docker images
#Création de conteneurs
docker run -d -it --name python --mount type=bind,source=path/to/mydir,target=/home/ python:3.7

#Entrez dans le conteneur
docker exec -it python bash

#Les opérations suivantes dans le conteneur
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

J'ai installé ce dont j'avais besoin au besoin, et finalement c'est devenu comme ça. Je m'en fiche bien qu'il puisse contenir des choses inutiles.

requirements.txt


aiohttp==3.6.2
async-timeout==3.0.1
attrs==19.3.0
cachetools==4.0.0
certifi==2019.11.28
cffi==1.13.2
chardet==3.0.4
discord.py==1.3.0
google-api-python-client==1.7.11
google-auth==1.11.0
google-auth-httplib2==0.0.3
google-auth-oauthlib==0.4.1
httplib2==0.17.0
idna==2.8
multidict==4.7.4
oauth2client==4.1.3
oauthlib==3.1.0
pyasn1==0.4.8
pyasn1-modules==0.2.8
pycparser==2.19
PyDrive==1.3.1
PyNaCl==1.3.0
PyYAML==5.3
requests==2.22.0
requests-oauthlib==1.3.0
rsa==4.0
six==1.14.0
uritemplate==3.0.1
urllib3==1.25.8
websockets==8.1
yarl==1.4.2
youtube-dl==2020.1.24

Discord Bot https://discordapp.com/developers/applications/ Cette fois, je vais demander à Yuzu de faire du DJ. スクリーンショット 2020-01-28 2.14.27.png

Environnement de production (Heroku)

#Installez Heroku CLI
brew install heroku/brew/heroku

heroku login
#Création d'applications
heroku create hoge
heroku open
#Déployer
git init
heroku git:remote -a <nom de l'application heroku>
git add .
git commit -m "first commit"
git push heroku master

Ajout du pack de construction faisant référence à ici. Capture d'écran 2020-01-28 3.06.39.png

Où ça se coince

Après cela, je l'ai écrit régulièrement en regardant le document officiel, mais comme il était obstrué par l'authentification Google Drive, je publierai uniquement les modifications.

#Changer avant
creds = flow.run_local_server(port=0)

#Après le changement
creds = flow.run_console()

Je me demandais si cela était lié à des tests avec Docker ou à quelque chose lié au réseau, mais je ne pouvais pas le résoudre et cela a fini par être après le changement. Si quelqu'un sait, faites-le moi savoir.

Achevée

Cela fonctionne comme ça. スクリーンショット 2020-01-28 22.53.10.png

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

J'aimerais faire quelque chose en utilisant DB à l'avenir. (Dites-moi les détails de la chanson, le système de recommandation, etc.)

Bonus (module complémentaire Heroku)

--Paterrail: pour la surveillance des journaux

référence

Recommended Posts

J'ai créé un robot musical en utilisant discord.py et l'API Google Drive (testé avec Docker → déployé sur Heroku)
J'ai essayé de faire LINE BOT avec Python et Heroku
Transférer vers un Drive partagé avec l'API Google Drive V3
J'ai créé Chatbot en utilisant l'API LINE Messaging et Python
J'ai créé un formulaire de tweet Nyanko avec Python, Flask et Heroku
J'ai créé un bot Twitter avec Go x Qiita API x Lambda
J'ai créé Chatbot en utilisant l'API LINE Messaging et Python (2) ~ Server ~
J'ai essayé d'utiliser l'API Google avec Ruby et Python - Faites de la base de données une feuille de calcul et gérez-la avec Google Drive
J'ai essayé de créer un LINE BOT "Sakurai-san" avec API Gateway + Lambda
J'ai fait un robot de remplacement de tampon avec une ligne
Trois choses auxquelles j'étais accro lors de l'utilisation de Python et MySQL avec Docker
J'ai créé un Bot LINE avec Serverless Framework!
J'ai créé un système qui décide automatiquement de s'exécuter demain avec Python et l'ajoute à Google Agenda.
J'ai essayé de créer une API de reconnaissance d'image simple avec Fast API et Tensorflow
Made Mattermost Bot avec Python (+ Flask)
J'ai essayé de notifier la mise à jour de "Devenir romancier" en utilisant "IFTTT" et "Devenir un romancier API"
J'ai créé un programme pour convertir des images en art ASCII avec Python et OpenCV
[AWS] J'ai créé un BOT de rappel avec LINE WORKS
J'ai fait un Twitter BOT avec GAE (python) (avec une référence)
J'ai créé un bot de livre de compte de ménage avec LINE Bot
J'ai créé un serveur syslog prêt à l'emploi avec Play with Docker
Comment analyser avec Google Colaboratory à l'aide de l'API Kaggle
J'ai créé un serveur avec socket Python et ssl et j'ai essayé d'y accéder depuis le navigateur
Je veux faire un changeur de voix en utilisant Python et SPTK en référence à un site célèbre
Comment déployer une application Web créée avec Flask sur Heroku
Un simple lecteur de musique interactif fait avec Chuck et OpenPose
J'ai créé un package pour filtrer les séries chronologiques avec python
Jusqu'à ce que l'API créée par Flask + MySQL soit convertie en Docker
[AWS] J'ai créé un BOT de rappel avec LINE WORKS (implémentation)
J'ai fait un robot discord
J'ai créé un bot LINE qui me dit le type et la force de Pokémon dans la région de Garal avec Heroku + Flask + PostgreSQL (Heroku Postgres)
J'ai créé une bibliothèque qui lit facilement les fichiers de configuration avec Python
Une histoire sur l'ajout d'une API REST à un démon créé avec Python
J'ai créé un serveur Web avec Razpai pour regarder des anime
Obtenez des conversions et des revenus avec l'API Google Analytics et faites un rapport à Slack
J'ai essayé de faire un processus d'exécution périodique avec Selenium et Python
Créez facilement un TalkBot en utilisant Discord.py et l'API Talk d'A3RT (pya3rt).
[Introduction] Je veux créer un robot Mastodon avec Python! 【Débutants】
J'ai essayé de créer des taureaux et des vaches avec un programme shell
Je veux créer un fichier pip et le refléter dans le menu fixe
J'ai essayé de créer une application todo en utilisant une bouteille avec python
J'ai créé un environnement de développement pour Django 3.0 avec Docker, Docker-compose, Poetry
J'ai créé un chat-holdem de serveur de jeu de poker en utilisant websocket avec python
[Python] J'ai écrit une API REST en utilisant AWS API Gateway et Lambda.
J'ai créé un chat chat bot avec Tensor2Tensor et cette fois cela a fonctionné
J'ai essayé d'utiliser l'API de reconnaissance vocale docomo et l'API Google Speech en Java
J'ai créé un robot pour publier sur Twitter en grattant sur le Web un site dynamique avec AWS Lambda (suite)
J'ai fait un Line-bot avec Python!
J'ai fait un wikipedia gacha bot
J'ai fait une loterie avec Python.
J'ai créé un démon avec Python
J'ai créé un conteneur Docker pour utiliser JUMAN ++, KNP, python (pour pyKNP).
J'ai créé un outil pour parcourir automatiquement plusieurs sites avec Selenium (Python)
[Django] a créé un champ pour saisir des dates avec des nombres à 4 chiffres
J'ai écrit un diagramme de configuration du système avec des diagrammes sur Docker
J'ai essayé de convertir la chaîne datetime <-> avec tzinfo en utilisant strftime () et strptime ()
L'histoire de l'abandon d'essayer de se connecter à MySQL en utilisant Heroku