#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
события, что в данном случае, вероятно, не то, что вам нужно.
Вот что происходит:
- Вы нажимаете на кнопку
- Ваш
eventCreate
обработчик срабатывает, проверяет, нажата ли кнопка, и запускает коллектор компонентов сообщений - Он
MessageComponentCollector
ждет нажатия кнопки и еще не срабатывает, потому что одно из них уже произошло (то, котороеinteractionCreate
в первую очередь запустило ваш обработчик). - Всякий раз, когда вы снова нажимаете кнопку, коллектор срабатывает, но
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. Спасибо! Я не умен, поэтому просто использовал ненужный коллектор 😀