【问题标题】:Cannot read property 'hasRole' of null无法读取 null 的属性“hasRole”
【发布时间】:2019-02-13 13:37:50
【问题描述】:

我试着听一个 dm,但你不能有一个选定的角色。

if (!message.member.hasRole('447778989914718218')) {
  if (message.channel.type == "dm") {
    if (message.content == "1") {

      client.guilds.get('447726259246727168').members.get(message.author.id).removeRole('447778997766586380')
      client.guilds.get('447726259246727168').members.get(message.author.id).removeRole('478930168875057152')
      client.guilds.get('447726259246727168').members.get(message.author.id).addRole('447778989914718218')
      //message.delete();

    } else if (message.content == "2") {

      //var server = client.guilds.get("447726259246727168");
      //server.channels.find(channels => channels.name === "bot-test").send(`nice `)
      client.guilds.get('447726259246727168').members.get(message.author.id).removeRole('447778989914718218')
      client.guilds.get('447726259246727168').members.get(message.author.id).removeRole('478930168875057152')
      client.guilds.get('447726259246727168').members.get(message.author.id).addRole('447778997766586380')
      message.channel.delete();

    } else if (message.content == "3") {

      client.guilds.get('447726259246727168').members.get(message.author.id).removeRole('447778989914718218')
      client.guilds.get('447726259246727168').members.get(message.author.id).removeRole('447778997766586380')
      client.guilds.get('447726259246727168').members.get(message.author.id).addRole('478930168875057152')

    }
  }
}

但是有一个错误:

(node:15292) UnhandledPromiseRejectionWarning: TypeError: Cannot read property 'hasRole' of null
 (C:\Users\Megaport\Desktop\bot\node_modules\discord.js\src\client\websocket\packets\handlers\MessageCreate.js:9:34)
    at WebSocketPacketManager.handle (C:\Users\Megaport\Desktop\bot\node_modules\discord.js\src\client\websocket\packets\WebSocketPacketManager.js:103:65)
    at WebSocketConnection.onPacket (C:\Users\Megaport\Desktop\bot\node_modules\discord.js\src\client\websocket\WebSocketConnection.js:333:35)
    at WebSocketConnection.onMessage (C:\Users\Megaport\Desktop\bot\node_modules\discord.js\src\client\websocket\WebSocketConnection.js:296:17)
    at WebSocket.onMessage (C:\Users\Megaport\Desktop\bot\node_modules\ws\lib\event-target.js:120:16)
    at emitOne (events.js:116:13)
    at WebSocket.emit (events.js:211:7)
    at Receiver._receiver.onmessage (C:\Users\Megaport\Desktop\bot\node_modules\ws\lib\websocket.js:137:47)
    at Receiver.dataMessage (C:\Users\Megaport\Desktop\bot\node_modules\ws\lib\receiver.js:409:14)
    at Receiver.getData (C:\Users\Megaport\Desktop\bot\node_modules\ws\lib\receiver.js:347:12)
    at Receiver.startLoop (C:\Users\Megaport\Desktop\bot\node_modules\ws\lib\receiver.js:143:16)
    at Receiver.add (C:\Users\Megaport\Desktop\bot\node_modules\ws\lib\receiver.js:117:10)
    at emitOne (events.js:116:13)
    at TLSSocket.emit (events.js:211:7)
    at addChunk (_stream_readable.js:263:12)
    at readableAddChunk (_stream_readable.js:250:11)
    at TLSSocket.Readable.push (_stream_readable.js:208:10)
    at TLSWrap.onread (net.js:597:20)
(node:15292) UnhandledPromiseRejectionWarning: Unhandled promise rejection. This error originated either by throwing inside of an async function without a catch block, or by rejecting a promise which was not handled with .catch(). (rejection id: 1)
(node:15292) [DEP0018] DeprecationWarning: Unhandled promise rejections are deprecated. In the future, promise rejections that are not handled will terminate the Node.js process with a non-zero exit code.

【问题讨论】:

  • @Andreas 谢谢,删除了我的评论。
  • 问题是消息没有member属性。我从未使用过 discord.js,但根据this GitHub issue,如果在 DM/GroupDM 文本通道或 webhook 消息中收到消息,就会发生这种情况。

标签: javascript node.js discord.js


【解决方案1】:

message.member 可以为空

  • 没有公会存在(在 DM 中发送消息)
  • GuildMember not chached(很多人使用您的机器人时的常见问题)您可以通过使用 Guild#fetchMember(或 Guild.members#fetch on master)解决此问题,这将在您解决承诺时返回成员对象
  • 消息是通过 webhook 发送的

【讨论】:

    【解决方案2】:

    如果您没有在任何地方定义.hasRole,通常它不存在。

    尝试使用以下代码:

    if (!message.member.roles.has('447778989914718218')) {    
        if (message.channel.type == "dm") {
    
            if (message.content == "1") {
    
    
                client.guilds.get('447726259246727168').members.get(message.author.id).removeRole('447778997766586380')
                client.guilds.get('447726259246727168').members.get(message.author.id).removeRole('478930168875057152')
                client.guilds.get('447726259246727168').members.get(message.author.id).addRole('447778989914718218')
                //message.delete();
            } else
            if (message.content == "2") {
    
                //var server = client.guilds.get("447726259246727168");
                //server.channels.find(channels => channels.name === "bot-test").send(`nice `)
                client.guilds.get('447726259246727168').members.get(message.author.id).removeRole('447778989914718218')
                client.guilds.get('447726259246727168').members.get(message.author.id).removeRole('478930168875057152')
                client.guilds.get('447726259246727168').members.get(message.author.id).addRole('447778997766586380')
                message.channel.delete();
            } else  
            if (message.content == "3") {
                client.guilds.get('447726259246727168').members.get(message.author.id).removeRole('447778989914718218')
                client.guilds.get('447726259246727168').members.get(message.author.id).removeRole('447778997766586380')
    
                client.guilds.get('447726259246727168').members.get(message.author.id).addRole('478930168875057152')
    
            }
        }
    }
    

    【讨论】:

    • 我不能。有一个错误:无法读取 null 的属性“角色”
    • 问题不在于hasRole不存在,而在于member不存在。
    • 您能告诉我们您是如何定义消息的吗?
    • client.on('message', async message => {这里是我的代码})
    • 哦,是的。您必须检查频道的类型是否是公会文本频道而不是 dm,因为如果它是 dm,您不会收到 guildMember
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-01-29
    • 2016-11-24
    • 2012-04-29
    • 2019-01-07
    相关资源
    最近更新 更多