[PYTHON] Disocrd bot que même les débutants peuvent publier régulièrement les résultats de Splatoon 2 sur stat.ink gratuitement

introduction

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.

Fonctions de discord bot à créer

Problèmes et solutions

Heroku a des restrictions sur la création et l'écriture de fichiers.

Il y a deux problèmes associés à cela.

Emplacement de iksm_session

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 **.

Position de config.txt lors du téléchargement de l'enregistrement de bataille

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:

Pour une raison quelconque, json.loads () devient une chaîne

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

Disocrd bot que même les débutants peuvent publier régulièrement les résultats de Splatoon 2 sur stat.ink gratuitement
8 services que même les débutants peuvent apprendre Python (des débutants aux utilisateurs avancés)
Comment créer un bot Janken qui peut être facilement déplacé (commentaire)
Créez un Discord Bot qui peut rechercher et coller des images
Notes pour créer des figures pouvant être publiées dans des revues avec matplotlib
Fonctionnement automatique du navigateur que même les débutants peuvent faire