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

