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

discord.py编写踢出无身份组成员命令时ctx.guild.members仅返回自身问题

问题产生原因

这个问题是discord.py v1.5及以上版本引入的**网关意图(Gateway Intents)**限制导致的:

  • Discord API将服务器成员列表列为敏感数据,默认不允许机器人获取,必须手动开启对应权限
  • 你输出日志中chunked=False也可以验证成员列表没有被完整加载,仅返回了机器人自身的信息
  • 如果未开启对应权限,ctx.guild.members只会返回机器人自己的成员对象
修复方案

按以下两步操作即可解决:

  1. 开启开发者后台特权意图
    打开Discord开发者平台的机器人应用页,进入「Bot」栏目,下滑到Privileged Gateway Intents区域,开启Server Members Intent开关。

  2. 代码中声明开启成员意图
    初始化bot的时候不能使用默认意图配置,需手动开启成员访问权限,示例代码如下:

import discord
from discord.ext import commands

# 手动配置意图
intents = discord.Intents.default()
intents.members = True # 开启成员列表访问权限

# 初始化bot时传入intents参数
bot = commands.Bot(command_prefix='你设置的命令前缀', intents=intents)

代码优化建议

你现有代码中使用了member._roles这个私有属性,不符合discord.py的开发规范,建议替换为官方公开的member.roles属性,修改后的判断逻辑如下:

if len(member.roles) == 1: # 仅保留默认的@everyone身份组即视为无自定义身份组
    await member.kick(reason='No role assigned')

额外注意:机器人自身的身份组位置需要高于所有要踢出的用户的最高身份组,且需要拥有踢人权限,否则会执行失败。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 16:57:04