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)
补充配置说明
如果修复后仍无法正常获取成员数,需完成两项权限配置:
- 进入Discord开发者后台的Bot设置页,开启
Server Members Intent权限开关 - 代码初始化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
相关产品推荐
相关产品推荐

