[PYTHON] Disocrd Bot, dass auch Anfänger regelmäßig Splatoon 2 Ergebnisse kostenlos auf stat.ink veröffentlichen können

Einführung

Die Grundidee ist, in der Lage zu sein, einen Zwietracht-Bot ** zu erstellen, der automatisch Splatoons Kampfaufzeichnung auf ** stat.ink hochlädt, unabhängig davon, ob Sie ein PC-Anfänger oder jemand sind, der nur ein Smartphone hat.

** Für diejenigen, die einen Discord-Bot erstellen oder verwenden möchten, der Kampfergebnisse vorerst kostenlos auf stat.ink veröffentlicht, lesen Sie bitte GitHub Repository, wie Sie ihn vorbereiten und verwenden können. Ich habe es ausführlich in READ ME von geschrieben, also bitte dort nachsehen. ** ** **

In diesem Artikel werde ich über einige Ideen zu Discord Bot sprechen, der auf Heroku läuft.

Funktionen von Discord Bot zu erstellen

Probleme und Lösungen

Heroku hat Einschränkungen beim Erstellen und Schreiben von Dateien.

Damit sind zwei Probleme verbunden.

Speicherort von iksm_session

Nach dem Start von Discord Bot ** Sie können iksm_session (Vorbereitung für den automatischen Upload) nur mit der Bot-Funktion erhalten **

Aufgrund der Spezifikationen der obigen Funktion wird iksm_session (genau genommen der Inhalt von config.txt) nach dem Ausführen von bot mit heroku erhalten. Um diese Daten für immer zu speichern, habe ich diesmal die Umgebungsvariablen von Heroku verwendet.

Heroku-Umgebungsvariablen können über den Heroku-Verwaltungsbildschirm festgelegt, aber auch über die REST-API von Heroku aktualisiert werden. Mit anderen Worten, es ist möglich, Umgebungsvariablen aus dem auf Heroku laufenden Bot heraus auszugeben und die Daten kontinuierlich zu speichern **. -> Weitere Informationen Plattform-API-Referenz # config-vars-update

app_name=os.getenv("HEROKU_APP_NAME", "app-splat") #HEROKU_APP_NAME
if app_name=="":
    print("Umgebungsvariable HEROKU_APP_NAME ist nicht definiert.")
    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 wird nach dem Aktualisieren der Umgebungsvariablen einmal neu gestartet. Beachten Sie außerdem, dass ** Heroku-Umgebungsvariablen nur bis zu insgesamt 32 KB ** verwendet werden können.

Position von config.txt beim Hochladen des Kampfdatensatzes

splatnet2statink.py setzt voraus, dass sich config.txt mit iksm_session usw. im selben Verzeichnis befindet. Schreiben Sie "config_path" neu.

Unter der Annahme eines lokalen Experiments wird die Umgebungsvariable abhängig vom Vorhandensein oder Fehlen von "os.getenv (" DYNO ")", das in Heroku standardmäßig festgelegt ist, ordnungsgemäß verwendet.

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

Weitere Probleme sind:

Aus irgendeinem Grund wird json.loads () zu einem String

Ich habe das in einem anderen Artikel geschrieben. -> Problem mit Python json.loads (), das str in Heroku zurückgibt Da es sich möglicherweise nicht um eine Zeichenfolge handelt, versuchen wir derzeit, den Typ zu bestimmen.

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, dass auch Anfänger regelmäßig Splatoon 2 Ergebnisse kostenlos auf stat.ink veröffentlichen können
Wie man einen Janken-Bot macht, der leicht bewegt werden kann (Kommentar)
Erstellen Sie einen Discord Bot, der Bilder suchen und einfügen kann
Hinweise zum Erstellen von Zahlen, die mit matplotlib in Zeitschriften veröffentlicht werden können
Automatischer Browser-Betrieb, den auch Anfänger ausführen können