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
相关产品推荐
相关产品推荐

