【问题标题】:discord.py gif command not sending gifdiscord.py gif 命令不发送 gif
【发布时间】:2023-03-11 13:26:01
【问题描述】:

我试图让这个命令以不和谐的方式发送 gif,但它一直抛出以下错误:

     - result -
    {'tags': [], 'url': 'https://tenor.com/bhMOm.gif', 'media': [{'nanomp4': {'url': 'https://media.tenor.com/videos/6d99ebee9e3c399e5fa09d7fde87c211/mp4', 'dims': [150, 110], 'duration': 1.35, 'preview': 'https://media.tenor.com/images/8829cbcbbc17af419c891e4f543a085b/tenor.png', 'size': 40612}, 'tinygif': {'url': 'https://media.tenor.com/images/a0835d549dbfb2a91cecd1ca6554fd9a/tenor.gif', 'dims': [220, 161], 'preview': 'https://media.tenor.com/images/da1731a035e912f1662e0eb98a9c275a/tenor.gif', 'size': 186596}, 'tinymp4': {'url': 'https://media.tenor.com/videos/e137496af32a4f5e7a144b987920f2fc/mp4', 'dims': [320, 234], 'duration': 1.35, 'preview': 'https://media.tenor.com/images/ba9face019568292aa97bcef6ea07456/tenor.png', 'size': 105731}, 'gif': {'url': 'https://media.tenor.com/images/f97a4505bb4f972cef00bc377aff7f4e/tenor.gif', 'dims': [498, 364], 'preview': 'https://media.tenor.com/images/757d4eebd56014fd914426bc64b91400/tenor.png', 'size': 3031218}, 'mp4': {'url': 'https://media.tenor.com/videos/891d2a0047a93bc230b0a0effcc00afd/mp4', 'dims': [640, 468], 'duration': 1.35, 'preview': 'https://media.tenor.com/images/757d4eebd56014fd914426bc64b91400/tenor.png', 'size': 404037}, 'nanogif': {'url': 'https://media.tenor.com/images/472731ab8a9d58a91d1e79644430a583/tenor.gif', 'dims': [123, 90], 'preview': 'https://media.tenor.com/images/b1831b36ee165642043bfa57fb69465d/tenor.gif', 'size': 71728}}], 'created': 1584318124.094198, 'shares': 1, 'itemurl': 'https://tenor.com/view/no-toilet-paper-wiping-cleaning-spring-hectic-gif-16593196', 'composite': None, 'hasaudio': False, 'title': '', 'id': '16593196'}
    - media -
    url: https://media.tenor.com/images/f97a4505bb4f972cef00bc377aff7f4e/tenor.gif
    ===============================
    [ERROR] CommandError
    ===============================
    Command raised an exception: KeyError: 'gif'

正如您所看到的,它在控制台中记录了 gif url,但它似乎在尝试将 gif url 添加到嵌入图像时抛出带有 'gif' 行的 KeyError。

我不知道我需要做些什么来解决这个问题。任何人都对导致 KeyError 的原因以及我如何让它实际发送不和谐的 gif 有任何提示或线索?

这是我的代码:


    import discord
    import os
    import aiohttp
    import random
    import json
    from discord.ext import commands
    from dotenv import load_dotenv

    load_dotenv()
    PREFIX = os.getenv('COMMAND_PREFIX')
    TENOR_API_TOKEN = os.getenv('TENOR_TOKEN')


    class Fun(commands.Cog):
        def __init__(self, client):
            self.client = client

        @commands.command(aliases=['g'], description='Get a random gif from tenor via tag', usage=f'Usage: {PREFIX}gif [tag]\nExample: {PREFIX}gif dog')
        @commands.has_guild_permissions(send_messages=True, embed_links=True)
        async def gif(self, ctx, query):
            async with aiohttp.ClientSession() as session:
                embed = discord.Embed(
                    colour=discord.Colour.dark_red())
                response = await session.get(
                    f'https://api.tenor.com/v1/search?q={query}&key={TENOR_API_TOKEN}&limit=30&media_filter=basic')
                data = json.loads(await response.text())
                gif_choice = random.randint(0, 29)

                for result in data['results']:
                    print('- result -')
                    # print(result)

                    for media in result['media']:
                        print('- media -')
                        # print(media)
                        # print(media['gif'])
                        print('url:', media['gif']['url'])

                        embed.set_image(url=data['results'][gif_choice]['gif']['url'])

            await session.close()
            await ctx.send(embed=embed)

我正在使用 discord.py rewrite,如果有帮助,我已经安装了 python3.8.9

【问题讨论】:

  • 没有看到返回的完整响应,您有for result in data['results'],然后是for media in result['media'],这意味着您有 2 个列表进行迭代。但是data['results'][gif_choice]['gif']['url'] 只进入一个列表。它需要类似于data['results'][0][gif_choice]['gif']['url']
  • 嗯...这也不起作用。回复基本上是一样的,只是现在它说KeyError: 27而不是KeyError: 'gif'

标签: python-3.x discord.py


【解决方案1】:

我发现了一些有用的东西。

    import discord
    import os
    import TenGiphPy
    from discord.ext import commands
    from dotenv import load_dotenv

    load_dotenv()

    PREFIX = os.getenv('COMMAND_PREFIX')
    TENOR_API_TOKEN = os.getenv('TENOR_TOKEN')

    TOKENS = {'TENOR_API': TENOR_API_TOKEN}

    TENOR = TenGiphPy.Tenor(token=TOKENS['TENOR_API'])


    class Fun(commands.Cog):
        def __init__(self, client):
            self.client = client

        @commands.command(aliases=['t'], description='Return a random gif by tag from tenor.', usage=f'Usage: {PREFIX}tenor [query]\nExample: {PREFIX}tenor dog')
        @commands.has_guild_permissions(send_messages=True, embed_links=True)
        async def tenor(self, ctx, *, _text):

            _url = await TENOR.arandom(str(_text))

            embed = discord.Embed(colour=discord.Colour.random())
            embed.set_image(url=_url)
            await ctx.send(embed=embed)

        @tenor.error
        async def tenor_error(self, ctx, error):
            if isinstance(error, commands.MissingRequiredArgument):
                await ctx.send(':x: Tag cant be None. Please give a valid tag to search.')
            else:
                raise error


    def setup(client):
        client.add_cog(Fun(client))

基本上换掉了我使用TenGiphPy调用 Tenor API 的方法,现在它可以完美运行了。

【讨论】:

    猜你喜欢
    • 2021-08-04
    • 2019-03-31
    • 2012-04-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-08-05
    • 2021-10-20
    相关资源
    最近更新 更多