L'idée de base est de pouvoir créer un robot discord ** qui télécharge automatiquement le record de bataille de Splatoon sur ** stat.ink, que vous soyez un débutant sur PC ou quelqu'un qui n'a qu'un smartphone.
** Pour ceux qui souhaitent créer ou utiliser un Discord Bot qui publie gratuitement les résultats de la bataille sur stat.ink pour le moment, veuillez consulter GitHub Repository pour savoir comment le préparer et l'utiliser. Je l'ai écrit en détail dans le LISEZ-MOI de, donc veuillez vérifier ici. ** **
Dans cet article, je vais parler de quelques idées sur Discord Bot qui fonctionne sur Heroku.
splatnet2stat.py
.
--Après avoir démarré le bot discord ** Vous ne pouvez obtenir iksm_session (préparation pour le téléchargement automatique) qu'avec la fonction bot **
--Tous les travaux peuvent être effectués ** avec juste un smartphone, y compris la préparation au démarrage du bot (bien qu'il soit plus pratique d'utiliser un PC)Heroku a des restrictions sur la création et l'écriture de fichiers.
/ tmp
que pour créer des fichiers temporaires. (* Le fichier d'origine se trouve sous / app
.)/ tmp
est également réinitialisé à intervalles réguliers (jusqu'à 24 heures).Il y a deux problèmes associés à cela.
Après avoir démarré discord bot ** Vous pouvez obtenir iksm_session (préparation pour le téléchargement automatique) uniquement avec la fonction bot **
En raison des spécifications de la fonction ci-dessus, iksm_session (à proprement parler, le contenu de config.txt) est obtenu après l'exécution du bot avec heroku. Afin de sauvegarder ces données pour toujours, j'ai utilisé cette fois les variables d'environnement de Heroku.
Les variables d'environnement Heroku peuvent être définies à partir de l'écran d'administration Heroku, mais peuvent également être mises à jour à partir de l'API REST de Heroku. En d'autres termes, il est possible de générer des sorties vers des variables d'environnement à partir du Bot s'exécutant sur Heroku et de sauvegarder les données en continu **. -> Pour plus d'informations Platform API Reference # config-vars-update
app_name=os.getenv("HEROKU_APP_NAME", "app-splat") #HEROKU_APP_NAME
if app_name=="":
print("Variable d'environnement HEROKU_APP_NAME n'est pas défini.")
return
patch_url = f"https://api.heroku.com/apps/{app_name}/config-vars"
headers= {"Authorization": f"Bearer {os.getenv('HEROKU_APIKEY')}",
"Content-Type":"application/json",
"Accept":"application/vnd.heroku+json; version=3"}
res=requests.patch(patch_url, headers=headers, json=new_envs)
Dyno sera redémarré une fois après la mise à jour des variables d'environnement. Notez également que ** les variables d'environnement Heroku ne peuvent être utilisées que jusqu'à un total de 32 Ko **.
splatnet2statink.py
suppose que config.txt avec iksm_session etc. se trouve dans le même répertoire.
En l'état, réécrivez config_path
.
De plus, en supposant une expérience en local, la variable d'environnement est utilisée correctement selon la présence ou l'absence de os.getenv (" DYNO ")
qui est défini par défaut dans Heroku.
splatnet2statink
## splatnet2statink/iksm.py
config_path="/tmp/config.txt" if os.getenv("DYNO", False) else f"{os.path.dirname(__file__)}/../tmp/config.txt"
## splatnet2statink/splatnet2statink.py
config_path=iksm.config_path
D'autres problèmes incluent:
J'ai écrit ceci dans un autre article. -> Problème avec Python json.loads () renvoyant str dans Heroku Puisqu'il ne s'agit peut-être pas d'une chaîne, nous essayons actuellement de déterminer le type.
Heroku
loaded_tmp=json.loads(dumped_string)
loaded_dict=eval(loaded_tmp) if (loaded_tmp)==str else loaded_tmp
GitHub Repository
Recommended Posts