无法检查 Discord.py 中的反应

Cannot Check Reaction In Discord.py

所以基本上我在制作一个 modmail 系统,问题是我们希望 dmed 机器人的人必须对 ✅ 做出反应,如果他做出反应,那么机器人必须回复他“好的” 但是代码无法正常工作,那么问题是什么?如何解决?

import discord
import asyncio

client = discord.Client()

@client.event
async def on_message(message):
  # empty_array = []
  # modmail_channel = discord.utils.get(client.get_all_channels(), name="mod-mail")

  if message.author == client.user:
      return

  if str(message.channel.type) == "private":
    embed = discord.Embed(title='Confirmation',
    color=0x03d692)
    embed.add_field(name="You're sending this message to **The Dynamic Legends**", value="React with :white_check_mark: to confirm." + "\nTo cancel this request, react with :x:.", inline=False)

    confirmation_msg = await message.author.send(embed=embed)

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

    sent_users = []
    sent_users.append(message.author.name)
    
    try:
      print('Working')
      
      def check1(reaction, user):
        return user == client.user and user!='Mod Mail Humara#5439' and str(reaction.emoji) == '✅'

      reaction, user = await client.wait_for("reaction_add", timeout=30.0, check=check1)

      # print(reaction, user)
      if str(reaction.emoji) == '✅':
        message.author.send('yes)      

client.run('TOKEN')


校验函数存在逻辑问题

return user == client.user

这根本没有意义,而不是 == 使用 != 并且不要把 user!='Mod Mail Humara#5439' 部分

您的检查功能已修复:

def check1(reaction, user):
    return user != client.user and str(reaction.emoji) == '✅'

另外message.author.send是协程,需要等待

await message.author.send("whatever")

您的代码:

@client.event
async def on_message(message):
    if message.author == client.user:
        return

    if isinstance(message.channel, discord.DMChannel):
        embed = discord.Embed(title='Confirmation', color=0x03d692)
        embed.add_field(name="You're sending this message to **The Dynamic Legends**", value="React with :white_check_mark: to confirm." + "\nTo cancel this request, react with :x:.", inline=False)

        confirmation_msg = await message.author.send(embed=embed)

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

        sent_users = []
        sent_users.append(message.author.name)

        try:
            def check1(reaction, user):
                return user != client.user and str(reaction.emoji) == '✅'

            reaction, user = await client.wait_for("reaction_add", timeout=30.0, check=check1)

            if str(reaction.emoji) == '✅':
                await message.author.send('yes')
            

        except Exception as e:
            pass