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

discord.py函数内指定discord.Message无需命令传参的报错问题问询

错误原因

你无法直接通过discord.Message(消息ID)的方式实例化消息对象,这个类的构造方法不是给开发者手动调用的,参数不匹配才会抛出「参数数量不符」的错误。正确的做法是先获取固定消息所在的频道对象,再通过消息ID从频道中拉取对应的消息实例。

实现代码

首先提前定义好固定参数:

# 替换为你自己的实际ID
FIXED_CHANNEL_ID = 你的固定消息所在的频道ID
FIXED_MSG_ID = 你要编辑的固定消息ID

然后修改命令代码如下:

@bot.command()
async def editembed(ctx, vols, *, title):
    # 获取目标频道对象
    channel = bot.get_channel(FIXED_CHANNEL_ID)
    if not channel:
        await ctx.send("目标频道获取失败,请检查配置的频道ID是否正确")
        return
    # 拉取固定消息
    try:
        target_msg = await channel.fetch_message(FIXED_MSG_ID)
    except:
        await ctx.send("目标消息拉取失败,请检查配置的消息ID是否正确,或机器人是否有对应频道的访问权限")
        return
    # 编辑Embed逻辑
    embed = target_msg.embeds[0]
    embed.add_field(name=title, value=vols, inline=False)
    await target_msg.edit(embed=embed)
    await ctx.send("Embed编辑完成")

注意事项

  • 确保机器人拥有目标频道的查看频道、发送消息、管理消息权限
  • 如果你使用的是discord.py 2.0及以上版本,需要在代码中开启message_content意图,同时在Discord开发者后台的机器人设置页打开对应开关
  • 若目标Embed的字段数量已经达到25个上限,新增字段会触发新的报错,可根据实际需求加判断逻辑避免

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 00:18:01