【问题标题】:newVoiceState.channel.(anything) does not exist discord.js V13newVoiceState.channel.(anything) 不存在 discord.js V13
【发布时间】:2022-01-08 17:04:52
【问题描述】:

我有这段代码console.log(newVoiceState.channel)client.on("voiceStateUpdate", async (oldVoiceState, newVoiceState) => { 内部返回:

<ref *2> VoiceChannel {
  type: 'GUILD_VOICE',
  guild: <ref *1> Guild {
    id: '927224001141538816',
    name: 'Test server bot',
    icon: null,
    features: [],
    commands: GuildApplicationCommandManager {
      permissions: [ApplicationCommandPermissionsManager],
      guild: [Circular *1]
    },
    members: GuildMemberManager { guild: [Circular *1] },
    channels: GuildChannelManager { guild: [Circular *1] },
    bans: GuildBanManager { guild: [Circular *1] },
    roles: RoleManager { guild: [Circular *1] },
    presences: PresenceManager {},
    voiceStates: VoiceStateManager { guild: [Circular *1] },
    stageInstances: StageInstanceManager { guild: [Circular *1] },
    invites: GuildInviteManager { guild: [Circular *1] },
    scheduledEvents: GuildScheduledEventManager { guild: [Circular *1] },
    available: true,
    shardId: 0,
    splash: null,
    banner: null,
    description: null,
    verificationLevel: 'NONE',
    vanityURLCode: null,
    nsfwLevel: 'DEFAULT',
    discoverySplash: null,
    memberCount: 4,
    large: false,
    premiumProgressBarEnabled: false,
    applicationId: null,
    afkTimeout: 300,
    afkChannelId: null,
    systemChannelId: '927224001141538819',
    premiumTier: 'NONE',
    premiumSubscriptionCount: 0,
    explicitContentFilter: 'DISABLED',
    mfaLevel: 'NONE',
    joinedTimestamp: 1641463218689,
    defaultMessageNotifications: 'ALL_MESSAGES',
    systemChannelFlags: SystemChannelFlags { bitfield: 0 },
    maximumMembers: 250000,
    maximumPresences: null,
    approximateMemberCount: null,
    approximatePresenceCount: null,
    vanityURLUses: null,
    rulesChannelId: null,
    publicUpdatesChannelId: null,
    preferredLocale: 'en-US',
    ownerId: '291272018773671937',
    emojis: GuildEmojiManager { guild: [Circular *1] },
    stickers: GuildStickerManager { guild: [Circular *1] }
  },
  guildId: '927224001141538816',
  parentId: '927224001141538818',
  permissionOverwrites: PermissionOverwriteManager { channel: [Circular *2] },
  id: '927224001141538820',
  name: 'General',
  rawPosition: 0,
  rtcRegion: null,
  bitrate: 64000,
  userLimit: 0
}

但是当我尝试newVoiceState.channel.parentId 时,我收到以下错误:

TypeError: Cannot read properties of null (reading 'parentId')
    at Client.<anonymous> (C:\Users\nigel\OneDrive\Software\Code\Discord-Bots\DijkdamRP\events\voiceStateUpdate.js:28:37)
    at Client.emit (node:events:390:28)
    at VoiceStateUpdate.handle (C:\Users\nigel\OneDrive\Software\Code\Discord-Bots\DijkdamRP\node_modules\discord.js\src\client\actions\VoiceStateUpdate.js:38:14)
    at Object.module.exports [as VOICE_STATE_UPDATE] (C:\Users\nigel\OneDrive\Software\Code\Discord-Bots\DijkdamRP\node_modules\discord.js\src\client\websocket\handlers\VOICE_STATE_UPDATE.js:4:35)
    at WebSocketManager.handlePacket (C:\Users\nigel\OneDrive\Software\Code\Discord-Bots\DijkdamRP\node_modules\discord.js\src\client\websocket\WebSocketManager.js:351:31)
    at WebSocketShard.onPacket (C:\Users\nigel\OneDrive\Software\Code\Discord-Bots\DijkdamRP\node_modules\discord.js\src\client\websocket\WebSocketShard.js:444:22)
    at WebSocketShard.onMessage (C:\Users\nigel\OneDrive\Software\Code\Discord-Bots\DijkdamRP\node_modules\discord.js\src\client\websocket\WebSocketShard.js:301:10)
    at WebSocket.onMessage (C:\Users\nigel\OneDrive\Software\Code\Discord-Bots\DijkdamRP\node_modules\ws\lib\event-target.js:199:18)
    at WebSocket.emit (node:events:390:28)
    at Receiver.receiverOnMessage (C:\Users\nigel\OneDrive\Software\Code\Discord-Bots\DijkdamRP\node_modules\ws\lib\websocket.js:1098:20) Promise {
  <rejected> TypeError: Cannot read properties of null (reading 'parentId')
      at Client.<anonymous> (C:\Users\nigel\OneDrive\Software\Code\Discord-Bots\DijkdamRP\events\voiceStateUpdate.js:28:37)
      at Client.emit (node:events:390:28)
      at VoiceStateUpdate.handle (C:\Users\nigel\OneDrive\Software\Code\Discord-Bots\DijkdamRP\node_modules\discord.js\src\client\actions\VoiceStateUpdate.js:38:14)
      at Object.module.exports [as VOICE_STATE_UPDATE] (C:\Users\nigel\OneDrive\Software\Code\Discord-Bots\DijkdamRP\node_modules\discord.js\src\client\websocket\handlers\VOICE_STATE_UPDATE.js:4:35)
      at WebSocketManager.handlePacket (C:\Users\nigel\OneDrive\Software\Code\Discord-Bots\DijkdamRP\node_modules\discord.js\src\client\websocket\WebSocketManager.js:351:31)
      at WebSocketShard.onPacket (C:\Users\nigel\OneDrive\Software\Code\Discord-Bots\DijkdamRP\node_modules\discord.js\src\client\websocket\WebSocketShard.js:444:22)
      at WebSocketShard.onMessage (C:\Users\nigel\OneDrive\Software\Code\Discord-Bots\DijkdamRP\node_modules\discord.js\src\client\websocket\WebSocketShard.js:301:10)
      at WebSocket.onMessage (C:\Users\nigel\OneDrive\Software\Code\Discord-Bots\DijkdamRP\node_modules\ws\lib\event-target.js:199:18)
      at WebSocket.emit (node:events:390:28)
      at Receiver.receiverOnMessage (C:\Users\nigel\OneDrive\Software\Code\Discord-Bots\DijkdamRP\node_modules\ws\lib\websocket.js:1098:20)
}

几乎所有其他channel.x 属性都是相同的。例如channel.guildId虽然在其他console.log中看得很清楚,但突然不存在了。

这怎么可能?我该如何解决?

【问题讨论】:

  • 您可以编辑您的问题并添加一些相关代码吗?
  • @ZsoltMeszaros 我真的不能添加更多代码,因为 console.log(newVoiceState.channel) 基本上是 modules.export 部分的整个文件

标签: javascript node.js discord.js


【解决方案1】:

每当成员更改语音状态时,都会发出 voiceStateUpdate。在某些情况下,例如当有人离开语音频道时,newVoiceState.channel 将是 null,如果您尝试读取它的属性,它将抛出 TypeError

您需要比较更新前后的voiceStates,以确定是什么触发了voiceStateUpdate 事件。我刚刚在下面添加了一些代码和一些示例。以下代码记录有人加入/离开/切换频道,或者是否有其他更改(例如自己静音/取消静音、开始共享屏幕等):

client.on('voiceStateUpdate', (oldState, newState) => {
  if (newState.channel && !oldState.channel)
    console.log(
      `${newState.member.displayName} has joined the voice channel "${newState.channel.name}"`
    );

  if (!newState.channel && oldState.channel)
    console.log(
      `${oldState.member.displayName} has left the voice channel "${oldState.channel.name}"`
    );

  if (newState.channel && oldState.channel) {
    if (newState.channel.id !== oldState.channel.id) {
      console.log(
        `${newState.member.displayName} has left the voice channel "${oldState.channel.name}" and joined "${newState.channel.name}"`
      );
    } else {
      console.log(
        `${newState.member.displayName} is still in the voice channel "${oldState.channel.name}" but there were some changes (e.g. muted/unmuted themselves, started sharing their screen, etc.)`
      );
    }
  }
});

【讨论】:

    猜你喜欢
    • 2021-11-09
    • 2021-10-16
    • 1970-01-01
    • 2021-10-29
    • 2021-10-13
    • 2021-11-18
    • 2021-10-09
    • 2021-12-24
    • 2022-01-05
    相关资源
    最近更新 更多