Как заставить бота discord повторно отправить изображение, которое вы только что отправили discord.js

#javascript #image #discord #discord.js

#javascript #изображение #Discord #discord.js

Вопрос:

Я создаю бота, у которого есть функция под названием «Самые смешные мемы Discord» или сокращенно DFM. Суть функции в том, что люди могут отправлять мемы в #memes, используя команду «DFM.submit ‘IMAGEFILE'», а затем, если люди выполнят команду «DFM», она отправит некоторые из самых популярных мемов дня / недели, но проблема, с которой я столкнулся, заключается в том, что бот неотправка изображения и вместо этого выдает мне сообщение об ошибке.

Редактировать: я забыл сообщение об ошибке «(узел: 3532) UnhandledPromiseRejectionWarning: DiscordAPIError: не удается отправить пустое сообщение»

 const Discord = require('discord.js');
const bot = new Discord.Client();
var meme
const DFM = ['some meme link.png', 'another meme link.png']
var randomDFM = DFM[Math.floor(Math.random() * DFM.length)];
            if(message.content.startsWith("DFM.submit")){
                let meme = message.content.split(" ");
                meme.shift();
                meme = meme.join(" ");
                message.channel.send(meme)
                message.channel.send('Your post was submitted to "Discords Funniest Memes"')
                DFM.unshift(meme)
            }
            if(message.content === "DFM"){
                message.channel.send(randomDFM)
                randomDFM = DFM[Math.floor(Math.random() * DFM.length)];
        }
bot.login('no token for you')
 

Комментарии:

1. Какое сообщение об ошибке вы получаете? Пожалуйста, всегда включайте его.

2. В любом случае, я совершенно забыл, что добавил его. Спасибо, что спросили

Ответ №1:

Похоже, что ваш meme пуст во время вызова send() ,

UnhandledPromiseRejectionWarning происходит, когда вы неправильно перехватываете ошибку, которая выдается (отклоняется) обещанием. Если вы await или не вызовете .then() обещание, оставшийся код будет продолжен, не дожидаясь результата send() метода. Если возникает ошибка во время send() выполнения в фоновом режиме без ожидания, именно тогда вы получаете UnhandledPromiseRejectionWarning .

Судя по discord.js документам, message.channel.send возвращает обещание. Взгляните на документы и на то, как они используют then() и catch() .

То, что вы, вероятно, хотите делать, примерно так. Это не проверено, но должно дать вам представление.

 message.channel.send(meme)
    .then(() => {
        return message.channel.send('Your post was submitted to ...');
    })
    .catch(error => {
        // handle your error here
        console.error(error);
    });
 

Ответ №2:

Чтобы отправить изображение на канал, вам необходимо переформатировать вашу message.channel.send команду.

Это должно выглядеть так:

 if(message.content === "DFM"){
    // randomDFM should contain the url to the file you are trying to send
    message.channel.send("Your Bot's Message", {files: [randomDFM]})
    randomDFM = DFM[Math.floor(Math.random() * DFM.length)]
}

 

message.channel.send также возвращает обещание, поэтому вам нужно будет убедиться, что вы также обрабатываете ошибки.

Что ты будешь выглядеть так:

 if(message.content === "DFM"){
    // randomDFM should contain the url to the file you are trying to send
    message.channel.send("Your Bot's Message", {files: [randomDFM]})
    .then(() => {
        randomDFM = DFM[Math.floor(Math.random() * DFM.length)]
    })
    .catch((err) => {
        console.log(err);
    }
}