Как использовать встроенное сообщение из другого файла?

#javascript #discord.js

#JavaScript #discord.js

Вопрос:

У меня возникли проблемы с встроенным сообщением. Я предоставил свой код ниже моего index.js в котором я пытаюсь использовать функцию, созданную в «globalspeakfunction.js «.

Не беспокойтесь о переменных, которые я отправляю, они выглядят лишними в этом, но я только предоставил соответствующий код, чтобы, надеюсь, уменьшить путаницу.

Я создаю свое встроенное сообщение в GlobalSpeakFunction.js а затем отправить его по каналу сообщения, представленного в «index.js «.

Однако моя консоль выдает «не удается отправить пустое сообщение» и когда я создаю консоль.журнал встроенного сообщения возвращает встроенное сообщение отлично?

Я попытался добавить строку «test» после моего встроенного сообщения в функцию send (), а затем она вернулась

 [object Object]test
 

Я понятия не имею, что здесь происходит. Могу ли я создать встроенное сообщение в другом файле, а затем отправить его обратно моему боту? Или есть что-то, что я просто упускаю из виду?

index.js

 const Discord = require('discord.js');
const client = new Discord.Client();
const speak = require('../GlobalSpeakFunction.js');

client.on('message', message => {
    if (message.content.toUpperCase().includes(`test`)){
        speak("778978295059972106", message, "test", "Default");
    }
}
 

GlobalSpeakFunction.js

 const Discord = require("discord.js")

module.exports = function speak(charID, data, message, emotion){
    var EmbedMessage = new Discord.MessageEmbed()
        .setColor('#0099ff')
        .setTitle('title')
        .setURL('https://discord.js.org/')
        .setDescription(message)
        .setThumbnail('https://drive.google.com/file/d/17J90PzTLBR96wTwk_Wl3U06-or6ZjPW2/view')
        .setTimestamp();
    message.channel.send(EmbedMessage);           
}
 

Ответ №1:

Я не уверен, где вы столкнулись с ошибкой «Не удается отправить пустое сообщение», я не могу воспроизвести ее локально. Однако здесь есть несколько проблем:

Сначала вы используете toUpperCase() on message.content , а затем проверяете, включает ли оно (в нижнем регистре) «test». Таким образом, этот оператор if никогда не будет выполнен.

Во-вторых, порядок аргументов в speak() функции такой charID, data, message, emotion , но вы передаете их как "778978295059972106", message, "test", "Default" (обратите внимание, как data и message меняются местами при вызове функции).

В-третьих, setThumbnail() функция ожидает прямую ссылку на изображение (ту, которая заканчивается расширением файла, например .png или .jpg). Вы предоставляете ссылку на Google Диск, для которой дополнительно задан статус приватной, что делает ее нечитаемой для всех, кроме вас. Я бы рекомендовал загрузить его на хост изображений и получить оттуда прямую ссылку.

Кроме того, [object Object] это просто строковое представление объекта. JavaScript пытается преобразовать ваш MessageEmbed (который является объектом) в строку (потому что вы пытаетесь добавить к нему ‘test’).

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

1. Ошибка «Невозможно отправить пустое сообщение» появляется при попытке отправить ложное значение, например, undefined или null .

2. Я знаю, но я не смог получить его при использовании этого кода — похоже, что Embed был сконструирован правильно, по крайней мере, в этом вызове speak() .

3. моя ошибка в том, что я запутал и уменьшил путаницу. Я заменил содержимое includes() на test для демонстрации приведенного выше кода. может показаться запутанным, что данные становятся сообщением, а сообщение становится «тестовым», но это все еще правильно. setThumbnail работает, даже если изображение является закрытым .. не уверен, как это работает? ошибка «не удается отправить пустое сообщение» находится в моей консоли, и я тоже пытаюсь сломать голову над этим, я понятия не имею, как и почему он это делает.

4. @Xeoth о, мой плохой

5. изменение message.channel.send(EmbedMessage); на message.channel.send({ embed: EmbedMessage }) сработало!