newMember.guild.channels.cache.find 在我的不和谐机器人代码中不起作用

时间:2021-01-26 10:49:53

标签: javascript node.js discord.js bots

我正在尝试为朋友制作一个 Discord 机器人。机器人的目的是为特定语音频道的任何成员添加角色,并在他们离开频道时将其删除。代码如下:

client.on('voiceStateUpdate', (oldMember, newMember) => {
  // définition des constantes
  const testChannel = newMember.guild.channels.cache.find(c => c.name === '? 1h de travail');
  const role = newMember.guild.roles.cache.find(r => r.name === 'test');

  // détection
  if (newMember.channelID === testChannel.id) {
    // Triggered when the user joined the channel we tested for
    if (!newMember.member.roles.cache.has(role)) 
      newMember.member.roles.add(role);
      // Add the role to the user if they don't already have it
    }
    else if (oldMember.member.roles.cache.has(role)) 
      oldMember.member.roles.remove(role);
  }
});

当我使用 npm run dev 启动机器人然后加入语音频道时,我收到此错误:

/home/archie/Documents/my-bot/index.js:13
    const testChannel = newMember.guild.channels.cache.find(c => c.name === '? 1h de travail');
                                                       ^

TypeError: Cannot read property 'find' of undefined
    at Client.<anonymous> (/home/archie/Documents/my-bot/index.js:13:56)
    at Client.emit (node:events:379:20)
    at VoiceStateUpdateHandler.handle (/home/archie/Documents/my-bot/node_modules/discord.js/src/client/websocket/packets/handlers/VoiceStateUpdate.js:40:16)
    at WebSocketPacketManager.handle (/home/archie/Documents/my-bot/node_modules/discord.js/src/client/websocket/packets/WebSocketPacketManager.js:108:65)
    at WebSocketConnection.onPacket (/home/archie/Documents/my-bot/node_modules/discord.js/src/client/websocket/WebSocketConnection.js:336:35)
    at WebSocketConnection.onMessage (/home/archie/Documents/my-bot/node_modules/discord.js/src/client/websocket/WebSocketConnection.js:299:17)
    at WebSocket.onMessage (/home/archie/Documents/my-bot/node_modules/ws/lib/event-target.js:120:16)
    at WebSocket.emit (node:events:379:20)
    at Receiver.receiverOnMessage (/home/archie/Documents/my-bot/node_modules/ws/lib/websocket.js:789:20)
    at Receiver.emit (node:events:379:20)
[nodemon] app crashed - waiting for file changes before starting...

我不明白,非常感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

看起来您正在使用 discord.js v11 和为 v12 编写的代码。在旧版本中,guild.channels 是一个集合,而不是一个管理器,因此它没有 cache 属性。这就是它是 undefined 的原因,也是您不能在其上使用 .find 的原因。

您需要做的就是将您的 discord.js 更新到最新版本。

PS:如果您使用的是 discord.js v12,client.voiceStateUpdate 事件将返回 oldStatenewState,而不是 oldMembernewMember。因此,它返回更新前后成员的 VoiceState,而不是成员本身。