我正在尝试为我的机器人发出静音命令,这是我的代码:
@client.command(pass_context = True)
async def mute(ctx, member: discord.Member):
role = discord.utils.get(member.guild.roles, name='Muted')
await client.add_roles(member, role)
embed=discord.Embed(title="User Muted!", description="**{0}** was muted by **{1}**!".format(member, ctx.message.author), color=random.choice(colors))
await ctx.send(embed=embed)
触发时,它给我这个错误:AttributeError: 'Bot' object has no attribute 'add_roles'
。我也尝试过使用 ctx.add_roles
,但这也不起作用。
我是编程新手,因此不胜感激。
答案 0 :(得分:3)
正如您在错误中看到的,discord.ext.commands.Bot
对象没有属性 add_roles
,但 discord.Member
有。
@client.command(pass_context = True)
async def mute(ctx, member: discord.Member):
role = discord.utils.get(member.guild.roles, name='Muted')
await member.add_roles(role)
embed=discord.Embed(title="User Muted!", description="**{0}** was muted by **{1}**!".format(member, ctx.message.author), color=random.choice(colors))
await ctx.send(embed=embed)
答案 1 :(得分:1)
正如其他人所说,您需要使用 member.add_roles()
,但您还应该通过 ctx.guild.get_role()
的 ID 获取角色,因为现在您正在成员已经拥有的角色中搜索角色。
您可以通过在用户设置 > 外观中启用开发者模式来获取此 ID,然后在服务器角色中右键单击静音角色 > 复制 ID。
@client.command(pass_context = True)
async def mute(ctx, member: discord.Member):
role = ctx.guild.get_role(<mute_role_id>)
await member.add_roles(role)
embed=discord.Embed(title="User Muted!", description="**{0}** was muted by **{1}**!".format(member, ctx.message.author), color=random.choice(colors))
await ctx.send(embed=embed)
答案 2 :(得分:0)
在较新版本的 Discord.py 中,add_roles
是成员对象上的方法,而不是机器人对象。这就是为什么您会看到“'Bot' 对象没有属性 'add_roles'”。
您需要使用 await member.add_roles(role)