Почему мой коллекционер взаимодействий не собирает? (discord.js)

#javascript #node.js #discord #discord.js

Вопрос:

Я начинающий программист в javascript и особенно discord.js После того, как я обернул голову вокруг discord.js руководство, я все еще не могу заставить коллекционера работать.

 client.on('interactionCreate', interaction =gt; {  if (!interaction.isButton()) return;  const filter = i =gt; i.customId === '1' || i.customId === "2";  const collectchannel = interaction.channel;  const collector = collectchannel.createMessageComponentCollector( filter, { time: 10000 });   collector.on('collect', i =gt; {  if (i.customId === '1') {  client.commands.get('help').execute(interaction, 1, Discord);  } else if (i.customId === '2') {  client.commands.get('help').execute(interaction, 2, Discord);  }  });   collector.on('end', collected =gt; {  console.log(`Collected ${collected.size} interactions.`);  }); });  

Когда я нажимаю свою кнопку, функция сбора ничего не делает. Я попытался разместить console.log("test") , но он не срабатывает. Однако collector.on('end', collected =gt; { на самом деле он действительно стреляет. Возможно, это потому, что я не очень хороший программист. Если вы можете, пожалуйста, помогите!

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

1. Пожалуйста, предоставьте достаточно кода, чтобы другие могли лучше понять или воспроизвести проблему.

2. Вы уверены, что идентификаторы взаимодействия верны ? Попробуйте поместить a console.log(i.customId); перед обоими вашими «если» внутри collect события

3. @Tenclea Событие collect ничего не запускает в коде, поэтому я пока не могу это проверить. Журнал не печатается.

4. Можете ли вы попробовать без фильтра ?

Ответ №1:

У вас есть MessageComponentCollector внутренний обработчик событий для interactionCreate события, что в данном случае, вероятно, не то, что вам нужно.

Вот что происходит:

  1. Вы нажимаете на кнопку
  2. Ваш eventCreate обработчик срабатывает, проверяет, нажата ли кнопка, и запускает коллектор компонентов сообщений
  3. Он MessageComponentCollector ждет нажатия кнопки и еще не срабатывает, потому что одно из них уже произошло (то, которое interactionCreate в первую очередь запустило ваш обработчик).
  4. Всякий раз, когда вы снова нажимаете кнопку, коллектор срабатывает, но interactionCreate обработчик тоже срабатывает , и вы возвращаетесь к #2 запуску другого коллектора

То, что вы, вероятно, хотите, — это обрабатывать ваши нажатия на кнопки без сборщика:

 client.on('interactionCreate', interaction =gt; {  if (!interaction.isButton()) return;  if (i.customId === '1') {  client.commands.get('help').execute(interaction, 1, Discord);  } else if (i.customId === '2') {  client.commands.get('help').execute(interaction, 2, Discord);  } });  

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

1. Спасибо! Я не умен, поэтому просто использовал ненужный коллектор 😀