【问题标题】:"on_raw_reaction_add" working and "and on_raw_reaction_remove" not working why?“on_raw_reaction_add”有效而“and on_raw_reaction_remove”无效,为什么?
【发布时间】:2021-01-01 15:51:20
【问题描述】:

我在反应代码上有这个自动分配角色,并且 on_reaction_add 工作得很好,但是 on_reaction_add_remove 给我一个错误,为什么?

代码

@bot.event
async def on_raw_reaction_add(payload):

    msgID = 754487460142121070  
    user = payload.user_id
    member = payload.member

    guild_id = payload.guild_id
    guild = discord.utils.find(lambda g : g.id == guild_id, bot1.guilds)
    role = get(member.guild.roles, name="penis")

    if payload is not None:
        if payload.message_id == msgID:
            if str(payload.emoji) == "<:bbc:639345897922101248>":
                await member.add_roles(role)

@bot.event
async def on_raw_reaction_remove(payload):

    msgID = 754487460142121070  
    user = payload.user_id
    member = payload.member

    guild_id = payload.guild_id
    guild = discord.utils.find(lambda g : g.id == guild_id, member.guilds)
    role = get(member.guild.roles, name="penis")

    if payload is not None:
        if payload.message_id == msgID:
            if str(payload.emoji) == "<:bbc:639345897922101248>":
                await member.add_removes(role)

错误 raw_reaction_remove

Ignoring exception in on_raw_reaction_remove
Traceback (most recent call last):
  File "/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/site-packages/discord/client.py",

第 312 行,在 _run_event 中 等待 coro(*args, **kwargs) 文件“/Users/CIP/Documents/GitHub/billionaireboysclub/lojinha.py”,行 150,在 on_raw_reaction_remove guild = discord.utils.find(lambda g : g.id == guild_id, member.guilds) AttributeError: 'NoneType' 对象没有属性 'guilds'

【问题讨论】:

标签: python discord.py


【解决方案1】:

您没有从payload 获得成员对象,因此您在member.guilds 上获得了'NoneType' object has no attribute 'guilds'

但不是这样:

guild_id = payload.guild_id
guild = discord.utils.find(lambda g : g.id == guild_id, member.guilds)

我会推荐:

guild = bot.get_guild(payload.guild_id)

这可能无法解决您的会员问题,但它比试图从会员公会中拉出公会对象更干净。

你还有一个错字:await member.add_removes(role),你的意思可能是remove_roles

编辑:

您可能希望通过添加以下内容来过滤掉任何非公会反应:

if not payload.guild_id:
    return

在您的on_raw_reaction_addon_raw_reaction_remove 的最顶部

【讨论】:

    猜你喜欢
    • 2020-03-09
    • 2011-07-05
    • 2012-01-15
    • 2013-12-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多