Discord.py:有没有办法从 CatAPI 发送图像以与不和谐机器人聊天?

时间:2021-01-15 23:28:47

标签: python discord.py

当我尝试从 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)

3 个答案:

答案 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。这样做的另一个好处是,您无需下载实际图像,因为响应提供了指向可以发送的图像的直接链接。