python - 取消反应后删除角色 Discord.py
问题描述
我的代码:
async def on_raw_reaction_remove(payload):
guild=bot.get_guild(payload.guild_id)
member=bot.get_user(payload.user_id)
print(payload.emoji)
if str(payload.emoji)== "<:DragonDragoon:832860714078961714>":
if payload.message_id == 853930257740070933:
if payload.channel_id == 853813716541505576:
Role = discord.utils.get(guild.roles, name="Knights")
await member.remove_roles(Role)
我在代码上找不到任何错误,但收到错误消息
Ignoring exception in on_raw_reaction_remove
Traceback (most recent call last):
File "/opt/virtualenvs/python3/lib/python3.8/site-packages/discord/client.py", line 343, in _run_event
await coro(*args, **kwargs)
File "main.py", line 142, in on_raw_reaction_remove
await member.remove_roles(Role)
AttributeError: 'NoneType' object has no attribute 'remove_roles'
该行member=bot.get_user(payload.user_id)
应该获取成员,但它是非类型?我敢肯定是我做出了反应,并且在公会中
解决方案
您似乎遇到了两个问题:
bot.get_user()
返回None
有效身份证件。也许检查评论中指出的机器人意图。这也可能是缓存问题。bot.get_user()
返回discord.User
不discord.Member
。您不能删除用户的角色,只能删除成员的角色。您将需要guild.get_member(memberid)
改用。
async def on_raw_reaction_remove(payload):
guild = bot.get_guild(payload.guild_id)
member = guild.get_member(payload.user_id)
如果您已禁用缓存,则需要获取该成员
async def on_raw_reaction_remove(payload):
guild = bot.get_guild(payload.guild_id)
member = await guild.fetch_member(payload.user_id)
推荐阅读
- terraform - 如何在terraform的嵌套列表中切片第一个元素
- c++ - c++中的归并排序
- apache-camel - 当我的数字超过 1 时,camel gcp pubsub 属性 maxMessagesPerPoll 会产生问题
- postman - 查询 Cosmos DB 的正确授权标头是什么?
- javascript - 当我点击它时,如何让文字显示在我的图片旁边?
- angular - 对 ngIf 使用多个 ng-content 不起作用
- xamarin.android - Android Xamarin 条纹集成
- paypal - 实时支付宝集成问题
- json - 无法将数据集从 SPARK 传输到 HBase 表
- node.js - 如何从 json Web 令牌解码有效负载?