1

几天前,我制作了一个代码来在用户加入我的不和谐服务器时提及他们,这是我目前拥有的代码:

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(),
        }
        }); 
    }
});

问题?有时我得到这个人的正确昵称,正如你在这张照片中看到的那样,但有时我得到的只是数字,我什至无法点击那个“链接”......

正确方法:

他们是可点击的,我可以看到他们的个人资料。

在此处输入图像描述

错误的方式:

我无法点击他们的 id,对此无能为力。

在此处输入图像描述

不知道为什么会随机发生,任何帮助将不胜感激。

4

3 回答 3

1

如果有人加入服务器然后离开,而您与他们没有其他共同服务器并且不是他们的朋友,它只会显示他们的用户 ID。这是客户端的事情,实际上并没有任何真正的解决方法。但是,您可以选择只发送他们的用户名而不是提及。

于 2019-05-04T00:17:54.610 回答
0

尝试这个:

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;
}
于 2019-05-07T17:40:27.160 回答
0

您可以尝试在成员对象上运行 toString ,因为它会自动生成正确的提及(有时可以在前面加上<@!),但它仍然无法正常工作的可能原因是因为您的 Discord 客户端没有缓存刚刚的用户加入。

这可能是因为您在日志通道中,服务器有太多成员,或者在您的 Discord 客户端缓存用户之前留下了成员。您可以尝试不使用嵌入,或者(可能是最好的解决方案)提供完整的用户名以及嵌入中的提及。

于 2019-05-04T00:28:59.133 回答