Перечисление всех приглашений (discord.js)

#javascript #discord #discord.js

Вопрос:

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

Ошибка: Ошибка типа: приглашения.все это не функция

 module.exports = {
  name: `listallinvs`,
  description: `Displays all the invites created within the server.`,
  async execute(message, args) {
   

    message.guild.fetchInvites().then((invites) => {
      let allInvites = invites.all();

      const printinvites = new Discord.MessageEmbed()
        .addField(`Invite URL: ${allInvites.url}`)
     

      message.channel.send(printinvites); 
    });
  },
};
 

Ответ №1:

fetchInvites возвращает коллекцию приглашений, и в ней нет .all() метода, поэтому вы получили ошибку.

Вместо этого вы можете получить все приглашения, проверить, есть ли они, и, если есть, повторить их и создать новое поле встраивания для каждого. Вы можете использовать .map() , который возвращает новый массив. Вы можете использовать этот массив с помощью .addFields() метода MessageEmbed, который принимает массив объектов (где объект имеет a name и value ключ).

Ознакомьтесь с рабочим кодом ниже:

 message.guild.fetchInvites().then((invites) => {
  if (!invites.size) return message.channel.send('No invites found');

  let allInvites = invites.map((i) => ({
    name: 'Invite',
    value: `**Inviter:** ${i.inviter}
      **Code:** [${i.code}](https://discord.gg/${i.code})
      **Used by:** ${i.uses} of ${i.maxUses === 0 ? '∞' : i.maxUses}
      **Expires on:** ${
        i.maxAge
          ? new Date(i.createdTimestamp   i.maxAge * 1000).toLocaleString()
          : 'never'
      }`,
    inline: true,
  }));

  message.channel.send(new Discord.MessageEmbed().addFields(allInvites));
});
 

введите описание изображения здесь

Вы также можете просто добавить ссылки на приглашения в качестве значений полей:

 let allInvites = invites.map((i) => ({
  name: 'Invite link',
  value: `https://discord.gg/${i.code}`,
}));

message.channel.send(new Discord.MessageEmbed().addFields(allInvites));
 

введите описание изображения здесь

Или вы можете полностью отказаться от полей встраивания и просто использовать описание

 let allInvites = invites.map((i) => `https://discord.gg/${i.code}`);

message.channel.send(
  new Discord.MessageEmbed()
    .setTitle('Invite Links')
    .setDescription(allInvites.join('n')),
);
 

введите описание изображения здесь

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

1. Спасибо за помощь, я действительно ценю вашу помощь.