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

Discord机器人集成DALL-E遇TypeError:不支持的类型注解问题

解决Discord命令集成DALL-E时的TypeError(unsupported type annotation)

你的报错核心问题是参数体系混用+顺序错误:ctx(传统前缀命令的上下文)和discord.Interaction(斜杠命令交互对象)属于Discord.py的两套命令体系,不能同时作为函数参数,否则会触发类型注解不兼容的错误。以下是两种正确的函数声明方式:

情况1:使用斜杠命令(推荐适配现代Discord交互)

如果是开发斜杠命令(比如/dalle 生成关键词),不需要ctx,直接将Interaction作为第一个参数,搭配斜杠命令专属的装饰器:

import discord
from discord import app_commands

@app_commands.command(name="dalle", description="通过DALL-E生成图片")
# 这里添加你的权限检查装饰器(用斜杠命令专属的)
# @app_commands.checks.has_permissions(administrator=True)
async def dalle_command(interaction: discord.Interaction, query: str):
    # 示例逻辑:先延迟响应避免超时
    await interaction.response.defer()
    # 你的DALL-E图片生成代码...
    # 生成完成后发送结果
    await interaction.followup.send(content="图片生成完成", file=生成的图片对象)

情况2:使用传统前缀命令

如果坚持用前缀触发(比如!dalle 生成关键词),只保留ctx参数即可,不需要Interaction:

import discord
from discord.ext import commands

@commands.command(name="dalle")
# 传统命令的权限检查装饰器
# @commands.has_permissions(administrator=True)
async def dalle_command(ctx, *, query: str):
    # 示例逻辑
    await ctx.send("正在生成图片,请稍候...")
    # 你的DALL-E图片生成代码...
    await ctx.send(file=生成的图片对象)

额外注意:

  • 确保部署到Heroku时,requirements.txt里指定的discord.py版本是v2.0及以上(比如discord.py>=2.3.0),旧版本不支持discord.Interaction的类型注解。
  • 权限检查装饰器要和命令体系对应,斜杠命令用app_commands.checks下的方法,前缀命令用commands.checks下的方法,不要混用。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.02 06:22:09