You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

discord.py有没有更符合Python风格的方式创建指定管理员权限列表?

优化后的Python风格实现

你原来的写法可以正常运行,但存在两个可以优化的点:一是使用了Python内置关键字list作为变量名,会覆盖默认的列表类型定义,属于不推荐的实践;二是重复的if判断逻辑冗余,后续要调整权限列表需要修改多处代码。

你可以通过预定义权限映射表+列表推导式的方式简化逻辑:

# 预定义需要筛选的权限属性名和对应展示名称的映射关系
PERMISSION_MAPPING = {
    "administrator": "管理员",
    "manage_guild": "管理服务器",
    "manage_roles": "管理角色",
    "manage_channels": "管理频道",
    "manage_messages": "管理消息",
    "manage_webhooks": "管理Webhook",
    "manage_nicknames": "管理昵称",
    "manage_emojis": "管理表情",
    "kick_members": "踢出成员",
    "ban_members": "封禁成员",
    "mention_everyone": "@全体成员"
}
# 也可以保留你原来的英文显示名,直接修改映射的值即可

# 一行生成符合要求的权限列表
admin_permissions = [
    display_name 
    for perm_attr, display_name in PERMISSION_MAPPING.items() 
    if getattr(member.guild_permissions, perm_attr)
]

这种写法的优势:

  • 逻辑更简洁,没有冗余的重复判断
  • 扩展性更强,后续需要新增/删除展示的权限,只需要修改PERMISSION_MAPPING即可,不需要改动核心筛选逻辑
  • 变量名语义清晰,不会污染内置命名空间

可选优化:由于discord权限体系中,拥有administrator权限的用户默认拥有所有其他权限,如果你只需要展示管理员这一项而不需要列全其他权限,可以提前做判断减少遍历:

if member.guild_permissions.administrator:
    admin_permissions = ["管理员"]
else:
    admin_permissions = [
        display_name 
        for perm_attr, display_name in PERMISSION_MAPPING.items() 
        if perm_attr != "administrator" and getattr(member.guild_permissions, perm_attr)
    ]

内容的提问来源于stack exchange,提问作者ggggggggggggggggggg

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.07 07:09:02