I'm started to learn discord.js library and trying to make event when user joins special voice channel and bot creates a new one and moves user. Now bot can create channel, but when it tries to move user it have an error "Cannot read properties of undefined (reading 'setChannel')"
Here is my code:
const {Collection} = require('discord.js')
let privateVoice = new Collection()
config = require('../config.json');
module.exports = async (bot, oldState, newState)=>{
const user = await bot.users.fetch(newState.id)
const member = newState.guild.members.fetch(user)
if(!oldState.channel && newState.channel.id === (config.createChannel)){
const channel = await newState.guild.channels.create(user.tag,{
type: "GUILD_VOICE",
parent: newState.channel.parent
})
member.voice.setChannel(channel);
privateVoice.set(user.id, channel.id)
}
};
CodePudding user response:
You are trying to fetch a member by their user object and you aren't even await
ing it. .fetch
is a Promise
and you use their ID, not their user object.
Instead of using this to get their member object:
const member = newState.guild.members.fetch(user)
const { member } = newState //object destructuring for cleaner syntax. 'const member = newState.member' is also fine
But this can be null
since it gets them from the member cache (see here). If you really want to fetch
them, make sure to await
it and use their ID
const member = await newState.guild.members.fetch(user.id)