如何使discord.py转换器传递参数并返回时间值

如何使discord.py转换器传递参数并返回时间值,discord.py,converters,Discord.py,Converters,我想做的是这样的: 使用命令modifyImage @commands.command() 异步def modifyImage(ctx:Context,imgName:DefaultImageConverter,size:int): img=图像列表[imgName] 仪表刻度(尺寸) 命令setDefaltImage @commands.command() 异步def setdefaultImage(ctx:Context,imgName:str): 全球违约 defaultImg=imgN

我想做的是这样的:
使用命令modifyImage

@commands.command()
异步def modifyImage(ctx:Context,imgName:DefaultImageConverter,size:int):
img=图像列表[imgName]
仪表刻度(尺寸)
命令setDefaltImage

@commands.command()
异步def setdefaultImage(ctx:Context,imgName:str):
全球违约
defaultImg=imgName
和一个转换器

class DefaultImageConverter(commands.Converter):
异步def转换(self、ctx、imgName):
如果imgName不在imageList中:
如果defaultImg!='':
返回defaultImg
如果defaultImg='':
回复(“您没有传递图像,也没有损坏的图像”)
引起争论
图像列表中的elif imgName:
返回imgName
DefaultImageConverter
将是一个转换器,它检查图像是否存在并返回它们,如果不存在,则返回默认图像(如果存在),如果不存在,他将引发错误

但是程序不是这样工作的,因为如果我使用命令
!modifyImage 100
数字“100”不会传递给参数
大小
,因为从技术上讲,转换是有效的

所以我需要做些什么

@commands.command()
异步def modifyImage(ctx:Context,imgName:typing.Optional[DefaultImageConverter],size:int):
如果imgName==无:
如果defaultImg!='':
imgName=defaultImg
其他:
发送(“您没有传递图像,也没有损坏的图像”)
返回
img=图像列表[imgName]
仪表刻度(尺寸)
转换器是什么

class DefaultImageConverter(commands.Converter):
异步def转换(self、ctx、imgName):
如果imgName不在imageList中:
返回错误参数
其他:
返回imgName
我需要做什么来使用第一个选项,因为
if imgName==None:
部分变得非常重复,每个修改图像的函数都有这样的功能


tl;博士

我想要一种方法来执行discord.py转换器,同时返回一个值,并将当前参数值传递给下一个参数

我所知道的转换器“传递参数”的唯一方法是使用typing.Optional并在转换器中引发错误,但这样做会使参数变为
None

但是程序不是这样工作的,因为如果我使用命令
!modifyImage 100
数字“100”不会传递到参数大小,因为从技术上讲,转换是有效的

与常规函数一样,您不能将可选参数置于强制参数之前。您需要对参数进行重新排序,以便首先需要
大小
,然后是
imgName

我需要做什么来使用第一个选项,因为
if imgName==None:
部分变得非常重复,每个修改图像的函数都有这样的功能

您的第一个选项基本上是好的,您只需要交换前面提到的参数,并在转换器中包含
None
检查。试试这个:

class DefaultImageConverter(commands.Converter):
异步def转换(self、ctx、imgName):
如果imgName为None或imgName不在imageList中:
如果默认IMG:
返回defaultImg
其他:
回复(“您没有传递图像,也没有损坏的图像”)
引起争论
其他:
返回imgName
@commands.command()
异步def modifyImage(ctx:Context,size:int,
imgName:typing.Optional[DefaultImageConverter]):
img=图像列表[imgName]
仪表刻度(尺寸)
然后你的
!modifyImage 100
示例应能正常工作,并且
!修改图像100 someImage