Der Code in diesem Artikel dient nur zu Illustrationszwecken und ist nicht für die Verwendung in der Produktion vorgesehen. Bitte schreiben Sie es entsprechend Ihrer Anwendung entsprechend um.
Ich möchte ein Argument an "Task" übergeben
Grundsätzlich werden Aufgaben, die regelmäßig ausgeführt werden, häufig beim Starten des Bots gestartet. Manchmal möchten Sie jedoch den Startzeitpunkt und den Zielkanal mit Befehlen steuern. Zum Beispiel ** "Ich möchte, dass Sie in 30 Minuten alle 5 Minuten den Zeitbericht auf dem angegebenen Kanal erwähnen" **.
Derzeit gibt es jedoch kein Beispiel im Dokument discord.py, in dem Task (https://discordpy.readthedocs.io/ja/latest/ext/tasks/index.html) ein Argument enthält.
Fügen Sie zunächst der Aufgabe, die Sie regelmäßig ausführen möchten, ein Argument hinzu. Stellen Sie sich beispielsweise den Fall vor, in dem eine Erwähnung an die Person gesendet wird, die den Befehl in dem Kanal gesendet hat, in dem der Befehl eingegeben wird. In diesem Fall können Sie den Kanal und den Absender identifizieren, wenn Sie zum Zeitpunkt der Befehlseingabe den "Kontext" als Argument erhalten.
from discord.ext import tasks, commands
class MyCog(commands.Cog):
def __init__(self):
pass
def cog_unload(self):
self.reminder.cancel()
@tasks.loop(minutes=5.0, count=6)
async def reminder(self, ctx, content):
await ctx.send("<@{0}> {1}".format(ctx.author.id, content))
Wenn Sie eine solche Erinnerung definieren, werden Sie nur durch Starten daran erinnert. Wie übergeben Sie dieses Argument "ctx"?
Wie der Titel schon sagt. Sie können es an start () übergeben, das beim Start der Aufgabe verwendet wird. Die an start () übergebenen * args
und ** kawrgs
werden so übergeben, wie sie als Argumente der entsprechenden Task sind.
So können Sie beispielsweise den folgenden Entfernungsbefehl definieren.
from discord.ext import tasks, commands
class MyCog(commands.Cog):
def __init__(self):
pass
def cog_unload(self):
self.reminder.cancel()
@tasks.loop(minutes=5.0, count=6)
async def reminder(self, ctx, content):
await ctx.send("<@{0}> {1}".format(ctx.author.id, content))
@commands.command()
async def set_reminder(self, ctx, content):
self.reminder.start(ctx, content) #Wichtig hier
await ctx.send("Ich habe eine Erinnerung gesetzt")
Wenn Sie nun den Befehl "set_reminder" an den Chat senden, wird der vorgegebene Inhalt alle 5 Minuten erwähnt. Der Punkt ist "self.reminder.start (ctx, content)", und es ist in Ordnung, wenn Sie bedenken, dass das an "start ()" übergebene Argument direkt an das von diesem "start ()" gestartete Argument der Task übergeben wird.
Wie ich am Anfang geschrieben habe, ist dieser Code selbst nicht für die Produktion gedacht. Ich bin gespannt, was passiert, wenn eine andere Person innerhalb von 30 Minuten nach Eingabe von set_reminder auf set_reminder trifft.
Bitte beachten Sie, dass dies nur ein Pseudocode ist, um die Übergabe von Argumenten an Task zu erklären. (Aber bitte lassen Sie mich wissen, wenn es fatale Fehler wie Grammatikfehler gibt.)
Recommended Posts