Skip to content
Advertisement

Why am I getting: TypeError: channel.updateOverwrite is not a function

I’m following a tutorial on discord.js, making a ticket bot. I have double-checked and I am still getting the same error:

TypeError: channel.updateOverwrite is not a function

I’ve looked over all the StackOverflow questions that I could find, but none has worked for me. I have also explored a little deeper outside of SO, still no help. Here is my code:

module.exports = {
    name: 'ticket',
    description: 'Open a ticket!',
    async execute(client, message, args, cmd, Discord) {
        // creates tickets
        let channel = await message.guild.channels.create(
            `ticket: ${message.author.tag}`,
            { type: 'text' }
        );
        await channel.setParent('912495738947260446');

        // updates channel perms

        channel.updateOverwrite(message.guild.id, {
            SEND_MESSAGE: false,
            VIEW_CHANNEL: false
        });

        channel.updateOverwrite(message.author, {
            SEND_MESSAGE: true,
            VIEW_CHANNEL: true
        });

        const reactionMessage = await channel.send('Thanks for opening a ticket! A staff member will be with you shortly. While you are here, please tell us why you opened this ticket.');

        try {
            await reactionMessage.react("🔒");
            await reactionMessage.react("🗑️");
        } catch(err) {
            channel.send('Error sending emojis! Please tell a developer to check the console!');
            throw err;
        }

        const collector = reactionMessage.createReactionCollector((reaction, user) => message.guild.members.cache.find((member) => member.id === user.id).hasPermission('ADMINISTRATOR'), {dispose: true});

        collector.on('collect', (reaction, user) => {
            switch (reaction.emoji.name) {
                case "🔒":
                    channel.updateOverwrite(message.author, { SEND_MESSAGE: false, VIEW_CHANNEL: false});
                    channel.setname(`🔒 ${channel.name}`)
                    break;
                case "🗑️":
                    channel.send('Deleting Channel in 10 seconds!');
                    setTimeout(() => channel.delete(), 10000);
                    break;
            }
        });
    }
}

Advertisement

Answer

It seems you’re using discord.js v13 and trying some old code. In v13 the channel#updateOverwrite() method is removed and while in previous version channel#permissionOverwrites was a collection of overwrites, in v13 it’s a PermissionOverwriteManager. It means, you should use its .edit() method to update overwrites:

channel.permissionOverwrites.edit(
  message.author, 
  { SEND_MESSAGES: false, VIEW_CHANNEL: false },
)
User contributions licensed under: CC BY-SA
10 People found this is helpful
Advertisement