'Discord API Error on Deleting a Text Channel

I have been getting an error as mentioned in the title. Whenever I use that command, the bot creates a channel that brings up a select menu, through which the user can "teleport" to another channel while deleting the newly created channel in the process. This code successfully works twice, after which it gives the error. What should be done to fix the error so that the user can use the command as many times as they'd like? I'll work on this code further once the solution is found, but until then, I'm really stumped here. (Questions shall be answered upon questioning; apologies for the messy coding)

module.exports.run = async (client, msg, args) => {
  const guild = client.guilds.cache.get('855845132879921214')
   const channel = guild.channels.cache.get('959851265456734319')
  const newChannel = await msg.guild.channels.create(`teleporter`)
  await newChannel.permissionOverwrites.edit(msg.author.id,  {
    SEND_MESSAGES: false,
    VIEW_CHANNEL: true,
      })
  const {MessageActionRow, MessageSelectMenu, MessageEmbed} = require('discord.js')
  const embed = new MessageEmbed()
  .setTitle(`Teleporter!`)
  .setDescription("Through this interaction, you can now teleport to the main channel of the desired category!")
  const row = new MessageActionRow()
  .addComponents(
    new MessageSelectMenu()
    .setCustomId('teleport')
    .setPlaceholder('Choose a channel')
    .addOptions([
      {
        label: 'Rules',
        description: "Click to check the rules",
        value: 'rules',
      },
  {
    label: 'General',
    description: "Click to go to the main chat",
    value: 'general',
  },
      {
      label: 'Media',
      description: "Click to go to media channel",
      value: 'media',
      },
      {
        label: 'Bots',
        description: "Click to go to the bots channel",
        value: 'bots',
      }
    ]),
  )
  await newChannel.send({content: `<@${msg.author.id}>`,embeds: [embed], components: [row]})
  const wait = require('util').promisify
  client.on('interactionCreate', async interaction => {
    const member = await interaction.guild.members.fetch({
      user: interaction.user.id,
      force: true
    })
    if(!interaction.isSelectMenu()) { 
      interaction.deferUpdate()}
    else if (interaction.values == 'general'){ 
      msg.member.roles.add('958421069650337822')
      msg.member.roles.remove('943159431800172584')
      let tele = msg.guild.channels.cache.find(channel => channel.name == 'teleporter')
    tele.delete()
    msg.member.roles.add('943159431800172584')
    msg.member.roles.remove('958421069650337822')
    }
  }
  )
  }


Solution 1:[1]

Don't cache.find and delete, do it like;

const newChannel = await client.channels.fetch("id")
newChannel.delete()

Solution 2:[2]

This code should be separated with the first section as your command and the second part as a separate listener, so I have coded as such.

const {
    MessageActionRow,
    MessageSelectMenu,
    MessageEmbed,
} = require('discord.js');

module.exports.run = async (client, msg, args) => {
    const guild = client.guilds.cache.get('855845132879921214');
    const channel = guild.channels.cache.get('959851265456734319');
    const newChannel = await msg.guild.channels.create(`teleporter-${msg.author.username}`, {
        permissionOverwrites: [{
            id: guild.id,
            deny: ["VIEW_CHANNEL"],
        }, {
            id: msg.author,
            deny: ["SEND_MESSAGES"],
            allow: ["VIEW_CHANNEL"],
        }],
    });
    // In the event that more than one person uses this command at once, you will need to be able to tell the diffrence when you look up the channel later. So I added the username to the channel name.
    const embed = new MessageEmbed()
        .setTitle(`Teleporter!`)
        .setDescription("Through this interaction, you can now teleport to the main channel of the desired category!");
    const row = new MessageActionRow()
        .addComponents(
            new MessageSelectMenu()
                .setCustomId('teleport')
                .setPlaceholder('Choose a channel')
                .addOptions([{
                    label: 'Rules',
                    description: "Click to check the rules",
                    value: 'rules',
                }, {
                    label: 'General',
                    description: "Click to go to the main chat",
                    value: 'general',
                }, {
                    label: 'Media',
                    description: "Click to go to media channel",
                    value: 'media',
                }, {
                    label: 'Bots',
                    description: "Click to go to the bots channel",
                    value: 'bots',
                }]),
        );
    await newChannel.send({
        content: `${msg.author}`,
        embeds: [embed],
        components: [row],
    });
};

This section would go either in the main bot.js file, or if you have your events in seperate files, it would go in the interactionCreate file (may need to be changed a bit if you don't have one, let me know)

const wait = require('util').promisify;
client.on('interactionCreate', async interaction => {
    const member = interaction.member;
    const guild = interaction.guild;

    if (interaction.isSelectMenu()) {
        const menuName = interaction.customId;
        interaction.deferUpdate();
        if (menuName === 'teleport') {
            const tele = guild.channels.cache.find(channel => channel.name == `teleporter-${member.user.username}`);
            // lookup the channel using the previously mentioned channel name setup
            const choice = interaction.value;
            if (choice === 'general') {
                member.roles.add('958421069650337822');
                member.roles.remove('943159431800172584');
            } else if (choice === 'rules') {
                member.roles.add('roleID');
                member.roles.remove('roleID');
            } else if (choice === 'media') {
                member.roles.add('roleID');
                member.roles.remove('roleID');
            } else if (choice === 'bots') {
                member.roles.add('roleID');
                member.roles.remove('roleID');
            }
            tele.delete();
        }
    }
});

Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source
Solution 1
Solution 2 Gh0st