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