Discord. js meme команда с meme subreddit возвращает изображение как 403 запрещено - PullRequest
0 голосов
/ 21 апреля 2020

Я делаю команду мема, которая отправляет случайный мем из подзаголовка мема, и после обнаружения всего, кроме действительного изображения в embed, я записал образ на консоль, и он вернул ошибку 403. Если кто-то может помочь, это будет с благодарностью.

Код:

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})\n\n${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})\n\n${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)
            })
        })
    },


}

1 Ответ

0 голосов
/ 26 апреля 2020

Это было довольно трудно читать, так как вы повторяли блоки кода дважды (две вставки текста и вставки img)

first [Math.floor(Math.random() * 99) + 1] => [Math.floor(Math.random() * 100)] вторая делает это так, что любое значение может быть выбран, первый никогда не может быть 0.

попробуйте это (вставьте код после индексной переменной)

const isImage = index.post_hint === "image";
const subRedditName = index.subreddit_name_prefixed;
const title = index.title;
const link = 'https://reddit.com' + index.permalink;
const text = !isImage && index.selfText;
const desc = `[${title}](${link})`;

const embed = new Discord.MessageEmbed()
    .setTitle(subRedditName)
    .setColor(9384170)
    .setDescription(desc + (text ? `\n\n${text}` : ""))
    .setURL(`https://reddit.com/${subRedditName}`);

if (isImage) {
    const img = index.preview.images[0].source.url;
    embed.setImage(img);
}

messsage.channel.send(embed);
...