Discord Bot运行stats命令时触发TypeError:discord.Embed.__init__()缺少必填参数'field'
解决Discord Bot stats命令的TypeError问题
嘿,我看你在运行Discord Bot的stats命令时碰到了这个TypeError,我来帮你排查并解决它!
先把你遇到的错误信息贴出来方便参考:
Ignoring exception in on_command_error Traceback (most recent call last): File "C:\Users\jaron\Documents\PBot_rewrite\bot-env\lib\site-packages\discord\ext\commands\core.py", line 85, in wrapped ret = await coro(*args, **kwargs) File "C:\Users\jaron\Documents\PyBot_rewrite\bot.py", line 81, in stats embed = discord.Embed(title=f'{bot.user.name} Stats', description='\uFEFF', color=ctx.author.colour, timestamp=ctx.message.created_at) TypeError: __init__() missing 1 required positional argument: 'field'
问题分析
这个错误看起来有点反常,因为标准的discord.Embed构造函数根本不需要field这个必填参数。出现这个问题的核心原因大概率是下面两种情况之一:
- 你不小心在代码里覆盖了
discord.Embed类(比如自己定义了同名的函数/类,或者导入了其他库的同名类) - 你的Python环境里装的不是官方的
discord.py库,而是某个被修改过的版本
解决方案
第一步:检查导入和代码覆盖情况
先打开你的bot.py文件,确认开头的导入语句是正确的:
import discord import platform # 其他必要的导入...
同时检查文件里有没有自己定义过class Embed或者def Embed这类代码,要是有的话,把名字改成别的(比如CustomEmbed),避免和Discord官方的类重名。
第二步:修复Embed构造和其他小问题
如果确认导入没问题,你可以用下面修正后的代码替换你的stats命令函数,我还顺便帮你修复了avatar_url的弃用问题(适配discord.py v1.0+版本):
@bot.command() async def stats(ctx): """ 用于展示机器人统计信息的实用命令。 """ pythonVersion = platform.python_version() dpyVersion = discord.__version__ serverCount = len(bot.guilds) memberCount = len(set(bot.get_all_members())) # 确认Embed构造参数格式正确,英式colour/美式color都可以用 embed = discord.Embed( title=f'{bot.user.name} Stats', description='\uFEFF', color=ctx.author.colour, timestamp=ctx.message.created_at ) embed.add_field(name='Bot Version:', value=bot.version) embed.add_field(name='<:python:818814561456095233> Python Version:', value=pythonVersion) embed.add_field(name='<:discordpy:818474661410766899> discord.py Version:', value=dpyVersion) embed.add_field(name='Total Guilds:', value=serverCount) embed.add_field(name='Total Members:', value=memberCount) embed.add_field(name='Bot Developer:', value='<@751092600890458203>') # 替换弃用的avatar_url为avatar.url,同时兼容无自定义头像的情况 if bot.user.avatar: embed.set_author(name=bot.user.name, icon_url=bot.user.avatar.url) else: embed.set_author(name=bot.user.name, icon_url=bot.user.default_avatar.url) await ctx.send(embed=embed)
第三步:重装官方discord.py(如果前两步没用)
要是上面的步骤都没解决问题,那可能是你的环境里的discord.py出了问题。先卸载现有版本,再安装官方最新版:
pip uninstall discord.py pip install discord.py
内容的提问来源于stack exchange,提问作者Pukima




