【问题标题】:How to return a guild's owner name如何返回公会的所有者名称
【发布时间】:2019-06-03 00:02:24
【问题描述】:

这是我遇到问题的一段代码:

const guild = client.guilds.get('500170876243935247');
message.channel.send(guild.owner);

我希望它返回所有者的姓名,但它在控制台中显示这是一条空消息。我用console.log 运行了guild.owner,显然它显示了来自公会、表情符号、成员ID 的所有数据,最后是所有者的用户详细信息,我如何分别显示它们?

郑重声明,这是我认为需要重点关注的最后一部分:

user:
 User {
  id: '317669302549XXXXXX',
  username: 'Flicker',
  discriminator: 'XXXX',
  avatar: 'a_161cc6f5d0466f7afd9a73dc2eba159d',
  bot: false,
  lastMessageID: null,
  lastMessage: null },
 joinedTimestamp: 1539320429681,

【问题讨论】:

    标签: javascript discord discord.js


    【解决方案1】:

    当您将 User 转换为字符串时,会自动调用 User.toString() 方法:将 User 对象转换为提及,例如 @username。但是,如果您执行message.channel.send(User),它将不会调用User.toString(),因此discord.js 将留下一个无法发送的对象(有效对象的示例:message.channel.send(RichEmbed)),等等消息将为空。

    为避免这种情况,您可以尝试将提及替换为 User.tag 之类的内容:这样您还可以避免每次有人使用该命令时都收到通知。
    如果您不介意收到通知,您可以尽可能使用第一个,否则使用第二个。这是一个例子:

    const guild = client.guilds.get('500170876243935247');
    message.channel.send(message.guild.member(guild.owner) ? guild.owner.toString() : guild.owner.user.tag);
    // if the user is in that guild it will mention him, otherwise it will use .tag
    

    【讨论】:

    • User.toString() 永远不会是空的,它仍然会尝试提及用户,事情只是在做message.channel.send(User) 不会在上面调用.toString(),所以 discord.js 很困惑并且会尝试转换对象但失败,因此消息错误为 empty_message
    • 这样做不会在guild.owner上调用.toString()
    • 确实会:message.channel.send() 的参数要么是 guild.owner(因此 .toString() 将被自动调用)要么是 guild.owner.tag(这已经是一个字符串)。跨度>
    • 由于message.channel.send() 也可以接受一个数组,它不会自动输入.toString(),运行代码,给我一个empty message error 调用toString() 是需要的: message.channel.send(guild.owner.toString());即使你不在公会中,它仍然会以 的格式发送消息(见i.imgur.com/GBlROmb.png
    • 我用我的机器人试了一下,得到了同样的结果,应该是现在
    【解决方案2】:
    client.on('message', msg => {
    const thisguild  = msg.guild;   
    const owner      = thisguild.owner.user.username;
    }
    

    【讨论】:

      【解决方案3】:

      Discordjs v11.5.1

      在这些示例中,Guild 是您获取公会的占位符。这可以是message.guildmember.guild 或只是guild,具体取决于事件。或者,您也可以通过 ID 获取公会(参见下一节)并使用它!

      // Get a User by ID
      client.users.get("user id here");
      // Returns <User>
      

      // Get a Member by ID
      message.guild.members.get("user ID here");
      // Returns <Member>
      

      来源:Github

      我使用上述文档的方法是:

      let guild = msg.guild.members.get('372452704297025537');
      let admin = msg.guild.member(guild);
      message.channel.send(admin.user)
      .catch(err => console.error(err))
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-11-01
        • 2019-06-01
        • 1970-01-01
        • 2013-07-13
        相关资源
        最近更新 更多