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

