Seite 1 von 1
wait for event?
Verfasst: Montag 22. April 2019, 12:42
von Phobit
Hallo,
ich habe 2 Bots auf Discord.
Wenn der eine Bot Nachricht a schreibt, müsste der andere Nachricht b antworten.
Bei Discord gibt es dafür ja das on_message event, aber gibt es einen Möglichkeit zu sagen "warte 5 sekunden auf on_message, sonst mach weiter"?
also quasi sowas wie:
Code: Alles auswählen
Channel.send("a")
# Und dann hier sowas wie:
wait(5) for on_message:
do_smthing()
else:
do_else()
Re: wait for event?
Verfasst: Montag 22. April 2019, 13:25
von nezzcarth
So eine Timeout-Funktionalität ist nichts, was üblicherweise über die Syntax einer Programmiersprache ausgedrückt wird. Wenn, dann sollte das von der jeweiligen Bibliothek/API bereitgestellt werden, zum Beispiel als Parameter. Schau doch noch mal in der Doku, ob du dazu soetwas findest.
Unter Linux/UNIX könnte man das auch mit SIGALRM lösen, allerdings ist man da dann in einem Bereich, der System-nahen Sprachen wie C vorbehalten sein sollte. Es gibt ein paar Snippets im Netz, die das verwenden. Von denen man aber Abstand nehmen sollte.
Re: wait for event?
Verfasst: Montag 22. April 2019, 17:11
von __deets__
Da discord AFAIK doch auf asyncio setzt, sollte ein simples
await asyncio.sleep(5)
ausreichen.
Re: wait for event?
Verfasst: Montag 22. April 2019, 17:13
von __deets__
Oh, sehe gerade das on_message. Dann braucht’s stattdessen einen task, den man startet, der wartet dann, und prüft eine Variable/Condition die man sonst auch im on_message abfragt. Alles Teil von asyncio - dazu musst du halt mal was durcharbeiten.
Re: wait for event?
Verfasst: Dienstag 23. April 2019, 07:26
von sls
@Phobit: wie schon erwähnt wurde kannst du das mit den Tools aus dem asyncio-Framework umsetzen. Ich würde mir dazu den Teil über Timeouts in der Doku ansehen:
https://docs.python.org/3/library/async ... l#timeouts