简体   繁体   中英

Discord.py - Await for user's message

so right now I'm trying to create a type of application bot and right now the check I used for the bot doesn't allow the user to move onto the next question. There is no traceback so it's something with the check I defined.

@commands.command()
  @commands.has_role("Realm OP")
  async def block(self, ctx, user: discord.User):
    DMchannel = await ctx.author.create_dm()
    channel = ctx.message.channel
    author = ctx.message.author
    mentions = [role.mention for role in ctx.message.author.roles if role.mentionable]
    channel2 = str(channel.name)
    channel = channel2.split('-')
    if len(channel2) == 2: # #real-emoji
      realm, emoji = channel
    else: # #realm-name-emoji  
      realm, emoji = channel[0], channel[-1]
      realmName = realm.replace("-" , " ")
      realmName1 = realmName.lower()
    rolelist = []
    print(realmName1)
    a = solve(realmName1)
    print(a)
    realmName2 = str(a) + " OP"
    print(realmName2)
    check_role = discord.utils.get(ctx.guild.roles, name= realmName2)
    if check_role not in ctx.author.roles:
      return await ctx.send('You do not own this channel')

    else:
      await ctx.send("You own this channel!")
      def check(m):
        return m.channel == channel and m.author != self.bot.user
        
      await DMchannel.send("Please fill out the questions in order to block the user!")

      await DMchannel.send("User's Gamertag: (If you don't know, try using the >search command to see if they have any previous records!) ")
      blocka1 = await self.bot.wait_for('message', check=check)

      await DMchannel.send("Reason for block:")
      blocka2 = await self.bot.wait_for('message', check=check)

Right now the bot doesn't do anything after the user responds to the first question and there is no traceback.

Any help or suggestions would help greatly!

Your check isn't returning anything. It's supposed to return either True or False . This means your wait_for will never end (as the check never returns True ), so it will never ask the next question.

def check(m):
  return m.channel == channel and m.author != self.bot.user

EDIT:

Your channel is the ctx.channel , while your bot waits for answers in DM. Assuming you answer your bot in DM as well, this means your check will never pass, as m.channel never equals channel .

def check(m):
  return m.guild is None and m.author == ctx.author

This checks if a message was sent in DM ( Guild is None ), and if it was a DM by the original author.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM