角色没有被添加自动角色 |不和谐.py

时间:2021-03-01 16:23:19

标签: python discord.py roles

autoroles = {}

@client.event
async def on_ready():
  global autoroles
  with open("autorole.json", "r") as f:
      autoroles = json.load(f)

@client.event
async def on_member_join(member):
    #my welcome command is also here
    await member.add_roles(autoroles[member.guild])

@client.command()
@commands.has_permissions(administrator=True)
async def autorole(ctx, *, role : discord.Role=None):
  
  embed=discord.Embed(color=0x7289da, description=f"**Set autorole to** {role.mention}**?**")
  embed.set_footer(text="React with the wave reaction to confirm it!")
  msg = await ctx.send(embed=embed)

  def checkifnotbot(reaction, user):
      return user != client.user

  await msg.add_reaction('?')

  reaction, user = await client.wait_for("reaction_add", timeout=60.0, check=checkifnotbot)

  if str(reaction.emoji) == "?":   

    embedw=discord.Embed(description=f"?**Autorole set!**\n> Everytime someone joins the server they get the {role.mention} role!", color=0x7289da)     
    await msg.edit(embed=embedw)
    await msg.clear_reactions()
    
    global autoroles
    autoroles[str(ctx.guild.id)] = role.id

    with open("autorole.json", "w") as f:
        json.dump(autoroles, f)

我想要发生的事情:如果有人使用 autorole 命令,一旦有人加入服务器,角色就会被添加(适用于多个 Discord 服务器) 问题:我没有收到任何错误,但只是没有添加角色。我认为这是因为 .add_roles 不需要一个 id 而是一个角色对象。但我不知道如何做到这一点 注意:设置有效,它被添加到 json 文件 https://imgur.com/SRRsJgT 我也试过这个: https://pastebin.com/eCp4HN7F

1 个答案:

答案 0 :(得分:1)

我可以看到你的代码中有两个问题,一个是从json中获取角色的id,另一个是添加角色。要添加角色,您需要指定 discord.Role 以使其正常工作。

@client.event
async def on_member_join(member):
    role = discord.utils.get(member.guild.roles, 
    id=autoroles[str(member.guild.id)])
    await member.add_roles(role)

看到我使用 str(member.guild.id) 作为您的 json 键是一个字符串。这也将支持多个自动角色。

参考: