Не удается прочитать свойство 'nsfw' из неопределенного - discord.js - PullRequest
0 голосов
/ 21 марта 2019

В настоящее время я работаю над ботом Discord, который использует 'discord.js', 'discord.js-commando' и 'snekfetch'. Я пытаюсь создать функцию, в которой, если член гильдии наберет "! Meme", бот-дискордер получит случайный пост из r / dankmemes и отправит его на соответствующий канал с помощью richEmbed. однако после тестирования функции появляются следующие сообщения об ошибках:

TypeError: Cannot read property 'nsfw' of undefined

TypeError: Cannot read property 'send' of undefined

Я пытался решить проблему в течение 4 дней, и я совершенно не понимаю, что является причиной этой проблемы. Согласно документации на discord.js, это должно работать абсолютно нормально. Я прикрепил командный модуль ниже:

const Commando = require('discord.js-commando');
const Discord = require('discord.js');
const snekfetch = require('snekfetch');

class MemesRssCommand extends Commando.Command
{
    constructor(client)
    {
        super(client,{
            name: 'meme',
            group: 'simple',
            memberName: 'meme',
            description: 'Takes a random meme from r/dankmemes'
        });
    }

    async run(client, message, args) {
        try {
            const { body } = await snekfetch
                .get('https://www.reddit.com/r/dankmemes.json?sort=top&t=week')
                .query({ limit: 800 });
            const allowed = message.channel.nsfw ? body.data.children : body.data.children.filter(post => !post.data.over_18);
            if (!allowed.length) return message.channel.send('Our farmers were unable to locate any ripe memes! Try again later (You shouldnt see this message. If you are reading this, then reddit is probably offline. If reddit is online and you still get this message, contact @????????#1612');
            const randomnumber = Math.floor(Math.random() * allowed.length)
            const embed = new Discord.RichEmbed()
            .setColor(0x00A2E8)
            .setTitle(allowed[randomnumber].data.title)
            .setDescription("Posted by: " + allowed[randomnumber].data.author)
            .setImage(allowed[randomnumber].data.url)
            .addField("Other info:", "Up votes: " + allowed[randomnumber].data.ups + " / Comments: " + allowed[randomnumber].data.num_comments)
            .setFooter("Posted by: " + allowed[randomnumber].data.author + " | Memes provided by https://www.reddit.com/r/dankmemes")
            message.channel.send(embed)
        } catch (err) {
            return console.log(err);
        }
    }

}

module.exports = MemesRssCommand

1 Ответ

0 голосов
/ 21 марта 2019

В соответствии с примером в документации обратный вызов для run равен run(message, args), но вы определяете его как run(client, message, args), поэтому message.channel не определено, так как вы пытаетесь получить к нему доступнеправильный объект.

    async run(message, args) {
        const member = args.member;
        const channel = message.channel
        // ....
    }
...