Discord js Аудит журналов событий дополнительная информация - PullRequest
0 голосов
/ 19 марта 2020

У меня есть мысль: я хочу создать систему, которая будет реагировать на события и сообщать об этом в отдельный чат модератора. Удалить / обновить канал. Изменить / удалить сообщение и так далее. Я уже сделал некоторые из них, и они работают.

Но я не понимаю. Я хочу создать событие, которое будет реагировать на изменение канала (или роли). Например: в канале изменилась иерархия ролей или добавлено какое-то правило для определенной роли. И я не понимаю, как я могу передать эту информацию на канал с помощью аудита.

Вот код "channelUpdate":

const { RichEmbed } = require("discord.js");
const { purple_light } = require("../../colours.json")

module.exports = (bot, oldChannel, newChannel) => {

    const logChannel = oldChannel.guild.channels.find(c => c.id === "687260937744416798"); // channel-log-id

    if (oldChannel === newChannel || !logChannel) return;
    oldChannel.guild.fetchAuditLogs({ type: 11, limit: 1 })
        .then(audit => {
            let user = audit.entries.first().executor;
            let opt = audit.entries.first().extra;

            let logEmbed = new RichEmbed()
                .setAuthor(`Channel was update: | ${oldChannel.name}`)
                .addField("Now:", `${newChannel.name}`)
                .addField("Channel id:", `${newChannel.id}`)
                .addField("Updated by:", `${user}`)
                .addField("Changes:", `${opt}`)
                .setColor(purple_light)
                .setTimestamp();
            logChannel.send(logEmbed).catch(() => console.error);
        })
        .catch(console.error);
}

Может кто-нибудь сказать мне, в каком направлении двигаться или, может быть, где искать информацию по этому вопросу?

Ответы [ 2 ]

0 голосов
/ 19 марта 2020

Вы можете использовать channelUpdate, messageUpdate, roleUpdate и др. c. события Client.

client.on("channelUpdate", (oldChannel, newChannel) => {
    const logChannel = oldChannel.guild.channels.cache.find(c => c.id === "687260937744416798"); // channel-log-id

    if (oldChannel === newChannel || !logChannel) return;
    oldChannel.guild.fetchAuditLogs({type: 11, limit: 1})
        .then(audit => {
            const user = audit.entries.first().executor;
            const opt = audit.entries.first().extra;

            const logEmbed = new RichEmbed()
                .setAuthor(`Channel was update: | ${oldChannel.name}`)
                .addField("Now:", `${newChannel.name}`)
                .addField("Channel id:", `${newChannel.id}`)
                .addField("Updated by:", `${user}`)
                .addField("Changes:", `${opt}`)
                .setColor(purple_light)
                .setTimestamp();
            logChannel.send(logEmbed).catch(console.error);
        })
        .catch(console.error);
}
0 голосов
/ 19 марта 2020

Для разрешения канала вам нужно обработать другое событие

CHANNEL_OVERWRITE_CREATE: 13

CHANNEL_OVERWRITE_DELETE: 15

CHANNEL_OVERWRITE_UPDATE: 14

Затем вы можете получить изменения , отобразить значения и получить информацию об изменении. Для ролей вам нужно обработать обновление роли события и получить изменения, как в моем решении.


const { RichEmbed } = require("discord.js");
const { purple_light } = require("../../colours.json")

module.exports = (bot, oldChannel, newChannel) => {

    const logChannel = oldChannel.guild.channels.find(c => c.id === "687260937744416798"); // channel-log-id
    //event for permission 
    //  CHANNEL_OVERWRITE_CREATE: 13
    //  CHANNEL_OVERWRITE_UPDATE: 14
    //  CHANNEL_OVERWRITE_DELETE: 15
    //event for permissions
    if (oldChannel === newChannel || !logChannel) return;
    oldChannel.guild.fetchAuditLogs({ type: 13, limit: 1 })
        .then(audit => {
            let user = audit.entries.first().executor;
            let opt = audit.entries.first().extra;
            let changes = audit.entries.first().changes
            let changedValues = changes.map(c => `${c.key} is changet from ${c.old} to ${c.new}`).join('\n')
            console.log(changedValues)
            let logEmbed = new RichEmbed()
                .setAuthor(`Channel was update: | ${oldChannel.name}`)
                .addField("Now:", `${newChannel.name}`)
                .addField("Channel id:", `${newChannel.id}`)
                .addField("Updated by:", `${user}`)
                .addField("Changes:", `${opt}`)
                .setColor(purple_light)
                .setTimestamp();
            logChannel.send(logEmbed).catch(() => console.error);
        })
        .catch(console.error);


}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...