You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

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

火山引擎 最新活动