本文介绍了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的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!