Discord.py 静音命令通道权限

Discord.py Mute Command Channel Permissions

我有一个 >>setup mute 命令,它创建了一个静音角色,我需要它为该角色的每个频道创建频道权限,但它只为我 运行 的频道设置权限>>setup mute 中,它为@everyone 角色而不是 Muted 角色设置频道权限。有人可以帮忙吗? 这是我的代码

  elif command.lower() == 'mute':
    role = discord.utils.get(ctx.guild.roles, name='Muted')
    if role in ctx.guild.roles:
      await ctx.send('Already Setup')
    else:
      perms = discord.Permissions(send_messages=False, read_messages=True)
      role = await ctx.guild.create_role(name='Muted', permissions=perms)
      muted = discord.utils.get(ctx.guild.roles, name='Muted')
      for muted in ctx.guild.roles:
        await ctx.channel.set_permissions(muted, send_messages=False, read_messages=True, read_message_history=True)
      await ctx.send('Muted Role Created')

它不起作用的原因。是你迭代每个角色并使用相同的渠道。然后设置权限将服务器中所有角色的人静音,使用相同的频道。这导致每个角色在单个频道中被静音:

muted = discord.utils.get(ctx.guild.roles, name='Muted')
for muted in ctx.guild.roles:
    await ctx.channel.set_permissions(muted, send_messages=False, read_messages=True, read_message_history=True)

另一个问题是变量 muted 被 for 循环创建的变量 muted 遮蔽了。由于这种阴影,不会使用第一行。因此,您获得的静音角色根本没有被使用。

下次你需要做的是select一个角色。但是然后遍历公会的每个频道而不是服务器的角色(然后在所有频道中应用该角色的权限。):

for channel in ctx.guild.channels:
    channel.set_permissions(muted, send_messages=False, read_messages=True, read_message_history=True)