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

discord.py运行servers命令报错NameError: name 'guild' is not defined咨询

discord.py servers命令报错修复方案

报错原因

触发NameError: name 'guild' is not defined的核心原因是代码引用了未定义的guild变量:函数内仅定义了存储所有服务器的servers变量,未声明过名为guild的变量,因此在Embed标题中调用guild.members时抛出异常。此前可正常运行大概率是之前版本的代码存在guild变量的定义,后续修改时误删了对应逻辑。

修复方案

根据需展示的成员数维度二选一即可,同时修正原代码的缩进错误(Python对缩进敏感,函数内部代码必须缩进):

场景1:展示当前触发命令的服务器成员数

直接通过上下文对象ctx获取当前服务器对象:

@bot.command()
async def servers(ctx):
    servers = list(bot.guilds)
    embed = discord.Embed(title=f'Server list, {ctx.guild.member_count} members',description='\n'.join(server.name for server in servers))
    await ctx.reply(embed=embed)

场景2:展示机器人加入的所有服务器总成员数

提前遍历所有服务器统计总人数:

@bot.command()
async def servers(ctx):
    servers = list(bot.guilds)
    total_members = sum(guild.member_count for guild in servers)
    embed = discord.Embed(title=f'Server list, {total_members} members',description='\n'.join(server.name for server in servers))
    await ctx.reply(embed=embed)

补充配置说明

如果修复后仍无法正常获取成员数,需完成两项权限配置:

  1. 进入Discord开发者后台的Bot设置页,开启Server Members Intent权限开关
  2. 代码初始化Bot时声明开启成员意图,示例:
import discord
from discord.ext import commands

intents = discord.Intents.default()
intents.members = True
# 命令前缀替换为自身配置即可
bot = commands.Bot(command_prefix='!', intents=intents)

内容的提问来源于stack exchange,提问作者link.release

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 08:36:04