python - 在 unreact 上删除角色无法获得成员
问题描述
这是一个基本代码,当您使用特定表情符号对特定消息做出反应时,它会为您提供一个角色,或者当您没有反应时删除该角色
import discord
import os
from discord.ext import commands
intents = discord.Intents.default()
intents.members = True
bot = commands.Bot(command_prefix=',', intents=intents)
@bot.event
async def on_ready():
print('bot is online')
#this works
@bot.event
async def on_raw_reaction_add(payload):
message_id = payload.message_id
if message_id == 869153559042748446:
guild_id = payload.guild_id
guild = discord.utils.find(lambda g : g.id == guild_id, bot.guilds)
if payload.emoji.name == '''1️⃣''':
role = discord.utils.get(guild.roles, id=868532817984901151)
else:
print('''else''')
role = None
if role is not None:
member = payload.member
if member is not None:
await member.add_roles(role)
print('''gave role {} to {}'''.format(role, member))
else:
print('''member not found''')
else:
print ('''role not found''')
#This is an exact copy of **on_raw_reaction_add** but
#**await member.add_roles(role)** changed to *await member.remove_roles(role)*
@bot.event
async def on_raw_reaction_remove(payload):
message_id = payload.message_id
if message_id == 869153559042748446:
guild_id = payload.guild_id
guild = discord.utils.find(lambda g : g.id == guild_id, bot.guilds)
if payload.emoji.name == '''1️⃣''':
role = discord.utils.get(guild.roles, id=868532817984901151)
else:
print('''else''')
role = None
if role is not None:
member = payload.member
if member is not None:
await member.remove_roles(role)
print('''gave role {} to {}'''.format(role, member))
else:
print('''member not found''') #This always prints
else:
print ('''role not found''')
bot.run(os.getenv('TOKEN'))
on_raw_reaction_add按预期工作,
但是当涉及到on_raw_reaction_remove时,即使它是on_raw_reaction_add的精确副本,它也找不到成员。
存在意图和服务器成员意图已打开。
解决方案
有效载荷上的member
属性仅在添加反应时才有效(文档)
添加反应的成员。仅当 event_type 为 REACTION_ADD 并且反应在公会内部时才可用。
您可以尝试使用discord.utils
或guild.get_member()
例子:
@bot.event
async def on_raw_reaction_remove(payload):
...
# discord.utils.get()
member = discord.utils.get(guild.members, id=payload.user_id)
# guild.get_member()
member = guild.get_member(payload.user_id)
...
推荐阅读
- performance - 如何解决 JMeter 中的活动会话问题
- typescript - 使用 Deno 进行 JWT 身份验证
- ruby-on-rails - 名称错误“未初始化的常量”ruby on rails
- python - 为什么相同的列表不指向相同的地址?
- stripe-payments - 如何将资金转移到非关联的 Stripe 账户
- flutter - Flutter:以毫米为单位创建标尺
- networking - 多播场景中的接收者如何知道它应该监听哪个 IP 地址?
- wordpress - 如何在不加载页面的情况下将简单的表单提交转换为 ajax 提交,例如将产品添加到购物车功能
- angular - 如何从角度的单个函数返回订阅和承诺?
- vb.net - VB.Net:Winforms Designer:在父自定义控件中使用自定义控件中的动词