const { MessageActionRow, MessageButton } = require('discord.js');
// ^^ необходимо обязательно указывать MessageActionRow и MessageButton
const row = new MessageActionRow() // пример "набора" компонентов (компоненты в вашем случае - кнопки)
.addComponents(
new MessageButton()
.setCustomId('здесь указывается ID кнопки, придуманное вами, в целях последующей идентификации кнопки')
.setEmoji('здесь указывается эмодзи, который будет на кнопке (обязательно в формате эмодзи, не в :таком:)')
.setStyle('здесь указывается стиль кнопки - есть пять стилей, про которые написано в статьях, приведённых выше'),
);
await interaction.reply({ /* для того, чтобы отправить сообщение с кнопками */
content: 'контент_сообщения',
embeds: [embed], // embed'ы (если нужно прикрепить)
components: [row] // "наборы" компонентов
});
const message = await interaction.fetchReply(); // ждём, пока бот "получит" ответ на слэш-команду
const collector = message.createMessageComponentCollector({ // "сбор" нажатий на кнопки
componentType: "BUTTON",
time: 60000 // время сбора, указывается в миллисекундах
});
collector.on('collect', i => {
// здесь пишите код для действий, которые будут происходить после нажатия на кнопки
// i.user.id - ID пользователя, который нажал на любую из кнопок | сравнивайте с interaction.user.id, если хотите удостовериться, что на кнопку нажимает именно тот, кто отправил слэш-команду
// i.customId - ID кнопки (customId, который указывался ранее, в MessageActionRow), на которую нажали.
});
collector.on('end', () => {
// здесь пишите код для действий, которые будут происходить после остановки сбора нажатий на кнопки
});
GUILD_MESSAGES
:- const client = new Client({ intents: [Intents.FLAGS.GUILDS] });
+ const client = new Client({ intents: [Intents.FLAGS.GUILDS, Intents.FLAGS.GUILD_MESSAGES] });
message
, используйте messageCreate
:- client.on("message", async message => { ... })
+ client.on("messageCreate", async message => { ... })
client.on("messageCreate", async (message) => {
await message.react("1️⃣"); // >
await message.react("2️⃣"); // > ваши эмодзи
await message.react("3️⃣"); // >
});
чтобы бот реагировал на обычные сообщения, не забудьте добавить интент "GUILD_MESSAGES"const client = new Client({ intents: [Intents.FLAGS.GUILDS, Intents.FLAGS.GUILD_MESSAGES] });
const client = new Client(
{
intents: [Intents.FLAGS.GUILDS, Intents.FLAGS.GUILD_MESSAGES, Intents.FLAGS.GUILD_MESSAGE_REACTIONS],
partials: ['MESSAGE', 'CHANNEL', 'REACTION'],
}
);
// . . . //
client.on("messageReactionAdd", async (reaction, user) => {
if (reaction.partial) {
try {
let fullReactionMessage = await reaction.fetch();
// далее работайте только с fullReactionMessage
} catch (error) {
console.error('Получить сообщение не удалось:', error);
return;
}
} else {
// ... //
}
})
message.guild.members.fetch().then(members => {
members.filter(m => !m.user.bot).forEach(member => {
member.send({
embeds: [ваш_embed]
}).catch(() => {
console.log(`${member.user.tag} сообщение не было доставлено`)
})
})
})
чтобы код выше работал, не забудьте добавить интент GUILD_MEMBERS в код:const client = new Client({ intents: [...другие интенты, Intents.FLAGS.GUILD_MEMBERS] });
https://www.youtube.com/watch?v=...
#t=NhNmNs
https://www.youtube.com/watch?v=...#t=3m4s
if (message.content.startsWith(`${settings.prefix}название_команды1`)) {
/* ... */
} else if (message.content.startsWith(`${settings.prefix}название_команды2`)) {
/* ... */
} // и т.д
(префикс)название_вашей_команды...будет выполняться ваш код.
if (message.content === ...) {
const collector = message.channel.createMessageCollector({
time: 10000
});
let userMessage = [];
collector.on('collect', m => {
if (m.author.id === message.author.id) {
userMessage.push(m.content);
collector.stop();
}
})
collector.on('end', collected => {
if (userMessage.length === 0) return message.reply(`Прошло 10 секунд, попробуйте ещё.`)
// userMessage[0] - контент первого сообщения, отправленного пользователем
});
}