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

discord.py 实现类似Mimu Bot的指令创建Embed功能运行异常如何解决?

问题修复方案

原代码存在的问题

  • client.wait_for()返回的用户消息对象未接收赋值,代码中直接使用的message变量属于未定义状态,运行会直接报错
  • 第二次收集输入的提示文本仍为「输入标题」,和收集描述的逻辑不匹配
  • 输入内容赋值逻辑错误:将固定字符串"message"赋值给title/desc变量,后续调用.content属性时会因为变量是字符串类型不存在该属性报错
  • 最后创建discord.Embed的代码缺少右括号,存在基础语法错误
  • 未捕获wait_for设置的超时异常,用户5分钟未输入会直接抛出异常终止流程
  • 未完成最终的Embed发送逻辑,创建完Embed后没有推送到频道

修复后的完整代码

import asyncio
import discord
from discord.ext import commands

# 适配你已经完成的client实例化逻辑即可
@commands.command(name="create_embed")
async def embed_create(ctx):
    def check(message):
        return message.author == ctx.author and message.channel == ctx.channel

    # 收集标题
    await ctx.send('请输入Embed标题。\n如果不需要该栏位请输入 `none`。')
    try:
        title_msg = await client.wait_for("message", timeout=300.0, check=check)
        title = title_msg.content if title_msg.content.lower() != "none" else discord.Embed.Empty
    except asyncio.TimeoutError:
        await ctx.send("操作超时,已终止Embed创建流程。")
        return

    # 收集描述
    await ctx.send('请输入Embed描述内容。\n如果不需要该栏位请输入 `none`。')
    try:
        desc_msg = await client.wait_for("message", timeout=300.0, check=check)
        desc = desc_msg.content if desc_msg.content.lower() != "none" else discord.Embed.Empty
    except asyncio.TimeoutError:
        await ctx.send("操作超时,已终止Embed创建流程。")
        return

    # 生成并发送Embed
    embed = discord.Embed(title=title, description=desc, color=0xa9e9e9)
    await ctx.send(embed=embed)

额外优化说明

  • 输入判断新增了小写匹配,避免用户输入None/NONE时无法识别的问题
  • 未填的栏位使用discord.Embed.Empty而非空字符串,符合discord.py的Embed规范,不会出现无意义的空栏位占位
  • 超时后会给出明确提示,不会直接抛出无响应错误

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 11:54:03