How do I make it so that when someone reacts with the first emoji in this command, the bot deletes the message and sends it to another channel?
Current Code:
const Discord = require("discord.js"); module.exports.run = async (bot, message, args) => { if (!message.member.hasPermission("MANAGE_MESSAGES")) return message.channel.send("You are not allowed to run this command."); let botmessage = args.join(" "); let pollchannel = bot.channels.cache.get("716348362219323443"); let avatar = message.author.avatarURL({ size: 2048 }); let helpembed = new Discord.MessageEmbed() .setAuthor(message.author.tag, avatar) .setColor("#8c52ff") .setDescription(botmessage); pollchannel.send(helpembed).then(async msg => { await msg.react("715383579059945512"); await msg.react("715383579059683349"); }); }; module.exports.help = { name: "poll" };
Advertisement
Answer
You can use awaitReactions
, createReactionCollector
or messageReactionAdd
event, I think awaitReactions
is the best option here since the other two are for more global purposes,
const emojis = ["715383579059945512", "715383579059683349"]; pollchannel.send(helpembed).then(async msg => { await msg.react(emojis[0]); await msg.react(emojis[1]); //generic filter customize to your own wants const filter = (reaction, user) => emojis.includes(reaction.emoji.id) && user.id === message.author.id; const options = { errors: ["time"], time: 5000, max: 1 }; msg.awaitReactions(filter, options) .then(collected => { const first = collected.first(); if(emojis.indexOf(first.emoji.id) === 0) { msg.delete(); // certainChannel = <TextChannel> certainChannel.send(helpembed); } else { //case you wanted to do something if they reacted with the second one } }) .catch(err => { //time up, no reactions }); });