簡體   English   中英

點擊這個反應表情符號DIscord.js時是否可以刪除消息

[英]is there can delete message when click this reaction emoji DIscord.js

如何解決這個問題? 我想在用戶點擊反應 X 時刪除消息

client.on('message', async message => {
  if (message.channel.id === emojiChannelID) {
    try {
      await message.react('✅');
      await message.react('✖');
    } catch(err) {
      console.error(err);
    }
  }
});```

discord.js中有一個message.awaitReaction() ,它將返回用戶的反應

// Filter for only
const filter = function(reaction, user) { 
  return reaction.emoji.name === '✅' || reaction.emoji.name === '✖';
}

// {...}

let reactionMessage = await message.react('✅');
// Make sure to set max: 1 so that the promise returns after the first reaction
let reactionCollection = await reactionMessage.awaitReactions(filter, { max: 1});
// reactionCollection is a Collection<string, MessageReaction>
// Use first() to get the first (and only)
let reaction = reactionCollection.first();

在這里,基安,

這段代碼應該適合你,如果你願意,我可以通過 go 並解釋每一行:)

祝樓主天天開心!

async function emojiMessage(message, validReactions) {
            for (const reaction of validReactions) await message.react(reaction);
        const filter = (reaction, user) => validReactions.includes(reaction.emoji.name) && (!user.bot)

        return message
            .awaitReactions(filter, {
                max: 1,
                time: 42000
            })
            .then(collected => collected.first() && collected.first().emoji.name);
}

async function deleteMessage(message) {

    const emoji = await emojiMessage(message, ["✅", "❌"]);
    console.log(emoji)
        // if the emoji is a tick:
    if (emoji === "✅") {
        // delete their message
        console.log("tick")
        if (message.deletable == true) {
            console.log("can delete")
            console.log("attempting to delete")
            message.delete()
        }
        if (!message.deletable == false) {
            "cannot delete"
        }
    } else if (emoji === "❌") { // if the emoji is a cross
        /*
         *  do something else
         */
        return;
    }

}


client.on('message', message => {

    if (message.channel.id === emojiChannelID) {
        // runs the function
        deleteMessage(message)
    }
    /*
     * do something else
     */
})

筆記:

首次上傳

我已盡力使代碼易於理解/工作,如果有任何問題隨時發表評論,我會修復它:)

示例用法:

const m = await message.channel.send('hi!');
reactionDelete(m, message, 20000); // assuming 'message' is the actual sent message

async function reactionDelete (botMessage, playerMessage, timeout) {

    const filter = (reaction, user) => {
        return ['🗑️'].includes(reaction.emoji.name) && user.id === playerMessage.author.id;
    };

    botMessage.react('🗑️');

    botMessage.awaitReactions(filter, { max: 1, time: timeout})
    .then(collected => {
        const reaction = collected.first();

        if (reaction.emoji.name === '🗑️') {
            botMessage.delete();
        }
    })
    .catch(collected => {
        if (botMessage.deletable) botMessage.reactions.removeAll();
    });

};

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM