【问题标题】:Discord JS - Getting the nickname of a user who dm's the botDiscord JS - 获取 dm 机器人用户的昵称
【发布时间】:2021-01-25 16:51:12
【问题描述】:

当用户 dm 是机器人时,我想获取与机器人在同一服务器中的用户的服务器昵称。

我尝试过:message.author.guild.members.get(message.author.id).displayName 和 message.author.displayName,第一个使机器人崩溃,第二个返回昵称为“未定义”。现在我将它设置为 message.author.username,但这给了我用户名,我需要昵称。

if(message.channel.type === "dm" && message.content === 'specific message') {

     let bicon = bot.user.displayAvatarURL;
     let botembed = new Discord.RichEmbed()
     .setTitle("**Log**")
     .setDescription("**" + message.author.username + "** messaged me!")
     .setColor("#F54603")
     .setTimestamp()

     return bot.channels.get("584424339986710540").send(botembed);

我相信需要做的是,机器人从 DM 机器人的用户那里检索用户 ID,然后在服务器中搜索该用户 ID,然后获取 displayName。但是,我不知道该怎么做。

【问题讨论】:

    标签: discord.js


    【解决方案1】:

    您必须指定机器人从哪个公会检索用户的昵称。以下代码实现了这一点:

    let guild = client.guilds.get('serverID');
    let member = guild.member(message.author);
    let nickname = member ? member.displayName : null;
    

    【讨论】:

    • client.guilds.get 不是一个函数,它现在是 fetch @Doteq
    • 是的 get 不再可用,它是 fetch 并且是一个承诺,你可以在我的回答 FWIW 中看到我的辅助函数
    【解决方案2】:

    你有消息中的所有信息,这是我使用的辅助函数:

    const getAuthorDisplayName = async (msg) => {
      const member = await msg.guild.member(msg.author);
      return member ? member.nickname : msg.author.username;
    }

    【讨论】:

    • 我无法让它工作。它总是打印出"ReferenceError: Cannot access 'guild' before initialization",但我这样定义它:const bot = new Discord.Client(); const guild = bot.guilds.cache.get('guildID');
    • 自发布此答案以来,公会成员查找也发生了变化。改为:await msg.guild.members.fetch(msg.author)
    猜你喜欢
    • 2021-09-15
    • 2021-11-01
    • 1970-01-01
    • 2019-02-19
    • 1970-01-01
    • 2021-05-11
    • 2021-07-31
    • 2018-06-26
    • 2021-02-20
    相关资源
    最近更新 更多