Estoy usando la API de Tenor para mostrar un gif aleatorio en una inserción en Discord.js. Hice todo correctamente, sin embargo, la imagen no se carga.
Aquí está mi código:
require('dotenv').config(); const Discord = require('discord.js'); const fetch = require('node-fetch') module.exports = { name: 'tenor', category: 'misc', aliases: ['gif', 't'], async execute(message) { const url = `https://g.tenor.com/v1/search?q=Anime_Kiss&key=${process.env.TENOR}&limit=20` let response = await fetch(url) let mom = await response.json(); const makerandom = Math.floor(Math.random() * mom.results.length); let embed = new Discord.MessageEmbed() .setImage(mom.results[makerandom].itemurl) message.channel.send({ embeds: [embed]}) } };Esto es lo que surge:
Es porque itemurl no es un enlace directo al archivo, sino la URL completa para ver la publicación en tenor.com. En su lugar, debe usar la tecla media . Es una matriz de diccionarios con el formato (como gif , mp4 , webm , etc.) como clave y un objeto multimedia (con claves como size , duration y url ) como valor. Significa que puede obtener la URL de la imagen gif usando results[<random index>].media[0].gif.url .
He actualizado tu código, ahora funciona como se esperaba:
require('dotenv').config(); const Discord = require('discord.js'); const fetch = require('node-fetch'); module.exports = { name: 'tenor', category: 'misc', aliases: ['gif', 't'], async execute(message) { let url = `https://g.tenor.com/v1/search?q=Anime_Kiss&key=${process.env.TENOR}&limit=20`; try { let response = await fetch(url); let { results } = await response.json(); let randomResult = results[Math.floor(Math.random() * results.length)]; let { gif } = randomResult.media[0]; let embed = new Discord.MessageEmbed().setImage(gif.url); message.channel.send({ embeds: [embed] }); } catch (err) { console.log(err); message.channel.send('Oops, there was an error'); } }, };