首页 > 解决方案 > Discord.py 静音命令通道权限

问题描述

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

  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')

标签: pythonpython-3.xdiscorddiscord.pydiscord.py-rewrite

解决方案


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

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 遮蔽。由于这种阴影,第一行不会被使用。因此,您获得的静音角色根本没有被使用。

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

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

推荐阅读