【问题标题】:Discord Python Reaction RoleDiscord Python 反应角色
【发布时间】:2021-06-25 01:52:44
【问题描述】:

我希望我的机器人将角色“用户”添加到有爱心的用户。但它不起作用。
我的代码:

@client.event
async def on_reaction_add(reaction, user):
    if reaction.emoji == "❤️":
        user = discord.utils.get(user.server.roles, name="User")
        await user.add_roles(user)

我希望你能帮助我:)

【问题讨论】:

  • 欢迎来到 StackOverflow。 “它不起作用”是什么意思?有没有错误代码?你的回溯是什么?
  • 谢谢。我的机器人不添加角色,绝对没有错误或什么的。我尝试了许多其他变体。没有什么是行不通的
  • 您是否启用了 Intents?
  • 您是否验证了代码是否已执行?
  • @Dominik 我有一个较旧的不和谐版本,并且未启用意图。我修好了:)

标签: python discord


【解决方案1】:

我会在这里使用另一个名为on_raw_reaction_add 的事件。你可以找到它的文档here

有了这个新事件,你将不得不稍微重写你的代码并添加/删除一些东西。

您的新代码:

intents = discord.Intents.default()
intents.members = True
client = commands.Bot(command_prefix="YourPrefix", intents=intents) #Import Intents

@client.event
async def on_raw_reaction_add(payload):
    guild = client.get_guild(payload.guild_id) # Get guild
    member = get(guild.members, id=payload.user_id) # Get the member out of the guild
    # The channel ID should be an integer:
    if payload.channel_id == 812510632360149066: # Only channel where it will work
        if str(payload.emoji) == "❌": # Your emoji
            role = get(payload.member.guild.roles, id=YourRoleID) # Role ID
        else:
            role = get(guild.roles, name=payload.emoji)
        if role is not None: # If role exists
            await payload.member.add_roles(role)
            print(f"Added {role}")

我们做了什么?

  • 使用payload
  • 使用角色 ID 而不是名称,因此您可以随时更改它
  • 将反应限制在一个通道中,在所有其他通道中都不起作用
  • 将表情符号变成str

确保打开 DDPortal 中的 Intent 并导入它们!

【讨论】:

  • 成功了。谢谢!我有一个问题。有效载荷究竟是什么以及我需要成员变量是什么?未使用
  • 我添加了member,因为您需要它用于on_raw_reaction_remove,但可以从on_raw_reaction_add 中删除。您可以查看docs 了解您的有效负载问题。
猜你喜欢
  • 2020-08-16
  • 2020-06-29
  • 2020-08-06
  • 1970-01-01
  • 1970-01-01
  • 2022-10-30
  • 2021-04-29
  • 2021-08-26
  • 2021-04-21
相关资源
最近更新 更多