поиск вложения, созданного ботом (discord. js) - PullRequest
0 голосов
/ 01 августа 2020

Это может быть немного сложно ...

Я создал на своем сервере систему отчетов, где, если пользователь реагирует с «❗», это сообщение передается в канал только владельцу видит. Это мой код на данный момент:

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. Кто-нибудь знает, как найти исходное сообщение без базы данных?

Заранее спасибо!

1 Ответ

1 голос
/ 01 августа 2020

Я изменил код, чтобы сохранить набор идентификаторов сообщений из отправленных отчетов.

Когда отчет нужно отредактировать, его идентификатор извлекается из коллекции и используется для получения фактического сообщения , затем создается новое вложение из старого с увеличенным вторым полем. Наконец, сообщение редактируется с новым вложением, содержащим увеличенное поле.

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);
    }
});
...