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

Discord机器人:新加入机器人权限清除事件失效及报错求助

解决新机器人加入时清除权限的问题

你的代码核心错误

你用member.edit(permissions=...)的写法完全错误——discord.py的Member.edit()方法根本没有permissions参数。成员的权限是由其拥有的角色、频道权限覆盖共同决定的,不能直接编辑成员对象的权限属性。

事件正常运行的前提条件

  • 你的机器人必须拥有管理角色和管理服务器权限,才能修改其他成员的角色与权限
  • 在Discord开发者后台的「Privileged Gateway Intents」中开启Server Members Intent,否则on_member_join事件不会触发
  • 你的机器人角色位置必须高于所有新加入机器人的角色,否则无法修改它们的角色/权限

正确实现代码

最简洁高效的方式是创建一个无任何权限的角色,将新加入的机器人添加到该角色,并移除它可能自动获得的其他角色:

@client.event
async def on_member_join(member):
    if member.bot:
        # 获取或创建名为"Restricted Bot"的无权限角色
        restricted_role = discord.utils.get(member.guild.roles, name="Restricted Bot")
        if not restricted_role:
            # 创建角色时设置所有权限为禁用
            restricted_role = await member.guild.create_role(
                name="Restricted Bot",
                permissions=discord.Permissions.none(),
                reason="用于限制新加入机器人的权限"
            )
            # 将该角色移到机器人自身角色的上方,确保权限生效
            await restricted_role.edit(position=member.guild.me.top_role.position - 1)
        
        # 移除机器人的所有其他角色,仅保留受限角色
        await member.edit(roles=[restricted_role], reason="新机器人加入,限制其权限")

如果不想创建角色,也可以直接针对服务器默认权限和所有频道设置权限覆盖(这种方式更繁琐):

@client.event
async def on_member_join(member):
    if member.bot:
        # 修改服务器默认角色权限,禁用所有权限
        await member.guild.default_role.edit(
            permissions=discord.Permissions.none(),
            reason="限制新机器人默认权限"
        )
        # 遍历所有频道,设置该机器人的权限覆盖为全禁用
        for channel in member.guild.channels:
            overwrite = discord.PermissionOverwrite()
            overwrite.update(**dict.fromkeys(discord.Permissions.VALID_FLAGS, False))
            await channel.set_permissions(member, overwrite=overwrite, reason="限制新机器人频道权限")

额外注意事项

  • 优先使用第一种角色方案,后续调整权限更方便
  • 测试时可邀请测试机器人验证权限是否被正确限制
  • 确保机器人角色位置足够高,否则无法修改其他机器人的角色

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.04 00:22:17