创建一个 Discord 角色机器人,上线正常,但实际上不会更新角色

问题描述 投票:0回答:1

我目前正在为一个小型社区 Discord 服务器编写一个角色机器人,作为学习 python 3 和整个 Discord 库的一种手段。我在互联网上到处乱逛尝试其他解决方案,但我显然错过了一些东西。希望得到一些关于问题所在的指导或想法,因为它没有返回任何错误。

@client.event
async def on_ready():
  channel = client.get_channel(<ChannelID>)  #set channel to #rules
  if isinstance(channel, discord.TextChannel):
    text = "Please read the #rules and react for verification."
    emoji = await channel.send(text)
    await emoji.add_reaction('✅')

#When reaction
    @client.event
    async def on_reaction_add(reaction, author):
      channel = client.get_channel(<ChannelId>)  #Update channel as redundancy
      if reaction.message.channel is not None and channel:
          return
      if reaction.emoji == "✅":
        author = reaction.author
        role = await reaction.author.guild.get_role(<RoleID>)
        await author.add_roles(role)  #Checks for correct reaction and adds role
        reaction.message.delete()

我尝试过导入额外的库,例如输入额外的功能,我尝试过异步 On_Reaction、On_Ready,甚至 On_Message。我确实有表情符号库,以防出现问题。机器人的角色也高于它尝试分配的角色,机器人具有主持人权限、行会成员权限以及所有在我看来对此有帮助的权限,即:

读取消息历史记录 创建表达式 创造反应 温和会员 管理角色 创建消息

我也尝试过 user.guild.roles 和用于分配的author.guild.roles。

python python-3.x discord.py bots user-roles
1个回答
0
投票

您的代码片段中有一些错误。首先是 on_reaction_add 事件是在 on_ready 事件内部定义的,该事件可能无法按预期工作,因为它不受支持。其次,在文档中,我们有discord.on_reaction_add(reaction, user),它具有参数类discord.Reaction和(Union[discord.Mmeber, discord.User]。您正试图得到这个:

await reaction.author.guild.get_role(<RoleID>)

https://discordpy.readthedocs.io/en/stable/api.html#discord.Reaction从这里正确的方法是

await reaction.message.guild.get_role(<RoleID>)

然后我们有这个:

author = reaction.author

你已经有了作者,所以没有理由尝试改变它。该事件返回反应和用户,其中用户是做出反应的人。

在此处查看文档:https://discordpy.readthedocs.io/en/stable/api.html搜索discord.on_reaction_add

© www.soinside.com 2019 - 2024. All rights reserved.