提问者:小点点

查找由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));
        }
    };
});

因此,每次有人报告消息,而且他是第一个报告消息的人,我的bot就会发送一个新的bot,但我现在想要的是,如果反应不是第一个,我想要的是bot编辑相应的嵌入,并增加/更新messageReaction.count。有人知道我如何在没有数据库的情况下找到最初的信息吗?

提前谢谢!


共1个答案

匿名用户

我已经修改了代码,以保留来自已发送报告的消息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);
    }
});