首页 > 解决方案 > 我想创建一个只对管理员可见的频道 discord.py

问题描述

async def report(ctx, member: discord.Member, *, report=None):
    report_channel = await ctx.guild.create_text_channel("reports")
    await report_channel.set_permissions(has_permissions(administrator=True), view_channel=True, add_reactions=True)
# I tried to fix it every time but it never works i just want to make that specific report channel to be only visible for admins :(

我不断收到此错误:命令引发异常:InvalidArgument:目标参数必须是成员或角色

标签: pythonpython-3.xdiscorddiscord.py

解决方案


你得到的错误很清楚。

channel.set_permissions将成员或角色对象作为其参数。

无论如何您都不需要使用它,您可以简单地使用以下overwrites参数ctx.guild.create_text_channel

everyone = ctx.guild.default_role
# Gets the @everyone role, see: https:#discordpy.readthedocs.io/en/stable/api.html#discord.Guild.default_role
ctx.guild.
overwrites = {everyone: discord.PermissionOverwrite.from_pair(deny=discord.Permissions.all(), allow=[])
ctx.guild.get_role(admin_role_snowflake): discord.PermissionOverwrite.from_pair(deny=discord.Permissions.none(), allow=discord.Permissions.all_channel())}
await ctx.guild.create_text_channel("reports", overwrites=overwrites)
# see: https:#discordpy.readthedocs.io/en/stable/api.html#discord.Guild.create_text_channel

第一个 dict 项声明 @everyone 默认情况下不应该对该频道有任何权限。

第二个声明管理员角色应该拥有该频道的所有文本频道权限。

您可能需要调整权限以获得所需的结果,并确保替换admin_role_snowflake为服务器中管理员角色的雪花。


推荐阅读