您如何检查特定用户是否对特定消息做出反应[discord.py]

时间:2020-07-30 10:47:39

标签: python discord discord.py discord.py-rewrite

我看过类似的问题,但没有一个答案对我有用。我正在使用一个机器人,您在其中输入(前缀)建议{suggestion},然后它会发送一条消息,询问您是否确定要发送建议。如果他们对该消息的反应是该机器人已添加的响应(选中标记),则它将建议发送到渠道。

简而言之,我如何创建触发器,如果​​某个人对带有特定表情符号的特定消息做出反应,然后发送输出?

2 个答案:

答案 0 :(得分:4)

要使其反应检查消息特定,您需要在检查功能中使用 reaction.message == message

这是基于 Libby 回答的完整示例。

message = await ctx.send("Are you sure you want to submit this suggestion?")
await message.add_reaction("✅")
confirmation = await bot.wait_for("reaction_add", check=check) 
channel = bot.get_channel(channel_id) # Put suggestion channel ID here.

def check(reaction, user):
    return user == ctx.author and str(reaction.emoji) in ["✅"] and reaction.message == message

if confirmation:
    await channel.send(suggestion)

答案 1 :(得分:1)

您可以使用wait_for函数使bot等待作者做出对勾标记的反应。

首先,进行检查以确保仅在消息作者做出对勾标记的情况下,机器人才将建议发送到建议频道:

def check(reaction, user):
    return user == ctx.author and str(reaction.emoji) in ["✅"]

然后放入发送确认消息并具有wait_for功能的代码:

message = await ctx.send("Are you sure you want to submit this suggestion?")
await message.add_reaction("✅")
confirmation = await bot.wait_for("reaction_add", check=check) 
channel = bot.get_channel(channel_id) # Put suggestion channel ID here.

最后,放置告诉机器人,一旦消息作者做出反应后该怎么做的代码:

if confirmation:
    await channel.send(suggestion)