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

discord.py获取在线成员(含机器人)结果仅为1如何解决

问题根因

统计在线人数恒为1不是循环逻辑错误,是Discord接口的特权意图(Privileged Intents)限制导致的:2020年底Discord调整了机器人数据获取规则,默认不会向机器人推送全量服务器成员列表、成员在线状态数据,此时ctx.guild.members列表里只会存在机器人自身的账号数据,计数结果自然永远是1。

修复方案

1. 开发者后台开启权限

进入你的机器人对应的应用管理页面,找到Bot设置页,下滑到「Privileged Gateway Intents」区域,打开两个开关:

  • SERVER MEMBERS INTENT:允许获取全量服务器成员列表
  • PRESENCE INTENT:允许获取成员的在线/离线状态
    修改后保存页面配置。

2. 代码侧显式启用意图

初始化机器人客户端时必须传入对应意图配置,仅开后台开关不修改代码不会生效,参考修正后的完整代码:

import discord
from discord.ext import commands

# 加载意图配置
intents = discord.Intents.default()
intents.members = True
intents.presences = True

# 初始化客户端时传入intents参数,替换成你自己的命令前缀
client = commands.Bot(command_prefix="!", intents=intents)

@client.command() 
async def printstats(ctx):
    online_count = 0
    for user in ctx.guild.members:
        if user.status != discord.Status.offline:
            online_count += 1
    await ctx.send(f"当前服务器在线成员(含机器人账号)共 {online_count} 人")
补充说明
  • 如果你使用的discord.py版本低于1.5,先执行pip install -U discord.py升级到最新稳定版,旧版本不支持意图配置,无法适配当前Discord接口规则。
  • 机器人加入服务器数量不足100时,上述两个特权意图可以直接开启使用;如果机器人服务的服务器超过100个,需要向Discord提交权限审核申请才能使用这两个意图。
  • 修复后重启机器人进程,再执行命令就能拿到正确的在线人数统计结果。

内容的提问来源于stack exchange,提问作者upper-productions

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 22:27:35