使用机器人Discord.py授予和删除角色

时间:2018-08-15 11:48:09

标签: python discord discord.py discord.py-rewrite

我如何在Discord.py中制作一个机器人,该机器人将分配role.json文件中存在的角色,同时使用相同的命令删除和添加相同的角色。例如,?role <rolename>将同时添加和删除角色,具体取决于用户是否已分配角色。我对如何实现这一目标感到困惑。

我当前的机器人使用?roleadd <rolename> ?roleremove <rolename>

2 个答案:

答案 0 :(得分:1)

这段代码基本上只是检查命令提升者是否是服务器的所有者,然后将指定的角色分配给他。

@bot.command()
@commands.is_owner()
async def role(ctx, role:discord.Role):
  """Add a role to someone"""
  user = ctx.message.mentions[0]
  await user.add_roles(role)
  await ctx.send(f"{user.name} has been assigned the role:{role.name}")

让我细分代码:

@bot.command()
@commands.is_owner()

这些只是简单的函数装饰器。他们几乎是不言自明的。但还是让我说。 @bot.command()仅定义它是一个命令。 @commands.is_owner()检查提出该命令的人是所有者。

async def role(ctx, role:discord.Role):>此行定义了功能。

user = ctx.message.mentions[0] #I don't know about this line.
await user.add_roles(role) #This line adds the roles to the user.
await ctx.send(f"{user.name} has been assigned the role:{role.name}") 
#It just sends a kind of notification that the role has been assigned

答案 1 :(得分:0)

我不确定您的role.json文件在哪里起作用,但是这就是我实现这种命令的方式

@bot.command(name="role")
async def _role(ctx, role: discord.Role):
    if role in ctx.author.roles:
        await ctx.author.remove_roles(role)
    else:
        await ctx.author.add_roles(role)

这使用Role converter通过其名称,id或提及来自动解析role对象。