Может ли значение .addField записать массив, содержащий «имена» файлов? - PullRequest
1 голос
/ 28 мая 2020

Итак, я сейчас создаю бота Discord, и я сделал команду ~ play, которая считывает файлы из папки (песни) и сохраняет их в массиве, затем выбирает случайный файл и воспроизводит его в голосовом канале.

Прямо сейчас я хочу создать ~ песни, которые заставят бота отправлять в чат встраивание, содержащее .setTitle("These are that I have:"), а затем .addField({name: "songs:", value: "*all the songs in the array"}).

Причина, по которой я хочу, чтобы все песни были Одно значение поля состоит в том, что песен слишком много, а я могу использовать только 25 полей. Я пробовал forEach в значении и вне поля, но ни один из них не работал.

Вот мой код:

const discord = require("discord.js");
const fs = require("fs");

module.exports.run = async (bot, message, args) => {
  const songFiles = fs
    .readdirSync("./commands/Workout/")
    .filter((file) => file.endsWith(".mp3"));

  let songsEmbed = new discord.MessageEmbed()
    .setColor("RANDOM")
    .setTitle("These are that I have:");

  //.addField('Songname:',commandFiles.forEach())//doesn't work

  for (i = 0; i < commandFiles.length; i++) {
    songsEmbed.addField({ name: "Song name:", value: `${commandFiles[i]},` });
  } //That just create field for every song

  message.reply(songsEmbed);
};

module.exports.help = {
  name: "songs",
};

1 Ответ

1 голос
/ 28 мая 2020

Вы можете использовать функцию .join() для создания строки с записями.

Допустим, у нас есть этот массив:

const songArray = [
  "Toto - Africa.mp3",
  "Rick Astley - Never Gonna Give You Up.mp3"
  "Bag Raiders - Shooting Stars.mp3"
]

Затем мы можем запустить .join(), чтобы создать строку с каждой песней в этом массиве. Обратите внимание, что \n обозначает новую строку.

songArray.join('\n')

/*
Toto - Africa.mp3
Rick Astley - Never Gonna Give You Up.mp3
Bag Raiders - Shooting Stars.mp3
*/

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

.addField('Songname:', commandFiles.join('\n'))
...