问题描述
我正在制作一个 meme 命令,从 meme subreddit 发送一个随机 meme,在发现除了嵌入中的实际图像之外的所有内容后,我将图像记录到控制台并返回 403 错误.如果有人能够提供帮助,将不胜感激.
I'm making a meme command that sends a random meme from the meme subreddit and after discovering everything except the actual image in embed was working I logged the image to console and it returned a 403 error. If anyone is able to help it would be greatly appreciated.
代码:
const https = require('https'); const Discord = require('discord.js'); const url = 'https://www.reddit.com/r/meme/hot/.json?limit=100' module.exports = { name: 'meme', description: 'sends meme', execute(message, args) { https.get(url, (result) => { var body = '' result.on('data', (chunk) => { body += chunk }) result.on('end', () => { var response = JSON.parse(body) var index = response.data.children[Math.floor(Math.random() * 99) + 1].data if (index.post_hint !== 'image') { var text = index.selftext const textembed = new Discord.MessageEmbed() .setTitle(subRedditName) .setColor(9384170) .setDescription(`[${title}](${link}) ${text}`) .setURL(`https://reddit.com/${subRedditName}`) message.channel.send(textembed) } var image = index.preview.images[0].source.url var title = index.title var link = 'https://reddit.com' + index.permalink var subRedditName = index.subreddit_name_prefixed if (index.post_hint !== 'image') { const textembed = new Discord.RichEmbed() .setTitle(subRedditName) .setColor(9384170) .setDescription(`[${title}](${link}) ${text}`) .setURL(`https://reddit.com/${subRedditName}`) message.channel.send(textembed) } console.log(image); const imageembed = new Discord.MessageEmbed() .setTitle(subRedditName) .setImage(image) .setColor(9384170) .setDescription(`[${title}](${link})`) .setURL(`https://reddit.com/${subRedditName}`) message.channel.send(imageembed) }).on('error', function (e) { console.log('Got an error: ', e) }) }) }, }
推荐答案
我试过你的代码,看到图片URL中的&被编码为&(示例:https://preview.redd.it/z8jsjzvkhq051.jpg?auto=webp&s=bb492d4861f48b62da806584f26bcc15f4d6663a)Redd.it 无法理解并返回一个403 错误.
I have tried your code and have seen that the & in the image URL is encoded to & (example: https://preview.redd.it/z8jsjzvkhq051.jpg?auto=webp&s=bb492d4861f48b62da806584f26bcc15f4d6663a) that Redd.it can't understand it and returns a 403 error.
只需将图片 URL 中的 & 替换为 & 即可.
Just replace the & to & in the image URL and it worked for me.
const https = require('https'); const Discord = require('discord.js'); const url = 'https://www.reddit.com/r/meme/hot/.json?limit=100' module.exports = { name: 'meme', description: 'sends meme', execute(message, args) { https.get(url, (result) => { var body = '' result.on('data', (chunk) => { body += chunk }) result.on('end', () => { var response = JSON.parse(body) var index = response.data.children[Math.floor(Math.random() * 99) + 1].data if (index.post_hint !== 'image') { var text = index.selftext const textembed = new Discord.MessageEmbed() .setTitle(subRedditName) .setColor(9384170) .setDescription(`[${title}](${link}) ${text}`) .setURL(`https://reddit.com/${subRedditName}`) message.channel.send(textembed) } var image = index.preview.images[0].source.url.replace('&', '&') var title = index.title var link = 'https://reddit.com' + index.permalink var subRedditName = index.subreddit_name_prefixed if (index.post_hint !== 'image') { const textembed = new Discord.RichEmbed() .setTitle(subRedditName) .setColor(9384170) .setDescription(`[${title}](${link}) ${text}`) .setURL(`https://reddit.com/${subRedditName}`) message.channel.send(textembed) } console.log(image); const imageembed = new Discord.MessageEmbed() .setTitle(subRedditName) .setImage(image) .setColor(9384170) .setDescription(`[${title}](${link})`) .setURL(`https://reddit.com/${subRedditName}`) message.channel.send(imageembed) }).on('error', function (e) { console.log('Got an error: ', e) }) }) }, }