morfiscam
@morfiscam
Developer bot in Discord and design

Как выдать роль по кнопке определенному пользователю?

У меня есть команда "/controluser", она выдает информацию о участнике и так же кнопки взаимодействия с ним. Я не знаю, как сделать выдачу роли по этим кнопкам, определенному пользователю, на которого была вызвана команда.
Вот код, а так же скрин того, чего я имею.
const embed1 = new EmbedBuilder()
			.setTitle("Управление пользователя")
			.setColor(0x08f300)
			.addFields(
				{ name: 'Участник', value: `<@${member.user.id}>`, inline: true },
				{ name: 'Дата регистрации', value: `<t:${Math.round(member.user.createdTimestamp / 1000)}>`, inline: true },
				{ name: 'Присоединился к серверу', value: `<t:${Math.round(member.joinedAt / 1000)}>`, inline: true },
			)
			const row = new ActionRowBuilder()
			.addComponents(
				new ButtonBuilder()
					.setCustomId('row_0_button_0')
					.setLabel('Забанить')
					.setEmoji(``)
					.setStyle(ButtonStyle.Danger),
					new ButtonBuilder()
					.setCustomId('row_0_button_1')
					.setLabel('Разбанить')
					.setEmoji(``)
					.setStyle(ButtonStyle.Success),
					new ButtonBuilder()
					.setCustomId('row_0_button_4')
					.setLabel('Мут')
					.setEmoji(``)
					.setStyle(ButtonStyle.Danger),
					new ButtonBuilder()
					.setCustomId('row_0_button_5')
					.setLabel('Размут')
					.setEmoji(``)
					.setStyle(ButtonStyle.Success),
			);
			interaction.reply({
				"content": "",
				"components": [row],
				"embeds": [embed1]
			  });
		}
	}


63ee9381d132f464312599.png
  • Вопрос задан
  • 73 просмотра
Решения вопроса 1
Alexandre888
@Alexandre888 Куратор тега discord.js
Javascript-разработчик
вам нужно поставить коллектор нажатий на кнопки под сообщением, делается следующим образом:
  1. получаете отправленный ботом ответ на слэш-команду:
    await interaction.reply({ components: [row], embeds: [embed] });
    const message = await interaction.fetchReply(); // <===

  2. вешаете на полученный ответ коллектор:
    const collector = message.createMessageComponentCollector({ componentType: ComponentType.Button, time: 15000, filter: i => i.user.id === interaction.member.id });

    componentType — тип компонента, который будет собирать коллектор.
    в данном случае, это кнопки (нажатие на них)

    time — время в миллисекундах, сколько будет длится сбор нажатий на кнопки

    filter — функция, которая применяется к каждому полученному "нажатию" (если она вернёт true, коллектор "соберёт" нажатие; если false — не соберёт).
    в данном случае она проверяет, кто нажал на кнопку: автор команды или другой человек.
    если нажал другой человек — нажатие не собирается коллектором.

  3. добавляете действия по нажатию на кнопку:

    collector.on("collect", i => { // автор команды нажал на одну из кнопок
      if (i.customId === "customId_одной_из_кнопок") { // проверяете, на какую кнопку нажал юзер
       // *выдать роль пользователю* //
      }
    })


вся информация по выдаче ролей есть в официальном гайде, там же и про коллекторы есть материал.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

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