Discord.py !apply Bot

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
Nvco
User
Beiträge: 1
Registriert: Donnerstag 9. Juli 2020, 12:06

Moin,

aktuell versuche ich mit Python in der Discord API einen Bot zu coden. Dieser sollte einen !apply Befehl bekommen, mit dem man eine Bewerbung starten kann.
Darauf sollte der Bot dem User eine Dm schreiben mit: ,,Bewerbung gestartet..." und der ersten Frage. Der Bot soll daraufhin auf die Antwort des Users warten und diese abspeichern. Das etwa 4 mal. -> Daraufhin wird in einen vorgegebenen Channel ein embed mit den Antworten geschickt und ein Leader kann mit einem Haken oder Kreuz reagieren um die Bewerbung anzunehmen oder abzulehnen.

Das Problem, dass ich habe ist: Der Bot wartet nicht auf die Antworten des Users sondern schreibt die Fragen einfach nacheinander, Kann mir da jemand helfen?

Codeteil:

Code: Alles auswählen

 
 if message.content.startswith("!apply"):

        applyChannel = client.get_channel(729854567197704303)

        await message.author.send("**Du hast erfolgreich eine Bewerbung gestartet.**\r\n"
                                  "\r\nBitte schreibe immer die Antwort zu der Frage:\r\n"
                                  "\r\n1.Wie heißt du?\r\n"
                                  "\r\nschreibe `cancel` falls du deine Bewerbung abbrechen möchtest.")

        answer1 = await client.wait_for("message")

        await sleep(1)

        if answer1.content.startswith("cancel"):
            await message.author.send("Deine Bewerbung wurde erfolgreich **abgebrochen**.")
            return

        else:
            await message.author.send("Frage 2")
            answer2 = await client.wait_for("message")

            await sleep(1)

            await message.author.send("Frage 3")
            answer3 = await client.wait_for("message")

            await sleep(1)

            await message.author.send("Frage 4")
            answer4 = await client.wait_for("message")

            await sleep(1)

            await message.author.send("fertig")
            await applyChannel.send("fertig")

            embed = discord.Embed(title=("Bewerbung von {}".format(message.author)),
                                  description="Test",
                                  color=0x22a7f0)
            embed.add_field(name="test", value="test", inline=True)

            mess = await applyChannel.send(embed=embed)

            await mess.add_reaction('✅')
            await mess.add_reaction('❌')

            reaction = await client.wait_for("reaction")

            channel = reaction.message.channel

            if channel == client.get_channel(729854567197704303):
                if reaction == '✅':
                    message.author.send("angenommen")

                elif reaction == '❌':
                    message.author.send("abgelehnt")
Mit freundlichen Grüßen
Nico | Nvco
Joybtw
User
Beiträge: 1
Registriert: Sonntag 16. August 2020, 11:53

Hey Nico,
ich code auch erst seit ein paar Monaten und bin nicht so erfahren wie du aber wüsste etwas was dir helfen kann.
Wie ich sehe codest du den Command in einem on_message event.
Du kannst in die Klammern von dem Event die Variable "message" angeben und must diese dann nicht in "" setzten.
Also :
async def on_message(message)
Und dann überträgst du überall wo ...("message") steht:
Einfach (message) ohne Anführungszeichen!
Mango
User
Beiträge: 1
Registriert: Freitag 8. Januar 2021, 18:32

Dass der Bot die Fragen hintereinander sendet, liegt daran, dass du nicht überprüfst, wer die Nachricht gesendet hat. So sendet der Bot die Nachricht sofort, nachdem er selbst schon eine Nachricht geschickt hat. Dies kannst du über den parameter check festlegen, das eine Funktion übernimmt, die ein Message-Objekt nimmt und einen bool ausgibt. Beispielsweise könnte das so aussehen:

Code: Alles auswählen

check=lambda m: m.author == message.author
Zudem hast du keinen Timeout angegeben. Diesen würde ich auf 2 oder 3 Minuten setzen. Wie das funktioniert, findest du in den Docs von discord.py. Ich hoffe, ich konnte dir bei deinem Problem behilflich sein.
Antworten