Discord.js упоминает игроков на приветствии - PullRequest
0 голосов
/ 04 мая 2019

Несколько дней назад я сделал код, чтобы упоминать пользователей, когда они присоединяются к моему серверу раздоров, вот код, который у меня сейчас есть:

bot.on( "guildMemberAdd", member => {
let textChannel = member.guild.channels.find(channel => channel.id === '569582472812298240');

if (textChannel){
        var messages = [
            `Brace yourselves. <@${member.user.id}> just joined the server.`,
            `Challenger approaching - <@${member.user.id}> has appeared`,
            `Welcome <@${member.user.id}>. Leave your weapon by the door.`,
            `Big <@${member.user.id}> showed up!`,
            `<@${member.user.id}> just joined... or did they?`,
            `Ready player <@${member.user.id}>`,
            `<@${member.user.id}> hopped into the server. Kangaroo!!`,
            `<@${member.user.id}> joined. You must construct additional pylons.`,
            `Hello. Is it <@${member.user.id}> you're looking for?`,
            `Where's <@${member.user.id}> in the server!`,
            `It's dangerous to go alone, take <@${member.user.id}>`
        ]

        textChannel.send({embed: {
            color: 3447003,
            description: messages[ Math.floor( Math.random() * 11 ) ],
            timestamp: new Date(),
        }
        }); 
    }
});

Проблема?Иногда я получаю правильный псевдоним человека, как вы можете видеть на этой картинке, но в других случаях я получаю только цифры и даже не могу нажать на эту «ссылку» ...

Правильный путь:

Они кликабельны, и я вижу их профиль.

enter image description here

Неправильный способ:

Я не могу щелкнуть по их идентификатору, с этим ничего не поделаешь.

enter image description here

Не уверен, почему это происходит случайно, любойпомощь будет очень признателен.

Ответы [ 3 ]

1 голос
/ 04 мая 2019

Если кто-то присоединяется к серверу, а затем уходит, и у вас нет других взаимных серверов с ними, и они не являются его друзьями, он просто покажет их идентификатор пользователя. Это на стороне клиента, и на самом деле упоминаний не существует. Однако вы можете просто отправить свое имя пользователя вместо упоминания.

0 голосов
/ 07 мая 2019

Попробуйте это:

bot.on('guildMemberAdd', member => {
    var ran = randomRange(0,2);
    var greeting;
    switch (ran) {
        case 0:
            greeting = "Brace yourselves. " + member.user + " just joined the server.";
            break;
        case 1:
            greeting = "Challenger approaching - " + member.user + " has appeared";
            break;
        case 2:
            greeting = "Welcome " + member.user + ". Leave your weapon by the door.";
            break;
        // add more if you want (but dont forget to also change the values in line 2
    }

    member.guild.channels.get('CHANNEL ID HERE').send(greeting);
});

И добавьте эту функцию:

function randomRange(min, max) { // returns an int >= min and <= max
    return Math.floor(Math.random() * (max - min + 1)) + min;
}
0 голосов
/ 04 мая 2019

Вы можете попробовать запустить toString на объекте-члене, так как он автоматически сгенерирует правильное упоминание (как иногда к нему можно добавить <@!), но вероятная причина того, что он по-прежнему не будет работать, заключается в том, что ваш клиент Discord сделалне кэшируйте пользователя, который только что присоединился.

Это может быть либо из-за того, что вы находитесь в канале журнала, у сервера слишком много участников, либо до тех пор, пока ваш клиент Discord не кэшировал пользователя.Вы можете либо попытаться не использовать встраивание, либо (возможно, лучшее решение) предоставить полное имя пользователя, а также упоминание встраивания.

...