【发布时间】: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