Логгер Discord Bot - PullRequest
       72

Логгер Discord Bot

0 голосов
/ 05 августа 2020

Может ли кто-нибудь помочь мне заставить этот скрипт работать? Я предполагаю, что он не обновлен до новейшего Discord API.

Мне просто нужны три вещи: регистратор со сменой псевдонима, сменой имени пользователя и сменой аватара.

Уже заставил себя работать регистратор с изменением роли и приветственное сообщение, когда кто-то новый входит, но эти трое, похоже, чертовски сломаны.

bot.on('guildMemberUpdate', function(guild, oldMember, newMember) {

    //declare changes
    var Changes = {
        unknown: 0,
        addedRole: 1,
        removedRole: 2,
        username: 3,
        nickname: 4,
        avatar: 5
    };
    var change = Changes.unknown;

    //check if username changed
    if (newMember.user.username != oldMember.user.username)
        change = Changes.username;

    //check if nickname changed
    if (newMember.nickname != oldMember.nickname)
        change = Changes.nickname;

    //check if avatar changed
    if (newMember.user.avatarURL != oldMember.user.avatarURL)
        change = Changes.avatar;

    //log to console
    switch (change) {
        case Changes.unknown:
            console.log('[' + guild.name + '][UPDUSR] ' + newMember.user.username + '#' + newMember.user.discriminator);
            break;


        case Changes.username:
            console.log('[' + guild.name + '][UPDUSRNM] ' + oldMember.user.username + '#' + oldMember.user.discriminator +
                ' is now ' + newMember.user.username + '#' + newMember.user.discriminator);
            break;
        case Changes.nickname:
            console.log('[' + guild.name + '][UPDUSRNK] ' + newMember.user.username + '#' + newMember.user.discriminator +
                (oldMember.nickname != null ? ' (' + oldMember.nickname + ')' : '') +
                (newMember.nickname != null ? ' is now ' + newMember.nickname : ' no longer has a nickname.'));
            break;
        case Changes.avatar:
            console.log('[' + guild.name + '][UPDAVT] ' + newMember.user.username + '#' + newMember.user.discriminator);
            break;
    }

    //post in the guild's log channel
    var log = guild.channels.find('name', CHANNEL);
    if (log != null) {
        switch (change) {
            case Changes.unknown:
                log.sendMessage('**[User Update]** ' + newMember);
                break;


            case Changes.username:
                log.sendMessage('**[User Username Changed]** ' + newMember + ': Username changed from ' +
                    oldMember.user.username + '#' + oldMember.user.discriminator + ' to ' +
                    newMember.user.username + '#' + newMember.user.discriminator);
                break;
            case Changes.nickname:
                log.sendMessage('**[User Nickname Changed]** ' + newMember + ': ' +
                    (oldMember.nickname != null ? 'Changed nickname from ' + oldMember.nickname +
                        +newMember.nickname : 'Set nickname') + ' to ' +
                    (newMember.nickname != null ? newMember.nickname + '.' : 'original username.'));
                break;
            case Changes.avatar:
                log.sendMessage('**[User Avatar Changed]** ' + newMember);
                break;
        }
    }

});

Ответы [ 2 ]

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

Следующая строка вызывает ошибку вашей программы:

    var log = guild.channels.find('name', CHANNEL);

В разногласиях. js v12, вам нужно использовать функцию и использовать .cache.

Вот исправленная версия:

    var log = guild.channels.cache.find(c => c.name == CHANNEL);
0 голосов
/ 05 августа 2020

Есть несколько проблем:

  1. Событие guildMemberUpdate передает только два параметра: oldMember и newMember . Он не передает параметр guild , как показано в вашем коде.
  2. Поскольку параметр guild не передается, вам необходимо изменить все ссылки на guild на newMember.guild.
  3. guild.channels теперь требует добавления .cache в конец: guild.channels.cache. Для получения дополнительной информации прочтите руководство по миграции Discord. js .
  4. Метод Discord.Collection() .find() теперь принимает только
  5. .sendMessage() необходимо заменить на .send().
  6. .avatarURL необходимо заменить на .displayAvatarURL().

Примечание сбоку: почему бы вам не использовать newMember.user.tag вместо newMember.user.username + '#' + newMember.user.discriminator?

Вот модифицированный код:

bot.on('guildMemberUpdate', function(oldMember, newMember) {

    //declare changes
    var Changes = {
        unknown: 0,
        addedRole: 1,
        removedRole: 2,
        username: 3,
        nickname: 4,
        avatar: 5
    };
    var change = Changes.unknown;

    //check if username changed
    if (newMember.user.username !== oldMember.user.username)
        change = Changes.username;

    //check if nickname changed
    if (newMember.nickname !== oldMember.nickname)
        change = Changes.nickname;

    //check if avatar changed
    if (newMember.user.displayAvatarURL() !== oldMember.user.displayAvatarURL())
        change = Changes.avatar;

    //log to console
    switch (change) {
        case Changes.unknown:
            console.log('[' + newMember.guild.name + '][UPDUSR] ' + newMember.user.username + '#' + newMember.user.discriminator);
            break;


        case Changes.username:
            console.log('[' + newMember.guild.name + '][UPDUSRNM] ' + oldMember.user.username + '#' + oldMember.user.discriminator +
                ' is now ' + newMember.user.username + '#' + newMember.user.discriminator);
            break;
        case Changes.nickname:
            console.log('[' + newMember.guild.name + '][UPDUSRNK] ' + newMember.user.username + '#' + newMember.user.discriminator +
                (oldMember.nickname != null ? ' (' + oldMember.nickname + ')' : '') +
                (newMember.nickname != null ? ' is now ' + newMember.nickname : ' no longer has a nickname.'));
            break;
        case Changes.avatar:
            console.log('[' + newMember.guild.name + '][UPDAVT] ' + newMember.user.username + '#' + newMember.user.discriminator);
            break;
    }

    //post in the guild's log channel
    var log = newMember.guild.channels.cache.find(channel => channel.name === CHANNEL);
    if (log) {
        switch (change) {
            case Changes.unknown:
                log.send('**[User Update]** ' + newMember);
                break;


            case Changes.username:
                log.send('**[User Username Changed]** ' + newMember + ': Username changed from ' +
                    oldMember.user.username + '#' + oldMember.user.discriminator + ' to ' +
                    newMember.user.username + '#' + newMember.user.discriminator);
                break;
            case Changes.nickname:
                log.send('**[User Nickname Changed]** ' + newMember + ': ' +
                    (oldMember.nickname != null ? 'Changed nickname from ' + oldMember.nickname +
                        +newMember.nickname : 'Set nickname') + ' to ' +
                    (newMember.nickname != null ? newMember.nickname + '.' : 'original username.'));
                break;
            case Changes.avatar:
                log.send('**[User Avatar Changed]** ' + newMember);
                break;
        }
    }

});
...