用 Python 编写 Discord 机器人 - 如何发出静音命令?

时间:2021-02-07 01:34:20

标签: python discord.py

我正在尝试为我的机器人发出静音命令,这是我的代码:

@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,但这也不起作用。

我是编程新手,因此不胜感激。

3 个答案:

答案 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)