@ka4ergaa

Как отловить нажатие на кнопку Discord.js?

Надо сделать так, чтобы при нажатии на кнопку с id click_to_function_in_row отправлялся текст. Пока что получилось лишь это, но ничего не работает. Как минимум, выдаёт ошибку
TypeError: message.channel.createMessageComponentCollector is not a function
.

const Discord = require('discord.js');
const client = new Discord.Client();
const MessageEmbed = require('discord.js');
const disbut = require('discord-buttons');
const MessageButton = require('discord-buttons')
const createMessageComponentCollector = require('discord.js')

disbut(client);

exports.run = async (client, message) => {

  const button = new disbut.MessageButton()
    .setStyle('url')
    .setURL(`https://youtube.com/aquamine`)
    .setLabel(`Создатель бота`);

  const nsfwbtn = new disbut.MessageButton()
		.setStyle('red')
		.setID('click_to_function_in_row') 
		.setLabel('NSFW команды') 

  const row = new disbut.MessageActionRow()
		.addComponent(button)
		.addComponent(nsfwbtn);

  const embed = new Discord.MessageEmbed()
    .setColor('#2f3136')
    .setTitle('Список команд:')
    .addField('Серверные команды', '`ping`, `serverinfo`, `user`, `avatar`, `8ball`')
    .addField('Музыкальные команды', '`play`, `pause`, `resume`, `queue`, `clear-queue`, `shuffle`, `np`, `loop`, `volume`, `skip`, `stop`')
    .addField('Модерирование', '`say`, `sayembed`, `check`, `checkping`, `clear`')
    .setThumbnail(client.user.displayAvatarURL({ dynamic:true }))

  await message.channel.send(embed, { component: row });

  const collector = message.channel.createMessageComponentCollector()

  collector.on('collect', async i => {

	  if (i.customId === 'click_to_function_in_row') {
		  await i.update({ content: 'на кнопку нажали', components: [] });

	  }
  });   
};
  • Вопрос задан
  • 201 просмотр
Решения вопроса 1
Alexandre888
@Alexandre888 Куратор тега Боты
Javascript-разработчик
версия discord.js, которую вы используете (12.5.3), на данный момент устарела и больше официально не поддерживается.

.createMessageComponentCollector() был добавлен в 13.0.0 версии, поэтому для использования нужно обновиться.
чтобы это сделать, отправьте в терминал следующее:
npm uninstall discord.js
npm install discord.js

также для обновления у вас должна быть версия node.js 16.6+.
чтобы посмотреть текущую, node -v в терминал.

насчет
await message.channel.send(embed, { component: row });

...в последних версиях структура отправки сообщения была изменена и теперь выглядит немного по-другому:
- message.channel.send(embed, { component: row });
+ message.channel.send({ embeds: [embed], components: [row] });

обо всех изменениях: https://discordjs.guide/additional-info/changes-in...
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы