wait for event?

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
Phobit
User
Beiträge: 185
Registriert: Freitag 4. Mai 2018, 18:13

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()
Mir egal, ob der Code schön ist oder nicht.
Hauptsache er funkt!
nezzcarth
User
Beiträge: 1633
Registriert: Samstag 16. April 2011, 12:47

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.
__deets__
User
Beiträge: 14528
Registriert: Mittwoch 14. Oktober 2015, 14:29

Da discord AFAIK doch auf asyncio setzt, sollte ein simples

await asyncio.sleep(5)

ausreichen.
__deets__
User
Beiträge: 14528
Registriert: Mittwoch 14. Oktober 2015, 14:29

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.
Benutzeravatar
sls
User
Beiträge: 480
Registriert: Mittwoch 13. Mai 2015, 23:52
Wohnort: Country country = new Zealand();

@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
When we say computer, we mean the electronic computer.
Antworten