本文介绍了newVoiceState.channel.(Anything)不存在discord.js V13的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有这段代码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
igelOneDriveSoftwareCodeDiscord-BotsDijkdamRPeventsvoiceStateUpdate.js:28:37)
    at Client.emit (node:events:390:28)
    at VoiceStateUpdate.handle (C:Users
igelOneDriveSoftwareCodeDiscord-BotsDijkdamRP
ode_modulesdiscord.jssrcclientactionsVoiceStateUpdate.js:38:14)
    at Object.module.exports [as VOICE_STATE_UPDATE] (C:Users
igelOneDriveSoftwareCodeDiscord-BotsDijkdamRP
ode_modulesdiscord.jssrcclientwebsockethandlersVOICE_STATE_UPDATE.js:4:35)
    at WebSocketManager.handlePacket (C:Users
igelOneDriveSoftwareCodeDiscord-BotsDijkdamRP
ode_modulesdiscord.jssrcclientwebsocketWebSocketManager.js:351:31)
    at WebSocketShard.onPacket (C:Users
igelOneDriveSoftwareCodeDiscord-BotsDijkdamRP
ode_modulesdiscord.jssrcclientwebsocketWebSocketShard.js:444:22)
    at WebSocketShard.onMessage (C:Users
igelOneDriveSoftwareCodeDiscord-BotsDijkdamRP
ode_modulesdiscord.jssrcclientwebsocketWebSocketShard.js:301:10)
    at WebSocket.onMessage (C:Users
igelOneDriveSoftwareCodeDiscord-BotsDijkdamRP
ode_moduleswslibevent-target.js:199:18)
    at WebSocket.emit (node:events:390:28)
    at Receiver.receiverOnMessage (C:Users
igelOneDriveSoftwareCodeDiscord-BotsDijkdamRP
ode_moduleswslibwebsocket.js:1098:20) Promise {
  <rejected> TypeError: Cannot read properties of null (reading 'parentId')
      at Client.<anonymous> (C:Users
igelOneDriveSoftwareCodeDiscord-BotsDijkdamRPeventsvoiceStateUpdate.js:28:37)
      at Client.emit (node:events:390:28)
      at VoiceStateUpdate.handle (C:Users
igelOneDriveSoftwareCodeDiscord-BotsDijkdamRP
ode_modulesdiscord.jssrcclientactionsVoiceStateUpdate.js:38:14)
      at Object.module.exports [as VOICE_STATE_UPDATE] (C:Users
igelOneDriveSoftwareCodeDiscord-BotsDijkdamRP
ode_modulesdiscord.jssrcclientwebsockethandlersVOICE_STATE_UPDATE.js:4:35)
      at WebSocketManager.handlePacket (C:Users
igelOneDriveSoftwareCodeDiscord-BotsDijkdamRP
ode_modulesdiscord.jssrcclientwebsocketWebSocketManager.js:351:31)
      at WebSocketShard.onPacket (C:Users
igelOneDriveSoftwareCodeDiscord-BotsDijkdamRP
ode_modulesdiscord.jssrcclientwebsocketWebSocketShard.js:444:22)
      at WebSocketShard.onMessage (C:Users
igelOneDriveSoftwareCodeDiscord-BotsDijkdamRP
ode_modulesdiscord.jssrcclientwebsocketWebSocketShard.js:301:10)
      at WebSocket.onMessage (C:Users
igelOneDriveSoftwareCodeDiscord-BotsDijkdamRP
ode_moduleswslibevent-target.js:199:18)
      at WebSocket.emit (node:events:390:28)
      at Receiver.receiverOnMessage (C:Users
igelOneDriveSoftwareCodeDiscord-BotsDijkdamRP
ode_moduleswslibwebsocket.js:1098:20)
}

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

这是如何可能的,我如何修复它?

推荐答案

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

您需要比较更新前后的voiceState,以找出是什么触发了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.)`
      );
    }
  }
});

这篇关于newVoiceState.channel.(Anything)不存在discord.js V13的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

09-15 01:49