当我尝试从 Cat API 发送图像时遇到问题。它给了我错误:TypeError: Aliases of a command must be a list or a tuple of string
这是我目前得到的代码。
@client.command(aliases = 'cat')
async def catpic(ctx):
cat_image = cat.getCat(format)
await ctx.send(cat_image)
答案 0 :(得分:2)
看起来别名 kwarg 需要一个字符串列表或元组,将 'cat' 放在列表中应该可以解决这个问题。
@client.command(aliases=['cat'])
async def catpic(ctx):
cat_image = cat.getCat(format)
await ctx.send(cat_image)
答案 1 :(得分:0)
有几个错误。我不熟悉 cat API,所以请原谅我。首先,你的别名是在一个列表中,而不是一个字符串:
@client.command(aliases=['cat']) # This is a list, just add to the end to make more aliases
async def catpic(ctx):
cat_image = cat.getCat(format)
await ctx.send(cat_image)
接下来,发送图像时,请确保对 Discord 消息使用 file
参数:
@client.command(aliases=['cat'])
async def catpic(ctx):
cat_image = cat.getCat(format)
await ctx.send(file=cat_image)
但这将取决于 cat API 将返回的内容。如果它返回一个图像,那么你应该很好。如果没有,那么您可能需要进行一些调整。
答案 2 :(得分:0)
您专门询问的有关命令别名的错误已得到解答,但您的命令还存在其他一些问题。
假设您正在使用 random-cat
模块,getCat()
需要一个字符串,但是您已经向它传递了一个名为 format
的内置函数,这导致了 {{1}您在评论中提到的错误。请参阅 random-cat repository 了解如何使用该函数。
第二个问题是 AttributeError: 'builtin_function_or_method' object has no attribute 'rstrip'
返回保存查询的 .png 文件的路径,因此您的命令唯一要做的就是下载图像,然后发送带有文件路径的消息到您计算机上的那个图像。要实际上传图片,您需要将该文件路径传递给 discord.File
,然后在发送时使用 getCat()
参数:
file
最后,第三个问题是您正在使用阻塞库来查询 TheCatAPI。这将导致您的机器人在查询图像时暂时无响应。对于小型机器人,这可能不是问题,但是您应该记住这一点,以防您的用户在有人使用您的命令时开始注意到响应缓慢。
如果您确实想解决这个问题,您将不得不使用一个异步库来发出您自己的 HTTP 请求,例如 filepath = cat.getCat()
file = discord.File(filepath)
await ctx.send(file=file)
,它已经作为 discord 的依赖项安装。 py。这样做的另一个好处是,您无需下载实际图像,因为响应提供了指向可以发送的图像的直接链接。