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

Discord.py实现带超时限制的embed消息创建命令运行失败问题

Discord.py embed创建命令超时功能修复方案

存在的问题

你的代码无法正常运行超时功能的核心原因如下:

  • 未导入asyncio模块,无法识别asyncio.TimeoutError异常类型
  • 异常捕获语法错误:except asyncio.TimeoutError(*title):是非法写法,异常捕获时不需要传入额外参数
  • try/except结构不完整,仅尝试处理了第一次输入的超时,后续两次用户输入的超时逻辑完全没有做异常捕获
  • 首次标题输入的超时时间仅设置为2秒,普通用户根本无法在2秒内完成输入,极易直接触发超时
  • 你提供的代码片段中client.command装饰器前缺少@符号,若实际代码也存在该问题会导致命令无法注册,如果你注释超时相关代码后可正常运行,大概率是粘贴时的遗漏

修复后完整代码

# 首先确认你已经导入了必要模块
import discord
from discord.ext import commands
import asyncio # 必须导入asyncio才能捕获超时异常

client = commands.Bot(command_prefix="你自己的前缀", intents=discord.Intents.all()) # 请自行替换前缀、配置好intents

@client.command(aliases=["createEmbed", "embedCreate"]) # 补上缺失的@装饰器
async def embed(ctx):
    Questions = ["Titulo?", "Cor? (Hex sem #)", "Descrição?"]
    Responses = []

    def check(m):
        return m.author == ctx.author and m.channel == ctx.channel

    try:
        # 第一次输入:标题,超时时间改为20秒足够用户输入
        await ctx.send(Questions[0])
        title = await client.wait_for('message', timeout=20.0, check=check)
        Responses.append(title.content)

        # 第二次输入:颜色
        await ctx.send(Questions[1])
        cor = await client.wait_for('message', timeout=25.0, check=check)
        Responses.append(cor.content)

        # 第三次输入:描述
        await ctx.send(Questions[2])
        descrição = await client.wait_for('message', timeout=25.0, check=check)
        Responses.append(descrição.content)
    except asyncio.TimeoutError: # 修正异常捕获语法
        await ctx.send("Demorou muito")
        return

    # 新增十六进制格式校验,避免用户输入非法值导致报错
    try:
        corHex = int(Responses[1], 16)
    except ValueError:
        await ctx.send("输入的十六进制颜色不合法,请重新运行命令")
        return

    embedVar = discord.Embed(title=Responses[0], description=Responses[2], color=corHex)
    await ctx.send(embed=embedVar)

额外注意事项

  • 请确保你已经开启了消息内容意图(Message Content Intent),在Discord开发者面板的机器人设置中开启,同时代码中初始化Bot时正确配置了intents,否则wait_for无法正常捕获用户发送的消息
  • 如果需要给每一步输入单独做不同的超时提示,可以把每一次wait_for都单独套一层try/except结构,当前的写法是任意一步超时都统一触发超时提示

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 16:36:03