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

Discord.py bot各服务器成员计数仅显示1的问题排查

问题诊断

计数固定显示为1由两处核心错误导致:

  • 计数逻辑完全无效:代码中写的len([discord.client.Guild.members])是把Guild类的成员属性描述符本身放进了一个单元素列表,这个列表的长度永远是1,和真实服务器的成员数据没有任何关联。
  • 状态初始化时机错误:你在创建Bot实例的时候就硬编码了Activity内容,这个阶段机器人还没完成和Discord网关的连接,根本拉取不到任何服务器、成员的实时数据,就算计数逻辑写对,这里拿到的也是错误的静态值,后续成员数量变动时也不会自动更新。
修复代码

等机器人触发on_ready就绪事件、完成服务器数据拉取后再设置presence,同时可以绑定成员加入/离开事件实现计数自动更新:

import discord
from discord.ext import commands

intents = discord.Intents.default()
intents.members = True
intents.presences = True
# 初始化时不传入固定activity,等就绪后动态设置
bot = commands.Bot(command_prefix="!", intents=intents, status=discord.Status.do_not_disturb)

@bot.event
async def on_ready():
    # 多服务器场景替换为目标服务器ID:target_guild = bot.get_guild(你的服务器ID)
    target_guild = bot.guilds[0]
    # 确保完整拉取服务器成员列表,避免缓存不全导致计数错误
    await target_guild.chunk()
    activity = discord.Activity(
        type=discord.ActivityType.watching,
        name=f"{target_guild.member_count} users"
    )
    await bot.change_presence(activity=activity)

# 成员加入时自动更新计数
@bot.event
async def on_member_join(member):
    activity = discord.Activity(
        type=discord.ActivityType.watching,
        name=f"{member.guild.member_count} users"
    )
    await bot.change_presence(activity=activity)

# 成员离开时自动更新计数
@bot.event
async def on_member_remove(member):
    activity = discord.Activity(
        type=discord.ActivityType.watching,
        name=f"{member.guild.member_count} users"
    )
    await bot.change_presence(activity=activity)

bot.run("你的机器人Token")

注意:如果你的机器人加入了多个服务器,不要直接使用bot.guilds[0]取值,提前获取目标服务器的ID通过bot.get_guild()方法指定服务器,避免统计到其他服务器的人数。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 22:21:29