python - 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')
解决方案
它不起作用的原因。是您遍历每个角色并使用相同的通道。然后设置权限以将具有服务器中所有角色的某人静音,具有相同的频道。这导致每个角色在单个通道中被静音:
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)
推荐阅读
- session - 将模式弹出窗口从 ONLOAD 更改为每次会话一次
- model-view-controller - Dropzone.js 上传后不显示结果
- java - 无法使用条件获取列表
- html - Firefox 不会开始下载
- ios - 为什么 iOS 配置文件会过期?
- blueprism - 创建 BP 流以比较从 PDF 到 XML 以及从 XML 到 PDF 的数据
- javascript - 向类添加值
- firebase - pubspec.yaml:在添加 cloud_firestore 时解析块映射时需要一个键
- javascript - 如何使用 Arr.reduceRight 计算数组最后 n 个元素的总和
- tensorflow - “未找到图形定义文件” - TensorBoard 错误