Discord.js 在欢迎时提及玩家

Posted

技术标签:

【中文标题】Discord.js 在欢迎时提及玩家【英文标题】:Discord.js mention players on welcome 【发布时间】:2019-09-22 11:57:07 【问题描述】:

几天前我做了一个代码,当他们加入我的不和谐服务器时,我会提到用户,这是我目前拥有的代码:

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,对此无能为力。

不知道为什么会随机发生这种情况,非常感谢任何帮助。

【问题讨论】:

【参考方案1】:

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

【讨论】:

【参考方案2】:

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

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

【讨论】:

&lt;@&amp;...&gt; 代表一个角色。问题实际上是 Discord 中的客户(您),而不是机器人。它确实与 Discord 缓存用户有关,但与机器人无关。如果您加入 alt,提及它,然后踢它并重新加载 Discord,您可以自己复制它。如果你不是朋友,没有打开 DM 频道,也没有共同的服务器,那么提及将不再有效。【参考方案3】:

试试这个:

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;

【讨论】:

以上是关于Discord.js 在欢迎时提及玩家的主要内容,如果未能解决你的问题,请参考以下文章

我如何在 discord.js 中获得提及用户的用户名

我正在尝试制作 discord.js 头像命令,但提及部分无法正常工作

有没有办法在不提及/ping他们的情况下向某人添加角色? [discord.js]

无法让 Discord.js 在命令中提及用户

Discord.js 如何提及消息作者?

如果玩家有角色(discord.js)