dingledooper
dingledooper

Reputation: 170

discord.py - bot doesn't respond to multiple connected messages

I am trying to make a discord bot tell jokes in Python. However, specifically with the Knock Knock jokes, I can't get the bot to respond after the user's responds with "who's there". Can you help me please?

@bot.command(pass_context=True)
async def joke(ctx, type):

    if type.lower() == "ym":
        yo_momma = ("fat, I took a picture of her last Christmas and it's still printing.",
               "fat when she got on the scale it said, 'I need your weight not your phone number.'",
               "fat and old when God said, 'Let there be light', he asked your mother to move out of the way.",
               "fat she doesn't need the internet, because she's already world wide.",
               "fat, when she sat on an iPod, she made the iPad!",
               "fat she walked past the TV and I missed 3 episodes.",
               "ugly when she tried to join an ugly contest they said, 'Sorry, no professionals.'",
               "ugly she made One Direction go another direction.",
               "ugly Fix-It Felix said, 'I can\'t fix it.'"
               "stupid when an intruder broke into her house, she ran downstairs, dialed 9-1-1 on the microwave, and couldn't find the 'CALL' button.",
               "stupid she stuck a battery up her ass and said, 'I GOT THE POWER!'",
               "stupid that she sat on the TV to watch the couch.")
        await bot.say("Yo momma so {}".format(random.choice(yo_momma)))

    elif type.lower() == "kk":
        await bot.send_message(ctx.message.channel, "Knock Knock.")

        if "who's there" in ctx.message.content.lower():
            kk = [["A little old lady", "All this time, I did not know you could yodel."],
              ["Cow says", "Cow says mooooo!"],
              ["Etch", "Bless you, friend."],
              ["Robin", "Now hand over the cash."],
              ["Cash", "No thanks, I'll have some peanuts."],
              ["Mustache", "I mustache you a question, but I'll shave it for later."],
              ["Tank", "You're welcome."],
              ["Candice", "Candice door open, or what?"],
              ["Boo", "No need to cry, it's only a joke."],
              ["Howl", "Howl you know unless you open this door?"],
              ["Iran", "Iran all the way here. Let me in already!"]]

        joke_num = random.randint(0, 9)
        chosen_joke = [kk[joke_num][0], kk[joke_num][1]]
        await bot.say(chosen_joke[0])

        if "{} who".format(chosen_joke[0]) in ctx.message.content.lower():
            await bot.say(chosen_joke[1])

Upvotes: 0

Views: 426

Answers (1)

Patrick Haugh
Patrick Haugh

Reputation: 60944

You can use wait_for_message with a check function to wait for messages from certain users with certain content:

elif type.lower() == "kk":
    await bot.send_message(ctx.message.channel, "Knock Knock.")

    check = lambda m: "who's there" in m.content.lower()
    await bot.wait_for_message(author=ctx.message.author, channel=ctx.message.channel, check=check)
    kk = [["A little old lady", "All this time, I did not know you could yodel."],
          ["Cow says", "Cow says mooooo!"],
          ["Etch", "Bless you, friend."],
          ["Robin", "Now hand over the cash."],
          ["Cash", "No thanks, I'll have some peanuts."],
          ["Mustache", "I mustache you a question, but I'll shave it for later."],
          ["Tank", "You're welcome."],
          ["Candice", "Candice door open, or what?"],
          ["Boo", "No need to cry, it's only a joke."],
          ["Howl", "Howl you know unless you open this door?"],
          ["Iran", "Iran all the way here. Let me in already!"]]

    joke_num = random.randint(0, 9)
    chosen_joke = [kk[joke_num][0], kk[joke_num][1]]
    await bot.say(chosen_joke[0])


    check = lambda m: "{} who".format(chosen_joke[0]) in m.content.lower()
    await bot.wait_for_message(author=ctx.message.author, channel=ctx.message.channel, check=check)
    await bot.say(chosen_joke[1])

Upvotes: 1

Related Questions