我检查了你的代码,Tensor 不发送 GIF 数据,而只发送图片的网址。
这段代码在第一个结果中给了我url for gif`
def get_gif(searchTerm): # PEP8: lower_case_names for functions
response = requests.get("https://g.tenor.com/v1/search?q={}&key={}&limit=1".format(searchTerm, TenorToken))
data = response.json() # `requests` doesn't need `json.loads()`
return data['results'][0]['media'][0]['gif']['url']
我通过手动挖掘 JSON 并创建此代码得到它
# see urls for all GIFs
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'])
当我收到url 时,我可以使用Embed 发送url,discord 会下载并显示 - 我不必下载。
if (message.content.lower().startswith(f"{CommandKey}gif")):
gif_url = get_gif(message.content.lower()[5:]) #Collects word after !gif
embed = discord.Embed()
embed.set_image(url=gif_url)
await message.channel.send(embed=embed)
完整的工作代码
import discord
import requests
from constants import (TenorToken, DiscordToken)
#import os
#DiscordToken = os.getenv('DISCORD_TOKEN')
#TenorToken = os.getenv('TENOR_TOKEN')
client = discord.Client()
embedColour = 0xff0000
CommandKey = '!'
# --- functions ---
#Retrieves GIF from site
def get_gif(searchTerm): # PEP8: lower_case_names for functions
response = requests.get("https://g.tenor.com/v1/search?q={}&key={}&limit=1".format(searchTerm, TenorToken))
data = response.json()
'''
# see urls for all GIFs
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'])
'''
return data['results'][0]['media'][0]['gif']['url']
@client.event
async def on_ready():
print(f"{client.user}"[:-5] + " is now Online!")
@client.event
async def on_message(message):
if message.author == client.user: # `if/else` doesn't need `()`
return
if message.content.lower().startswith(f"{CommandKey}gif"):
gif_url = get_gif(message.content.lower()[5:]) #Collects word after !gif
embed = discord.Embed()
embed.set_image(url=gif_url)
await message.channel.send(embed=embed)
# --- main ---
client.run(DiscordToken)
编辑:
与将gif 下载到本地计算机内存(使用io.BytesIO)并作为普通文件发送相同。
import io
@client.event
async def on_message(message):
if (message.author == client.user):
return
if (message.content.lower().startswith(f"{CommandKey}gif")):
gif_url = get_gif(message.content.lower()[5:]) #Collects word after !gif
# download image from url
response = requests.get(gif_url)
# put it in file-like object in memory
file_like_object = io.BytesIO(response.content)
#file_name = 'image.gif'
file_name = gif_url.split('/')[-1]
# send it as normal file
# it needs filename with extension `.gif` to display it as GIF image
await message.channel.send(file=discord.File(file_like_object, filename=file_name))
它需要更长的时间才能显示,因为它必须将其发送到本地计算机然后将其发送到互联网。
它可用于使用pillow、wand、gizeh 编辑图像(即添加文本、更改颜色、绘制图形),使用opencv 检测人脸/人物/对象,使用@ 生成视频987654324@等
顺便说一句:
在回答How to make a canvas profile card in discord python bot? 问题时,我使用pillow 向图像添加元素。但它是静态图像,而不是需要更多工作的动画 GIF(每帧分开)