Discord. js Sharding, как с BroadEval отправляете embed сообщение? - PullRequest
2 голосов
/ 14 июля 2020

Я пытаюсь отправить встроенное сообщение на указанный c канал с помощью шардированного бота . Я успешно отправил простое сообщение с помощью этого кода:

client.shard.broadcastEval(`
      (async () => {
             let channel = await this.channels.get("683353482748756047"); 
             channel.send("Hello")
      })()
`)

Проблема начинается, когда я хочу отправить встроенное сообщение. Я пробовал передать переменную следующим образом:

//exampleEmbed is created
client.shard.broadcastEval(`
      (async () => {
             let channel = await this.channels.get("683353482748756047"); 
             channel.send('${exampleEmbed}')
      })()
`)

, но сообщение отправляется как «[object Object]».

Я думал о возврате объекта канала обратно за пределы broadcastEval и затем отправляю свою переменную, но я прочитал, что это невозможно, потому что вы не можете вернуть полные объекты Discord.

Как мне отправить сообщение для вставки? Спасибо за ваше время.

Ответы [ 2 ]

2 голосов
/ 15 июля 2020

Хорошо, я решил это, создав встраиваемое сообщение внутри broadcastEval и используя синтаксис '$ {}', чтобы его поближе.

Пример:

client.shard.broadcastEval(`
      (async () => {
             const Discord = require('discord.js');
             let channel = await this.channels.get("683353482748756047"); 
             if(channel){
                  //if shard has this server, then continue.
                  let message = new Discord.RichEmbed()
                  .setThumbnail(this.user.displayAvatarURL)
                  .setTitle('Title')
                  .addField("Something useful:", '${useful}')
                  .addField("Another useful thing:", '${useful2}')
                  .setTimestamp()
                    
                  channel.send(message)
             }
       })()
1 голос
/ 30 августа 2020

Для того, чтобы отправить сообщение для встраивания с помощью broadcastEval, вам необходимо выполнить встраивание в строку. В вашем случае:

    client.shard.broadcastEval(`
        (async () => {
            const channel = await this.channels.cache.get('683353482748756047');
            if (channel) {
                channel.send({ embed: ${JSON.stringify(exampleEmbed)} });
            }
        })();
    `);

Имейте в виду, что broadcastEval запускает код среди всех шардов, поэтому вам нужно проверить, существует ли канал, иначе вы столкнетесь с ошибками.

...