Discord.py 验证系统

时间:2021-03-15 03:43:43

标签: discord.py

我正在制作一个验证系统,如果您输入 !verify "1. John 2. Mr. Teacher 3. Somewhere 4. Freshman 5. The Cool Mascot",它将发送一个嵌入频道,如下所示:https://gyazo.com/ab808bafcd4a5f3ed05f63e007da20c1。 如果有人对复选标记做出反应,我想告诉用户他们已被接受,如果他们被拒绝,它将发送一个 dm 说他们已被拒绝,但我在做出反应时似乎没有收到 dm 并且他们没有得到会员角色紧随其后,并且没有任何追溯。

代码:

@bot.command(pass_context=True)
async def verify(ctx, message):
  logem = discord.Embed(color=discord.Color.red())
  logem.set_author(name=f"Verification Request!")
  logem.add_field(name="User", value=f"{ctx.author.mention}")
  logem.add_field(name="Application", value=f"{message}")
  logem.set_footer(text=f"React with ✅ to accept the application and ❌ to deny the application",
                           icon_url="https://upload.wikimedia.org/wikipedia/commons/thumb/2/2e/Exclamation_mark_red.png/50px-Exclamation_mark_red.png")
  logemlog = bot.get_channel(820840787645956123)
  msg = await logemlog.send(embed=logem)
  await msg.add_reaction('✅')
  await msg.add_reaction('❌')

async def on_raw_reaction_add(payload):
    msgid = await ctx.fetch_message(msgID)
    ourMessageID = msgid

    if ourMessageID == payload.message_id:
      member = payload.member
      guild = member.guild

      emoji = payload.emoji.name
    if emoji == '✅':
      role = discord.utils.get(guild.roles, name="Member")
      print ('Accepted Someones Application')
      em = discord.Embed(color=discord.Color.red())
      em.set_author(name="Verified!")
      em.set_footer(text=f"You Have Been Accepted Into The Official WHS Discord Server!",
                           icon_url="https://upload.wikimedia.org/wikipedia/commons/thumb/2/2e/Exclamation_mark_red.png/50px-Exclamation_mark_red.png")
      await member.send("You have been accepted!")
      await member.add_roles(role)
    elif emoji == '❌':
      em = discord.Embed(color=discord.Color.red())
      em.add_field(name="Denied!", value=f"{message}")
      em.set_footer(text=f"You Have Been Denied Access Into The Official WHS Discord Server!",
                           icon_url="https://upload.wikimedia.org/wikipedia/commons/thumb/2/2e/Exclamation_mark_red.png/50px-Exclamation_mark_red.png")
      await ctx.member.send("You have been Denied!")

1 个答案:

答案 0 :(得分:0)

使用这个代替 async def on_raw_reaction_add:

def check(reaction, user):
        return reaction.emoji in ['✅', '❌'] and user == ctx.author
while True:
        try:
            reaction, user = await bot.wait_for('reaction_add', check=check)

        except Exception as e:

            print(e)
        else:
            if reaction.emoji == '✅':
                role = discord.utils.get(guild.roles, name="Member")
                print ('Accepted Someones Application')
                em = discord.Embed(color=discord.Color.red())
                em.set_author(name="Verified!")
                em.set_footer(text=f"You Have Been Accepted Into The Official WHS Discord Server!",
                    icon_url="https://upload.wikimedia.org/wikipedia/commons/thumb/2/2e/Exclamation_mark_red.png/50px-Exclamation_mark_red.png")
                await member.send("You have been accepted!")
                await member.add_roles(role)
           if reaction.emoji == '❌':
               em = discord.Embed(color=discord.Color.red())
               em.add_field(name="Denied!", value=f"{message}")
               em.set_footer(text=f"You Have Been Denied Access Into The Official WHS Discord Server!",
                           icon_url="https://upload.wikimedia.org/wikipedia/commons/thumb/2/2e/Exclamation_mark_red.png/50px-Exclamation_mark_red.png")
               await ctx.member.send("You have been Denied!")

测试一下,如果它不起作用,请告诉我。