【问题标题】:Discord.py on_raw_reaction_add() - not adding role to memberDiscord.py on_raw_reaction_add() - 不向成员添加角色
【发布时间】:2020-10-29 00:26:10
【问题描述】:

我正在编写一个机器人,它将根据与表情符号的反应来分配角色。我仔细检查了我的语法、discord.py 文档,并且在交叉引用了几个 YouTube 视频时,似乎一切都检查过了,但直到今天,该机器人仍不会向成员添加角色。

@client.event
async def on_raw_reaction_add(payload):
    message_id = payload.message_id
    if message_id == MESSAGE:
        guild_id = payload.guild_id
        guild = discord.utils.find(lambda g: g.id == guild_id, client.guilds)
        print(MESSAGE)

        if payload.emoji.name == 'test':
            role = discord.utils.get(guild.roles, name='TestRole')
            print("TestRole")
        else:
            role = discord.utils.get(guild.roles, name=payload.emoji.name)

        if role is not None:
            member = discord.utils.find(lambda m: m.id == payload.user_id, guild.members)
            if member is not None:
                await member.add_roles(role)
                print("Added role to user . . .")
            else:
                print("User not found . . .")
        else:
            print("Role not found . . .")

任何帮助将不胜感激。

【问题讨论】:

    标签: python discord.py


    【解决方案1】:

    确保设置您的intents。另外,guild = client.get_guild(guild_id) 获取公会,member = get(guild.members, id=payload.user_id) 获取成员,role = get(payload.member.guild.roles, name='TestRole') 获取角色。这是一个youtube tutorial,介绍如何使用最新的 discord.py 设置角色反应机器人。当您使用 if message_id == MESSAGE: 时,它不会做任何事情,因为您需要将角色反应消息的实际整数 ID 放在那里。这应该在您设置意图后起作用:

    from discord.utils import get
    @client.event
    async def on_raw_reaction_add(payload):
        message_id = payload.message_id
        if message_id == 1234567890:
            guild_id = payload.guild_id
            guild = client.get_guild(guild_id)        
            # this wouldn't do anything because MESSAGE is not defined
            print(MESSAGE)
    
            if payload.emoji.name == 'test':
                role = get(payload.member.guild.roles, name='TestRole')
                print("TestRole")
            else:
                role = get(payload.member.guild.roles, name=payload.emoji.name)
    
            if role is not None:
                member = get(guild.members, id=payload.user_id)
                if member is not None:
                    await payload.member.add_roles(role)
                    print(f"Added role to {member}")
                else:
                    print("User not found . . .")
            else:
                print("Role not found . . .")
    

    【讨论】:

    • 我会试试的。我有 MEMBER 变量的原因是因为我设置了一个 .env 文件来存储消息 ID。你认为消息ID没有成功传递吗?
    • 那么 MESSAGE 很可能没问题,但您没有收到错误消息,因此请尝试我建议的编辑,看看会发生什么。你可以把消息 ID 放进去,看看它是否也能修复它。
    • 嗯,由于某种原因,您的建议破坏了我的代码。我恢复到原来的更改。现在出现错误。通过 Discord 寻求帮助是否违反 Stack Overflow?
    • 我不这么认为,我的discord服务器是here
    • 无论出于何种原因,它仍然无法按照您的建议工作,但是......让它工作的是将 MESSAGE = os.getenv("MESSAGE") 替换为 MESSAGE_ID = int(os .getenv("MESSAGE_ID")) 在我的原始代码集中。我从 .env 文件中提取了 MESSAGE_ID,无论出于何种原因,discord.py 真的想将“MESSAGE_ID”作为整数处理。不过感谢您的帮助。
    猜你喜欢
    • 1970-01-01
    • 2021-06-12
    • 2021-07-26
    • 2021-03-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-12-19
    • 1970-01-01
    相关资源
    最近更新 更多