【问题标题】:Disable Reactions in discord.py在 discord.py 中禁用反应
【发布时间】:2022-08-13 04:13:56
【问题描述】:
@client.event
async def on_raw_reaction_add(payload):
if payload.emoji.name == \'❌\':
#code
elif payload.emoji.name == \'✅\':
#code
当有人对 x 做出反应时,它会运行代码,但是当他在对 x 做出反应后对勾号做出反应时,它也会在勾号下运行代码,是否有办法在某人已经做出反应后禁用反应?
标签:
python
discord
discord.py
【解决方案1】:
将 payload.user_id 存储在数据结构中,将 user_id 添加到结构中,并确保在运行代码之前检查 payload.user_id 是否不在结构中。
【解决方案2】:
我是这样做的:
@client.event
async def on_reaction_add(reaction, user):
# Checks reactions only in the logchannel
if reaction.message.channel.id != logchannel.id:
return
total_reactions = 0
for r in reaction.message.reactions:
total_reactions += r.count
member = reaction.message.mentions[0]
if total_reactions == 3:
if reaction.emoji == "✅":
# Stuff
elif reaction.emoji == "❌":
# Stuff
elif total_reactions > 3:
await reaction.remove(user)
我对这段代码的目标是让它始终有 2 个机器人反应和 1 个用户反应。
我首先通过遍历消息的反应来计算消息的总反应。
然后,如果有超过 3 个反应(意味着用户反应不止一次),我不执行任何代码,而是立即删除该用户的反应。
这样一来,在您对 1 个表情符号做出反应后,就不可能对另一个表情符号做出反应,并且其他用户也无法做出反应。
希望这可以帮助!