簡體   English   中英

查找由機器人創建的嵌入 (discord.js)

[英]finding an embed created by a bot (discord.js)

這可能有點復雜...

我在我的服務器上創建了一個報告系統,如果用戶對“❗”做出反應,則此消息會在只有所有者看到的頻道中報告。 到目前為止,這是我的代碼:

client.on("messageReactionAdd", (messageReaction, user) => {
    const msg = messageReaction.message;
    if (messageReaction.emoji.name == "❗") {
        if (messageReaction.count > 1) {
            // code missing here
        } else {
            const embed = new Discord.MessageEmbed()
            .setColor("#ff9e00")
            .setDescription("§ Report")
            .setFooter(`${msg.member.user.tag}`, msg.member.user.displayAvatarURL())
            .setTimestamp()
            .addFields(
                {name: "Message", value: `[${msg.cleanContent}](${msg.url})`, inline: false},
                {name: "Amount", value: messageReaction.count, inline: true},
                {name: "Channel", value: `${msg.channel.name}`, inline: true});

            msg.member.guild.channels.cache.get(config.channels.report).send((embed));
        }
    };
});

因此,每次有人報告消息,並且他是第一個報告消息時,我的機器人都會發送一個新的機器人,但我現在想要如果反應不是第一個,我希望機器人編輯相應的嵌入,並增加/更新messageReaction.count 有人知道我如何在沒有數據庫的情況下找到初始消息嗎?

提前致謝!

我已修改代碼以保留已發送報告中的消息 ID 集合。

當需要編輯報告時,從集合中獲取其 ID 並用於獲取實際消息,然后從舊嵌入創建新嵌入,並增加第二個字段。 最后,使用包含遞增字段的新嵌入來編輯消息。

client.on("messageReactionAdd", async (messageReaction, user) => {
    const msg = messageReaction.message;
    if (messageReaction.emoji.name == "❗") {
        if (messageReaction.count > 1) {
            const message = (await msg.guild.channels.cache.get(config.channels.report).messages.fetch()).find(message => message.embeds[0].fields[3].value === msg.id);

            const embed = new Discord.MessageEmbed(message.embeds[0])
            .spliceFields(1, 1, {name: "Amount", value: messageReaction.count, inline: true});

            message.edit(embed);
        } else {
            const embed = new Discord.MessageEmbed()
            .setColor("#ff9e00")
            .setDescription("§ Report")
            .setFooter(`${msg.member.user.tag}`, msg.member.user.displayAvatarURL())
            .setTimestamp()
            .addFields(
                {name: "Message", value: `[${msg.cleanContent}](${msg.url})`, inline: false},
                {name: "Amount", value: messageReaction.count, inline: true},
                {name: "Channel", value: `${msg.channel.name}`, inline: true},
                {name: "Message ID", value: msg.id, inline: false});

            msg.guild.channels.cache.get(config.channels.report).send(embed);
        }
    };
});

如果您想在刪除原始消息時編輯報告,這里有一些額外的代碼:

client.on("messageDelete", async (msg) => {
    const message = (await msg.guild.channels.cache.get(config.channels.report).messages.fetch()).find(message => message.embeds[0].fields[3].value === msg.id);

    if (message) {
        const embed = new Discord.MessageEmbed(message.embeds[0])
        .spliceFields(0, 1, {name: "Message", value: `[${msg.cleanContent}](*deleted*)`, inline: false})
        .spliceFields(3, 1, {name: "Message ID", value: '*deleted*', inline: false})
        .setDescription("§ Report\n**The user deleted their message, but here is its content.**");

        message.edit(embed);
    }
});

暫無
暫無

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

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