[PYTHON] [Neueste Version] Lassen Sie den Bot in regelmäßigen Abständen mit discord.py sprechen

Überblick

Ich werde erklären, wie ein Bot mit discord.py, einem Python Discord API-Wrapper, mit dem Sie einen Bot im Chat-Tool Discord präzise schreiben können, eine regelmäßige Verarbeitung durchführt.

Hinweis

Das Codebeispiel funktionierte nicht wirklich. Das Codebeispiel wurde am 10. April 2020 überarbeitet.

Annahme

Hinweise zur Version

discord.py wurde lange Zeit mit ver0.16.12 (sogenannte asynchrone Version) geliefert, aber v1.0.0 (sogenannte Rewrite-Version) wurde im April 2019 veröffentlicht und die v0-Serie wird nicht mehr zur Verwendung empfohlen. Ist nicht ... Tatsächlich unterstützt die v0-Serie Python 3.7 oder höher nicht und zukünftige Updates und Wartungen können nicht erwartet werden. Wir empfehlen, dass Sie die neueste Version so weit wie möglich unterstützen. Weitere Informationen zur regelmäßigen Verarbeitung in der v0-Serie finden Sie im folgenden Artikel.

Lassen Sie den Bot in regelmäßigen Abständen auf discord.py sprechen [asynchrone Version]

Methode

Verwenden Sie "Aufgaben", eine Erweiterung von "discord.py". Dies ist eine Bibliothek, die sich auf die wiederholte Ausführung konzentriert und häufig in der Bot-Entwicklung verwendet wird. Der iterative Prozess kann sehr kurz beschrieben werden. Offizielles Dokument

Grundsätzlich in der Zeile über der Methode, die Sie regelmäßig ausführen möchten Nach dem Hinzufügen von "@ task.loop ([Ausführungsintervall])" wird "start ()" zu dem Zeitpunkt ausgeführt, zu dem Sie die periodische Ausführung starten möchten.

Schauen wir uns im nächsten Abschnitt ein konkretes Beispiel an.

Konkretes Beispiel

Das Folgende ist ein Beispiel für die regelmäßige Ausführung alle 10 Sekunden unmittelbar nach dem Starten des Bots auf dem Kanal mit der zuvor angegebenen ID.

from discord.ext import tasks
import discord

client = discord.Client()

channel_sent = None
"""
Der Teil, der die Methode definiert, die alle 10 Sekunden spricht.
Eine Zeile über async def zeigt die periodische Ausführung an.()Geben Sie das Intervall innerhalb an.
Zum Beispiel alle 5 Minuten(minutes=5)ist.
"""
@tasks.loop(seconds=10)
async def send_message_every_10sec():
    await channel_sent.send("10 Sekunden sind vergangen")

"""
Dieses Mal möchte ich sofort nach dem Start des Bots mit der regulären Ausführung beginnen
Starten Sie die reguläre Ausführung, wenn der Bot bereit ist()Machen
"""
@client.event
async def on_ready():
    global channel_sent 
    channel_sent = client.get_channel(any_channel_id)
    send_message_every_10sec.start() #Hinter der Methode, die regelmäßig läuft.start()Anziehen


client.run("hogehogetoken")

Jetzt kann der angegebene Kanal alle 10 Sekunden "10 Sekunden sind vergangen" anzeigen.

Wenn Sie es anwenden und den angegebenen Befehl erhalten, können Sie ihn ab diesem Zeitpunkt ausführen. Sie ändern einfach das Timing von start ().

Am Ende

Lassen Sie den Bot in regelmäßigen Abständen auf discord.py sprechen [asynchrone Version] Es tut mir leid, dass die Anzahl der Aufrufe dieses Artikels immer noch zunimmt. Daher habe ich vorerst eine Flusslinie zur neuesten Version erstellt. Achten Sie darauf, zu aktualisieren ...

Bitte kommentieren Sie, wenn Sie Fragen haben. Ich habe discord.py bis zu einem gewissen Grad gemeistert.

Codebeispiel Ergänzung

Das obige Codebeispiel ist ein Code, der nach Erhalt einiger Fehlerberichte mehrmals behoben wurde. Es gibt einige unnatürliche Teile, weil wir es so geändert haben, dass es nicht von dem ursprünglich geschriebenen Codebeispiel abweicht. Insbesondere sollte das Umschreiben des Werts der äußeren Variablen mit "global" vermieden werden, wenn dies nicht erforderlich ist (es ist weniger lesbar und kann den Wert der Variablen unbeabsichtigt umschreiben).

Wenn Sie beispielsweise auf den folgenden Artikel verweisen, kann die Schleifenfunktion selbst, wenn der Zielkanal selbst als Argument verwendet wird, als Argument von "start ()" übergeben werden, ohne mit global neu zu schreiben. https://qiita.com/rareshana/items/b84bec58acd48cb14118

Alternativ können Sie Cog verwenden, eine Funktion, die Befehle, Ereignisse und Aufgaben gruppiert, um Kanäle in Instanzvariablen zu speichern, ohne dass globale Variablen verwendet werden müssen. Bitte schreiben Sie entsprechend der Situation entsprechend um.

Recommended Posts

[Neueste Version] Lassen Sie den Bot in regelmäßigen Abständen mit discord.py sprechen
Verwenden Sie die neueste Version von PyCharm unter Ubuntu
Installieren Sie die neueste Version von CMake unter Ubuntu 18.04.4 LTS
Stellen Sie die neueste Version von Python in Linux (Debian) von Chromebook
Installieren Sie die neueste Version von Git auf Ihrem Linux-Server
Thread unter Linux anhalten (korrigierte Version am Ende des Artikels)
Installieren Sie die neueste Version von Apache httpd 2.4 von der Quelle unter Cent OS 8
Seien Sie vorsichtig, wenn Sie in regelmäßigen Abständen Tweets mit der Twitter-API abrufen